From 36e2abbcdd22b2b1707757b49fb4ac8844f28e5d Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Tue, 10 Jan 2023 13:53:12 -0600 Subject: Represent ref.as_{func,data,i31} with RefCast (#5413) These operations are deprecated and directly representable as casts, so remove their opcodes in the internal IR and parse them as casts instead. For now, add logic to the printing and binary writing of RefCast to continue emitting the legacy instructions to minimize test changes. The few test changes necessary are because it is no longer valid to perform a ref.as_func on values outside the func type hierarchy now that ref.as_func is subject to the ref.cast validation rules. RefAsExternInternalize, RefAsExternExternalize, and RefAsNonNull are left unmodified. A future PR may remove RefAsNonNull as well, since it is also expressible with casts. --- test/binaryen.js/expressions.js | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) (limited to 'test/binaryen.js/expressions.js') diff --git a/test/binaryen.js/expressions.js b/test/binaryen.js/expressions.js index ee55ee90b..c9111c9b4 100644 --- a/test/binaryen.js/expressions.js +++ b/test/binaryen.js/expressions.js @@ -1450,6 +1450,7 @@ console.log("# RefAs"); var op = binaryen.Operations.RefAsNonNull; var value = module.local.get(1, binaryen.anyref); + var externref = module.local.get(3, binaryen.externref); const theRefAs = binaryen.RefAs(module.ref.as_non_null(value)); assert(theRefAs instanceof binaryen.RefAs); assert(theRefAs instanceof binaryen.Expression); @@ -1457,9 +1458,9 @@ console.log("# RefAs"); assert(theRefAs.value === value); assert(theRefAs.type !== binaryen.i32); // TODO: === (ref any) - theRefAs.op = op = binaryen.Operations.RefAsFunc; + theRefAs.op = op = binaryen.Operations.RefAsExternExternalize; assert(theRefAs.op === op); - theRefAs.op = op = binaryen.Operations.RefAsNull; + theRefAs.op = op = binaryen.Operations.RefAsNonNull; theRefAs.value = value = module.local.get(2, binaryen.anyref); assert(theRefAs.value === value); theRefAs.type = binaryen.f64; @@ -1473,21 +1474,7 @@ console.log("# RefAs"); "(ref.as_non_null\n (local.get $2)\n)\n" ); - assert( - binaryen.RefAs(module.ref.as_func(value)).toText() - == - "(ref.as_func\n (local.get $2)\n)\n" - ); - assert( - binaryen.RefAs(module.ref.as_data(value)).toText() - == - "(ref.as_data\n (local.get $2)\n)\n" - ); - assert( - binaryen.RefAs(module.ref.as_i31(value)).toText() - == - "(ref.as_i31\n (local.get $2)\n)\n" - ); + // TODO: extern.externalize and extern.internalize module.dispose(); })(); -- cgit v1.2.3