From 67abc2a1b9adcdf080387a29e0c92b6f5a31057a Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Mon, 9 Jan 2023 16:23:57 -0600 Subject: Replace `RefIs` with `RefIsNull` (#5401) * Replace `RefIs` with `RefIsNull` The other `ref.is*` instructions are deprecated and expressible in terms of `ref.test`. Update binary and text parsing to parse those instructions as `RefTest` expressions. Also update the printing and emitting of `RefTest` expressions to emit the legacy instructions for now to minimize test changes and make this a mostly non-functional change. Since `ref.is_null` is the only `RefIs` instruction left, remove the `RefIsOp` field and rename the expression class to `RefIsNull`. The few test changes are due to the fact that `ref.is*` instructions are now subject to `ref.test` validation, and in particular it is no longer valid to perform a `ref.is_func` on a value outside of the `func` type hierarchy. --- test/binaryen.js/expressions.js | 53 +++++++++++++---------------------------- 1 file changed, 16 insertions(+), 37 deletions(-) (limited to 'test/binaryen.js/expressions.js') diff --git a/test/binaryen.js/expressions.js b/test/binaryen.js/expressions.js index c0bc402a0..ee55ee90b 100644 --- a/test/binaryen.js/expressions.js +++ b/test/binaryen.js/expressions.js @@ -1417,51 +1417,30 @@ console.log("# MemoryFill"); module.dispose(); })(); -console.log("# RefIs"); -(function testRefIs() { +console.log("# RefIsNull"); +(function testRefIsNull() { const module = new binaryen.Module(); - var op = binaryen.Operations.RefIsNull; var value = module.local.get(1, binaryen.externref); - const theRefIs = binaryen.RefIs(module.ref.is_null(value)); - assert(theRefIs instanceof binaryen.RefIs); - assert(theRefIs instanceof binaryen.Expression); - assert(theRefIs.op === op); - assert(theRefIs.value === value); - assert(theRefIs.type === binaryen.i32); - - theRefIs.op = op = binaryen.Operations.RefIsFunc; - assert(theRefIs.op === op); - theRefIs.op = op = binaryen.Operations.RefIsNull; - theRefIs.value = value = module.local.get(2, binaryen.externref); - assert(theRefIs.value === value); - theRefIs.type = binaryen.f64; - theRefIs.finalize(); - assert(theRefIs.type === binaryen.i32); - - console.log(theRefIs.toText()); + const theRefIsNull = binaryen.RefIsNull(module.ref.is_null(value)); + assert(theRefIsNull instanceof binaryen.RefIsNull); + assert(theRefIsNull instanceof binaryen.Expression); + assert(theRefIsNull.value === value); + assert(theRefIsNull.type === binaryen.i32); + + theRefIsNull.value = value = module.local.get(2, binaryen.externref); + assert(theRefIsNull.value === value); + theRefIsNull.type = binaryen.f64; + theRefIsNull.finalize(); + assert(theRefIsNull.type === binaryen.i32); + + console.log(theRefIsNull.toText()); assert( - theRefIs.toText() + theRefIsNull.toText() == "(ref.is_null\n (local.get $2)\n)\n" ); - assert( - binaryen.RefIs(module.ref.is_func(value)).toText() - == - "(ref.is_func\n (local.get $2)\n)\n" - ); - assert( - binaryen.RefIs(module.ref.is_data(value)).toText() - == - "(ref.is_data\n (local.get $2)\n)\n" - ); - assert( - binaryen.RefIs(module.ref.is_i31(value)).toText() - == - "(ref.is_i31\n (local.get $2)\n)\n" - ); - module.dispose(); })(); -- cgit v1.2.3