@@ -82,11 +82,11 @@ let func (inst : module_inst) x = lookup "function" inst.funcs x
82
82
let table (inst : module_inst ) x = lookup " table" inst.tables x
83
83
let memory (inst : module_inst ) x = lookup " memory" inst.memories x
84
84
let global (inst : module_inst ) x = lookup " global" inst.globals x
85
- let elems (inst : module_inst ) x = lookup " elems " inst.elems x
86
- let data (inst : module_inst ) x = lookup " data" inst.data x
85
+ let elem (inst : module_inst ) x = lookup " element segment " inst.elems x
86
+ let data (inst : module_inst ) x = lookup " data segment " inst.datas x
87
87
let local (frame : frame ) x = lookup " local" frame.locals x
88
88
89
- let elem inst x i at =
89
+ let any_elem inst x i at =
90
90
match Table. load (table inst x) i with
91
91
| Table. Uninitialized ->
92
92
Trap. error at (" uninitialized element " ^ Int32. to_string i)
@@ -95,7 +95,7 @@ let elem inst x i at =
95
95
Trap. error at (" undefined element " ^ Int32. to_string i)
96
96
97
97
let func_elem inst x i at =
98
- match elem inst x i at with
98
+ match any_elem inst x i at with
99
99
| FuncElem f -> f
100
100
| _ -> Crash. error at (" type mismatch for element " ^ Int32. to_string i)
101
101
@@ -263,13 +263,8 @@ let rec step (c : config) : config =
263
263
let src = I64_convert. extend_i32_u s in
264
264
(try Memory. init mem bs dst src n; vs', []
265
265
with exn -> vs', [Trapping (memory_error e.at exn ) @@ e.at])
266
- | None -> vs', [Trapping " data segment dropped" @@ e.at])
267
-
268
- | DataDrop x , vs ->
269
- let seg = data frame.inst x in
270
- (match ! seg with
271
- | Some _ -> seg := None ; vs, []
272
- | None -> vs, [Trapping " data segment dropped" @@ e.at])
266
+ | None -> vs', [Trapping " data segment dropped" @@ e.at]
267
+ )
273
268
274
269
| MemoryCopy , I32 n :: I32 s :: I32 d :: vs' ->
275
270
let mem = memory frame.inst (0l @@ e.at) in
@@ -286,23 +281,32 @@ let rec step (c : config) : config =
286
281
287
282
| TableInit x , I32 n :: I32 s :: I32 d :: vs' ->
288
283
let tab = table frame.inst (0l @@ e.at) in
289
- (match ! (elems frame.inst x) with
284
+ (match ! (elem frame.inst x) with
290
285
| Some es ->
291
286
(try Table. init tab es d s n; vs', []
292
287
with exn -> vs', [Trapping (table_error e.at exn ) @@ e.at])
293
- | None -> vs', [Trapping " elements segment dropped" @@ e.at])
294
-
295
- | ElemDrop x , vs ->
296
- let seg = elems frame.inst x in
297
- (match ! seg with
298
- | Some _ -> seg := None ; vs, []
299
- | None -> vs, [Trapping " elements segment dropped" @@ e.at])
288
+ | None -> vs', [Trapping " element segment dropped" @@ e.at]
289
+ )
300
290
301
291
| TableCopy , I32 n :: I32 s :: I32 d :: vs' ->
302
292
let tab = table frame.inst (0l @@ e.at) in
303
293
(try Table. copy tab d s n; vs', []
304
294
with exn -> vs', [Trapping (table_error e.at exn ) @@ e.at])
305
295
296
+ | DataDrop x , vs ->
297
+ let seg = data frame.inst x in
298
+ (match ! seg with
299
+ | Some _ -> seg := None ; vs, []
300
+ | None -> vs, [Trapping " data segment dropped" @@ e.at]
301
+ )
302
+
303
+ | ElemDrop x , vs ->
304
+ let seg = elem frame.inst x in
305
+ (match ! seg with
306
+ | Some _ -> seg := None ; vs, []
307
+ | None -> vs, [Trapping " element segment dropped" @@ e.at]
308
+ )
309
+
306
310
| _ ->
307
311
let s1 = string_of_values (List. rev vs) in
308
312
let s2 = string_of_value_types (List. map type_of (List. rev vs)) in
@@ -435,22 +439,22 @@ let create_export (inst : module_inst) (ex : export) : export_inst =
435
439
| GlobalExport x -> ExternGlobal (global inst x)
436
440
in name, ext
437
441
438
- let elems_list inst init =
442
+ let elem_list inst init =
439
443
let to_elem el =
440
444
match el.it with
441
445
| Null -> Table. Uninitialized
442
446
| Func x -> FuncElem (func inst x)
443
447
in List. map to_elem init
444
448
445
- let create_elems (inst : module_inst ) (seg : table_segment ) : elems_inst =
449
+ let create_elem (inst : module_inst ) (seg : table_segment ) : elem_inst =
446
450
match seg.it with
447
451
| Active _ -> ref None
448
- | Passive ( _ , init ) -> ref (Some (elems_list inst init ))
452
+ | Passive {data; _} -> ref (Some (elem_list inst data ))
449
453
450
454
let create_data (inst : module_inst ) (seg : memory_segment ) : data_inst =
451
455
match seg.it with
452
456
| Active _ -> ref None
453
- | Passive init -> ref (Some init )
457
+ | Passive {data; _} -> ref (Some data )
454
458
455
459
456
460
let init_func (inst : module_inst ) (func : func_inst ) =
@@ -460,14 +464,14 @@ let init_func (inst : module_inst) (func : func_inst) =
460
464
461
465
let init_table (inst : module_inst ) (seg : table_segment ) =
462
466
match seg.it with
463
- | Active {index; offset = const ; init = ( _ , init ) } ->
467
+ | Active {index; offset = const ; init} ->
464
468
let tab = table inst index in
465
469
let offset = i32 (eval_const inst const) const.at in
466
- let elems = elems_list inst init in
470
+ let elems = elem_list inst init in
467
471
let len = Int32. of_int (List. length elems) in
468
472
(try Table. init tab elems offset 0l len
469
473
with Table. Bounds -> Link. error seg.at " elements segment does not fit table" )
470
- | Passive init -> ()
474
+ | Passive _ -> ()
471
475
472
476
let init_memory (inst : module_inst ) (seg : memory_segment ) =
473
477
match seg.it with
@@ -478,7 +482,7 @@ let init_memory (inst : module_inst) (seg : memory_segment) =
478
482
let len = Int32. of_int (String. length init) in
479
483
(try Memory. init mem init offset 0L len
480
484
with Memory. Bounds -> Link. error seg.at " data segment does not fit memory" )
481
- | Passive init -> ()
485
+ | Passive _ -> ()
482
486
483
487
484
488
let add_import (m : module_ ) (ext : extern ) (im : import ) (inst : module_inst )
@@ -494,7 +498,7 @@ let add_import (m : module_) (ext : extern) (im : import) (inst : module_inst)
494
498
let init (m : module_ ) (exts : extern list ) : module_inst =
495
499
let
496
500
{ imports; tables; memories; globals; funcs; types;
497
- exports; elems; data ; start
501
+ exports; elems; datas ; start
498
502
} = m.it
499
503
in
500
504
if List. length exts <> List. length imports then
@@ -509,18 +513,18 @@ let init (m : module_) (exts : extern list) : module_inst =
509
513
funcs = inst0.funcs @ fs;
510
514
tables = inst0.tables @ List. map (create_table inst0) tables;
511
515
memories = inst0.memories @ List. map (create_memory inst0) memories;
512
- globals = inst0.globals @ List. map (create_global inst0) globals
516
+ globals = inst0.globals @ List. map (create_global inst0) globals;
513
517
}
514
518
in
515
519
let inst =
516
520
{ inst1 with
517
521
exports = List. map (create_export inst1) exports;
518
- elems = List. map (create_elems inst1) elems;
519
- data = List. map (create_data inst1) data
522
+ elems = List. map (create_elem inst1) elems;
523
+ datas = List. map (create_data inst1) datas;
520
524
}
521
525
in
522
526
List. iter (init_func inst) fs;
523
527
List. iter (init_table inst) elems;
524
- List. iter (init_memory inst) data ;
528
+ List. iter (init_memory inst) datas ;
525
529
Lib.Option. app (fun x -> ignore (invoke (func inst x) [] )) start;
526
530
inst
0 commit comments