Skip to content

Commit f7f9f51

Browse files
vouillonhhugo
authored andcommitted
Wasm AST: add any.convert_extern
1 parent 4da4dba commit f7f9f51

File tree

6 files changed

+17
-6
lines changed

6 files changed

+17
-6
lines changed

compiler/lib-wasm/code_generation.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,8 @@ let rec is_smi e =
476476
| Br_on_cast_fail _
477477
| Br_on_null _
478478
| Try _
479-
| ExternConvertAny _ -> false
479+
| ExternConvertAny _
480+
| AnyConvertExtern _ -> false
480481
| BinOp ((F32 _ | F64 _), _, _) | RefTest _ | RefEq _ -> true
481482
| IfExpr (_, _, ift, iff) -> is_smi ift && is_smi iff
482483

compiler/lib-wasm/gc_target.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,8 @@ module Value = struct
514514
| StructGet (_, _, _, e')
515515
| RefCast (_, e')
516516
| RefTest (_, e')
517-
| ExternConvertAny e' -> effect_free e'
517+
| ExternConvertAny e'
518+
| AnyConvertExtern e' -> effect_free e'
518519
| BinOp (_, e1, e2)
519520
| ArrayNew (_, e1, e2)
520521
| ArrayNewData (_, _, e1, e2)

compiler/lib-wasm/initialize_locals.ml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ let rec scan_expression ctx e =
4747
| RefTest (_, e')
4848
| Br_on_cast (_, _, _, e')
4949
| Br_on_cast_fail (_, _, _, e')
50-
| Br_on_null (_, e') -> scan_expression ctx e'
51-
| ExternConvertAny e' -> scan_expression ctx e'
50+
| Br_on_null (_, e')
51+
| ExternConvertAny e'
52+
| AnyConvertExtern e' -> scan_expression ctx e'
5253
| BinOp (_, e', e'')
5354
| ArrayNew (_, e', e'')
5455
| ArrayNewData (_, _, e', e'')

compiler/lib-wasm/wasm_ast.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ type expression =
171171
| IfExpr of value_type * expression * expression * expression
172172
| Try of func_type * instruction list * (var * int * value_type) list
173173
| ExternConvertAny of expression
174+
| AnyConvertExtern of expression
174175

175176
and instruction =
176177
| Drop of expression

compiler/lib-wasm/wasm_output.ml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,11 @@ end = struct
702702
output_expression st ch e';
703703
output_byte ch 0xFB;
704704
output_byte ch 0x1B
705+
| AnyConvertExtern e' ->
706+
Feature.require gc;
707+
output_expression st ch e';
708+
output_byte ch 0xFB;
709+
output_byte ch 0x1A
705710

706711
and output_instruction st ch i =
707712
match i with
@@ -918,8 +923,9 @@ end = struct
918923
| RefTest (_, e')
919924
| Br_on_cast (_, _, _, e')
920925
| Br_on_cast_fail (_, _, _, e')
921-
| Br_on_null (_, e') -> expr_function_references e' set
922-
| ExternConvertAny e' -> expr_function_references e' set
926+
| Br_on_null (_, e')
927+
| ExternConvertAny e'
928+
| AnyConvertExtern e' -> expr_function_references e' set
923929
| BinOp (_, e', e'')
924930
| ArrayNew (_, e', e'')
925931
| ArrayNewData (_, _, e', e'')

compiler/lib-wasm/wat_output.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ let expression_or_instructions ctx st in_function =
481481
catches))
482482
]
483483
| ExternConvertAny e' -> [ List (Atom "extern.convert_any" :: expression e') ]
484+
| AnyConvertExtern e' -> [ List (Atom "any.convert_extern" :: expression e') ]
484485
and instruction i =
485486
match i with
486487
| Drop e -> [ List (Atom "drop" :: expression e) ]

0 commit comments

Comments
 (0)