1
|
open Lustre_types
|
2
|
|
3
|
val type_const: ?is_annot:bool -> Location.t -> constant -> Types.t
|
4
|
val type_node: Types.t Env.t -> node_desc -> Location.t -> Types.t Env.t
|
5
|
|
6
|
|
7
|
module type EXPR_TYPE_HUB = sig
|
8
|
type type_expr
|
9
|
|
10
|
val import : Types.t -> type_expr
|
11
|
|
12
|
val export : type_expr -> Types.t
|
13
|
end
|
14
|
|
15
|
module Make(T: Types.S) (Expr_type_hub: EXPR_TYPE_HUB with type type_expr = T.t) : sig
|
16
|
val type_expr: ?is_annot:bool -> T.t Env.t * 'a -> bool -> bool -> expr -> T.t
|
17
|
val generalize: T.t -> unit
|
18
|
end
|
19
|
|
20
|
val try_unify: ?sub:bool -> ?semi:bool -> Types.t -> Types.t -> Location.t -> unit
|
21
|
|
22
|
val type_var_decl_list: 'a -> Types.t Env.t -> var_decl list -> Types.t Env.t
|
23
|
|
24
|
val type_prog: Types.t Env.t -> program_t -> Types.t Env.t
|
25
|
|
26
|
val check_typedef_compat: top_decl list -> unit
|
27
|
|
28
|
val check_env_compat: top_decl list -> Types.t Env.t -> Types.t Env.t -> unit
|
29
|
|
30
|
val uneval_prog_generics: program_t -> unit
|
31
|
|
32
|
(* Equality on ground types only *)
|
33
|
(* Should be used between local variables which must have a ground type *)
|
34
|
val eq_ground: Types.t -> Types.t -> bool
|