lambda.mli 2.38 KB
Newer Older
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 Ident

type var_loc =
  | Stack of int
  | Env of int
  | Ext of Types.CompUnit.t * int (* If pos < 0, the first arg is the value *)
  | External of Types.CompUnit.t * int 
      (* If pos < 0, the first arg is the value *)
  | Global of int (* Only for the toplevel *)
  | Dummy

type schema_component_kind =
  [ `Type | `Element | `Attribute | `Attribute_group | `Model_group ] option

type expr = 
  | Var of var_loc
  | Apply of bool * expr * expr
  | Abstraction of var_loc array * (Types.t * Types.t) list * branches

  | Const of Types.Const.t
  | Pair of expr * expr
  | Xml of expr * expr * expr
  | Record of expr label_map
  | String of U.uindex * U.uindex * U.t * expr

  | Match of expr * branches
  | Map of expr * branches
  | Transform of expr * branches
  | Xtrans of expr * branches
  | Try of expr * branches
  | Validate of expr * schema_component_kind * string * U.t
  | RemoveField of expr * label
  | Dot of expr * label
  | Ref of expr * Types.Node.t
35
36
37
38
  | Op of string * expr list  
  | OpResolved of Obj.t * expr list
      (* the first arg is the eval function *)
      (* type Value.t is not available here ... *)
39
  | NsTable of Ns.table * expr
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

and branches = {
  brs: (Patterns.node * expr) list;
  brs_tail: bool;
  brs_input: Types.t;
  brs_accept_chars: bool;
  mutable brs_compiled: 
    (Patterns.Compile.dispatcher * expr Patterns.Compile.rhs array) option
}

type code_item =
  | Push of expr
  | Pop
  | Split of Patterns.node
  | SetGlobal of Types.CompUnit.t * int

type code = code_item list

module Put :
  sig
    val unary_op : (Serialize.Put.t -> int -> unit) ref
    val binary_op : (Serialize.Put.t -> int -> unit) ref
    val var_loc : Serialize.Put.t -> var_loc -> unit
    val expr : expr Serialize.Put.f
    val branches : Serialize.Put.t -> branches -> unit
    val code_item : Serialize.Put.t -> code_item -> unit
    val codes : code_item list Serialize.Put.f
    val compunit : Serialize.Put.t -> code_item list -> unit
  end
module Get :
  sig
    val unary_op : (Serialize.Get.t -> int) ref
    val binary_op : (Serialize.Get.t -> int) ref
    val var_loc : Serialize.Get.t -> var_loc
    val expr : expr Serialize.Get.f
    val branches : Serialize.Get.t -> branches
    val code_item : Serialize.Get.t -> code_item
    val codes : code_item list Serialize.Get.f
    val compunit : Serialize.Get.t -> code_item list
  end

val print_var_loc : Format.formatter -> var_loc -> unit