Skip to content

Commit 7008d7d

Browse files
committed
Expose import_desc and type_ parsing
1 parent e6101af commit 7008d7d

File tree

3 files changed

+42
-24
lines changed

3 files changed

+42
-24
lines changed

interpreter/text/parser.mly

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ open Types
44
open Ast
55
open Operators
66
open Script
7-
7+
open ParseUtil
88

99
(* Error handling *)
1010

@@ -94,28 +94,6 @@ let name s at =
9494

9595
(* Symbolic variables *)
9696

97-
module VarMap = Map.Make(String)
98-
99-
type space = {mutable map : int32 VarMap.t; mutable count : int32}
100-
let empty () = {map = VarMap.empty; count = 0l}
101-
102-
type types = {space : space; mutable list : type_ list}
103-
let empty_types () = {space = empty (); list = []}
104-
105-
type context =
106-
{ types : types; tables : space; memories : space;
107-
funcs : space; locals : space; globals : space;
108-
datas : space; elems : space;
109-
labels : int32 VarMap.t; deferred_locals : (unit -> unit) list ref
110-
}
111-
112-
let empty_context () =
113-
{ types = empty_types (); tables = empty (); memories = empty ();
114-
funcs = empty (); locals = empty (); globals = empty ();
115-
datas = empty (); elems = empty ();
116-
labels = VarMap.empty; deferred_locals = ref []
117-
}
118-
11997
let force_locals (c : context) =
12098
List.fold_right Stdlib.(@@) !(c.deferred_locals) ();
12199
c.deferred_locals := []
@@ -239,10 +217,12 @@ let inline_type_explicit (c : context) x ft at =
239217
%token INPUT OUTPUT
240218
%token EOF
241219

242-
%start script script1 module1
220+
%start script script1 module1 import_desc type_
243221
%type<Script.script> script
244222
%type<Script.script> script1
245223
%type<Script.var option * Script.definition> module1
224+
%type<ParseUtil.context -> unit -> Ast.import_desc'> import_desc
225+
%type<Ast.type_> type_
246226

247227
%%
248228

interpreter/util/parseUtil.ml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
open Ast
2+
3+
module VarMap = Map.Make(String)
4+
type space = {mutable map : int32 VarMap.t; mutable count : int32}
5+
let empty () = {map = VarMap.empty; count = 0l}
6+
7+
type types = {space : space; mutable list : type_ list}
8+
let empty_types () = {space = empty (); list = []}
9+
10+
type context =
11+
{ types : types; tables : space; memories : space;
12+
funcs : space; locals : space; globals : space;
13+
datas : space; elems : space;
14+
labels : int32 VarMap.t; deferred_locals : (unit -> unit) list ref
15+
}
16+
let empty_context () =
17+
{ types = empty_types (); tables = empty (); memories = empty ();
18+
funcs = empty (); locals = empty (); globals = empty ();
19+
datas = empty (); elems = empty ();
20+
labels = VarMap.empty; deferred_locals = ref []
21+
}

interpreter/util/parseUtil.mli

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
open Ast
2+
3+
module VarMap : Map.S with type key = string
4+
5+
type space = {mutable map : int32 VarMap.t; mutable count : int32}
6+
val empty : unit -> space
7+
8+
type types = {space : space; mutable list : type_ list}
9+
val empty_types : unit -> types
10+
11+
type context =
12+
{ types : types; tables : space; memories : space;
13+
funcs : space; locals : space; globals : space;
14+
datas : space; elems : space;
15+
labels : int32 VarMap.t; deferred_locals : (unit -> unit) list ref
16+
}
17+
val empty_context : unit -> context

0 commit comments

Comments
 (0)