package p4spectec

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file var.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
open Lang
open Il
open Il.Print
open Util.Source

type t = id * iter list

let to_string (id, iters) =
  string_of_varid id ^ String.concat "" (List.map string_of_iter iters)

let compare_iter (iter_a : iter) (iter_b : iter) =
  match (iter_a, iter_b) with
  | Opt, Opt | List, List -> 0
  | Opt, List -> -1
  | List, Opt -> 1

let rec compare_iters iters_a iters_b =
  match (iters_a, iters_b) with
  | [], [] -> 0
  | [], _ :: _ -> -1
  | _ :: _, [] -> 1
  | iter_a :: iters_a, iter_b :: iters_b ->
      let c = compare_iter iter_a iter_b in
      if c <> 0 then c else compare_iters iters_a iters_b

(* Compare variables by id, then by iters. *)
let compare (id_a, iters_a) (id_b, iters_b) =
  let cmp_id = String.compare id_a.it id_b.it in
  if cmp_id = 0 then compare_iters iters_a iters_b else cmp_id