Skip to content

Commit 4261e03

Browse files
committed
Merge pull request #243 from WebAssembly/add-memory-export
Add memory exports
2 parents 3ce290a + 2f4afd4 commit 4261e03

File tree

7 files changed

+25
-9
lines changed

7 files changed

+25
-9
lines changed

ml-proto/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ local: ( local <type>* ) | ( local <name> <type> )
132132
module: ( module <type>* <func>* <import>* <export>* <table>* <memory>? <start>? )
133133
type: ( type <name>? ( func <param>* <result>? ) )
134134
import: ( import <name>? "<module_name>" "<func_name>" (param <type>* ) (result <type>)* )
135-
export: ( export "<char>*" <var> )
135+
export: ( export "<char>*" <var> ) | ( export "<char>*" memory)
136136
start: ( start <var> )
137137
table: ( table <var>* )
138138
memory: ( memory <int> <int>? <segment>* )

ml-proto/host/parser.mly

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,9 @@ import :
394394
395395
export :
396396
| LPAR EXPORT TEXT var RPAR
397-
{ let at = at () in fun c -> {name = $3; func = $4 c func} @@ at }
397+
{ let at = at () in fun c -> ExportFunc ($3, ($4 c func)) @@ at }
398+
| LPAR EXPORT TEXT MEMORY RPAR
399+
{ let at = at () in fun c -> ExportMemory $3 @@ at }
398400
;
399401
400402
module_fields :

ml-proto/host/print.ml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@ let print_var_sig prefix i t =
2121
let print_func_sig m prefix i f =
2222
printf "%s %d : %s\n" prefix i (string_of_func_type (func_type m f))
2323

24-
let print_export_sig m prefix n f =
25-
printf "%s \"%s\" : %s\n" prefix n (string_of_func_type (func_type m f))
24+
let print_export_sig m n f =
25+
printf "export \"%s\" : %s\n" n (string_of_func_type (func_type m f))
26+
27+
let print_export_mem n =
28+
printf "export \"%s\" : memory\n" n
2629

2730
let print_table_elem i x =
2831
printf "table [%d] = func %d\n" i x.it
@@ -36,7 +39,9 @@ let print_func m i f =
3639
print_func_sig m "func" i f
3740

3841
let print_export m i ex =
39-
print_export_sig m "export" ex.it.name (List.nth m.it.funcs ex.it.func.it)
42+
match ex.it with
43+
| ExportFunc (n, x) -> print_export_sig m n (List.nth m.it.funcs x.it)
44+
| ExportMemory n -> print_export_mem n
4045

4146
let print_module m =
4247
let {funcs; start; exports; table} = m.it in

ml-proto/spec/check.ml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,9 @@ let check_elem c x =
289289
module NameSet = Set.Make(String)
290290

291291
let check_export c set ex =
292-
let {name; func = x} = ex.it in
293-
ignore (func c x);
292+
let name = match ex.it with
293+
| ExportFunc (n, x) -> ignore (func c x); n
294+
| ExportMemory n -> require (c.has_memory) ex.at "no memory to export"; n in
294295
require (not (NameSet.mem name set)) ex.at
295296
"duplicate export name";
296297
NameSet.add name set

ml-proto/spec/eval.ml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,9 @@ let init_memory {it = {initial; segments; _}} =
315315
mem
316316

317317
let add_export funcs ex =
318-
ExportMap.add ex.it.name (List.nth funcs ex.it.func.it)
318+
match ex.it with
319+
| ExportFunc (n, x) -> ExportMap.add n (List.nth funcs x.it)
320+
| ExportMemory n -> fun x -> x
319321

320322
let init m imports host =
321323
assert (List.length imports = List.length m.it.Kernel.imports);

ml-proto/spec/kernel.ml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ and memory' =
126126
and segment = Memory.segment Source.phrase
127127

128128
type export = export' Source.phrase
129-
and export' = {name : string; func : var}
129+
and export' =
130+
| ExportFunc of string * var
131+
| ExportMemory of string
130132

131133
type import = import' Source.phrase
132134
and import' =

ml-proto/test/exports.wast

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,7 @@
2020
)
2121

2222
(assert_return (invoke "e" (i32.const 42)) (i32.const 43))
23+
24+
(module (memory 0 0) (export "a" memory))
25+
(module (memory 0 0) (export "a" memory) (export "b" memory))
26+
(assert_invalid (module (export "a" memory)) "no memory to export")

0 commit comments

Comments
 (0)