From 2cbb817cece6b5abe76aca078e9b276066f747cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Vouillon?= Date: Tue, 20 Aug 2024 23:17:13 +0200 Subject: [PATCH] Emit try_table instruction --- compiler/lib-wasm/wasm_output.ml | 11 ++++++----- compiler/lib-wasm/wat_output.ml | 16 ++++++---------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/compiler/lib-wasm/wasm_output.ml b/compiler/lib-wasm/wasm_output.ml index febd2c650e..2c85e5b6aa 100644 --- a/compiler/lib-wasm/wasm_output.ml +++ b/compiler/lib-wasm/wasm_output.ml @@ -648,15 +648,16 @@ end = struct output_byte ch 0x0B | Try (typ, l, catches) -> Feature.require exception_handling; - output_byte ch 0x06; + output_byte ch 0x1f; output_blocktype st.type_names ch typ; - List.iter ~f:(fun i' -> output_instruction st ch i') l; + output_uint ch (List.length catches); List.iter - ~f:(fun (tag, l, ty) -> - output_byte ch 0x07; + ~f:(fun (tag, l, _) -> + output_byte ch 0x00; output_uint ch (Hashtbl.find st.tag_names tag); - output_instruction st ch (Br (l + 1, Some (Pop ty)))) + output_uint ch l) catches; + List.iter ~f:(fun i' -> output_instruction st ch i') l; output_byte ch 0X0B and output_instruction st ch i = diff --git a/compiler/lib-wasm/wat_output.ml b/compiler/lib-wasm/wat_output.ml index 27c2307801..a3b02f11ae 100644 --- a/compiler/lib-wasm/wat_output.ml +++ b/compiler/lib-wasm/wat_output.ml @@ -445,17 +445,13 @@ let expression_or_instructions ctx st in_function = ] | Try (ty, body, catches) -> [ List - (Atom "try" + (Atom "try_table" :: (block_type st ty - @ List (Atom "do" :: instructions body) - :: List.map - ~f:(fun (tag, i, ty) -> - List - (Atom "catch" - :: index st.tag_names tag - :: (instruction (Wasm_ast.Event Code_generation.hidden_location) - @ instruction (Wasm_ast.Br (i + 1, Some (Pop ty)))))) - catches)) + @ List.map + ~f:(fun (tag, i, _ty) -> + List [ Atom "catch"; index st.tag_names tag; Atom (string_of_int i) ]) + catches + @ instructions body)) ] and instruction i = match i with