diff options
author | Daniel Wirtz <dcode@dcode.io> | 2021-02-26 09:05:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-26 09:05:00 +0100 |
commit | 856c70b5985da942ffea82a613fc8357055020f2 (patch) | |
tree | 8780de464948eb4d4e0dc4f622289b4f950a77aa | |
parent | 3bc8c3b348699f45131f823b49024138f1992368 (diff) | |
download | binaryen-856c70b5985da942ffea82a613fc8357055020f2.tar.gz binaryen-856c70b5985da942ffea82a613fc8357055020f2.tar.bz2 binaryen-856c70b5985da942ffea82a613fc8357055020f2.zip |
Add RefIsGetOp/SetOp in C and JS API (#3605)
-rw-r--r-- | src/binaryen-c.cpp | 10 | ||||
-rw-r--r-- | src/binaryen-c.h | 10 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 6 | ||||
-rw-r--r-- | test/binaryen.js/expressions.js | 5 |
4 files changed, 28 insertions, 3 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 26a9c5801..0635046fe 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -2727,6 +2727,16 @@ void BinaryenMemoryFillSetSize(BinaryenExpressionRef expr, static_cast<MemoryFill*>(expression)->size = (Expression*)sizeExpr; } // RefIs +BinaryenOp BinaryenRefIsGetOp(BinaryenExpressionRef expr) { + auto* expression = (Expression*)expr; + assert(expression->is<RefIs>()); + return static_cast<RefIs*>(expression)->op; +} +void BinaryenRefIsSetOp(BinaryenExpressionRef expr, BinaryenOp op) { + auto* expression = (Expression*)expr; + assert(expression->is<RefIs>()); + static_cast<RefIs*>(expression)->op = RefIsOp(op); +} BinaryenExpressionRef BinaryenRefIsGetValue(BinaryenExpressionRef expr) { auto* expression = (Expression*)expr; assert(expression->is<RefIs>()); diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 44895f970..e70e9830e 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -1688,12 +1688,16 @@ BinaryenMemoryFillGetSize(BinaryenExpressionRef expr); BINARYEN_API void BinaryenMemoryFillSetSize(BinaryenExpressionRef expr, BinaryenExpressionRef sizeExpr); -// RefIsNull +// RefIs -// Gets the value expression tested to be null of a `ref.is_null` expression. +// Gets the operation performed by a `ref.is_*` expression. +BINARYEN_API BinaryenOp BinaryenRefIsGetOp(BinaryenExpressionRef expr); +// Sets the operation performed by a `ref.is_*` expression. +BINARYEN_API void BinaryenRefIsSetOp(BinaryenExpressionRef expr, BinaryenOp op); +// Gets the value expression tested by a `ref.is_*` expression. BINARYEN_API BinaryenExpressionRef BinaryenRefIsGetValue(BinaryenExpressionRef expr); -// Sets the value expression tested to be null of a `ref.is_null` expression. +// Sets the value expression tested by a `ref.is_*` expression. BINARYEN_API void BinaryenRefIsSetValue(BinaryenExpressionRef expr, BinaryenExpressionRef valueExpr); diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 7c53298ad..4f4af2b63 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -4142,6 +4142,12 @@ Module['MemoryFill'] = makeExpressionWrapper({ }); Module['RefIs'] = makeExpressionWrapper({ + 'getOp'(expr) { + return Module['_BinaryenRefIsGetOp'](expr); + }, + 'setOp'(expr, op) { + Module['_BinaryenRefIsSetOp'](expr, op); + }, 'getValue'(expr) { return Module['_BinaryenRefIsGetValue'](expr); }, diff --git a/test/binaryen.js/expressions.js b/test/binaryen.js/expressions.js index 1ffd45362..69081f0e6 100644 --- a/test/binaryen.js/expressions.js +++ b/test/binaryen.js/expressions.js @@ -1359,13 +1359,18 @@ console.log("# RefIs"); (function testRefIs() { 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; |