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
30
31
32
33
34
|
open Ast
open Util
open Big_int
open Type_internal
type typ = Type_internal.t
(*Returns the declared default order of a set of definitions, defaulting to Inc if no default is provided *)
val default_order : tannot defs -> order
(*Determines if the first typ is within the range of the the second typ,
using the constraints provided when the first typ contains variables.
It is an error for second typ to be anything other than a range type
If the first typ is a vector, then determines if the max representable
number is in the range of the second; it is an error for the first typ
to be anything other than a vector, a range, an atom, or a bit (after
suitable unwrapping of abbreviations, reg, and registers).
*)
val is_within_range: typ -> typ -> nexp_range list -> triple
val is_within_machine64 : typ -> nexp_range list -> triple
(* free variables and dependencies *)
(*fv_of_def consider_ty_vars consider_scatter_as_one all_defs all_defs def -> (bound_by_def, free_in_def) *)
val fv_of_def: bool -> bool -> (tannot def) list -> tannot def -> Nameset.t * Nameset.t
(*group_defs consider_scatter_as_one all_defs -> ((bound_by_def, free_in_def), def) list *)
val group_defs : bool -> tannot defs -> ((Nameset.t * Nameset.t) * (tannot def)) list
(*reodering definitions, initial functions *)
(* produce a new ordering for defs, limiting to those listed in the list, which respects dependencies *)
val restrict_defs : tannot defs -> string list -> tannot defs
val top_sort_defs : tannot defs -> tannot defs
|