summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/binaryen-c.cpp10
-rw-r--r--src/binaryen-c.h10
-rw-r--r--src/js/binaryen.js-post.js6
-rw-r--r--test/binaryen.js/expressions.js5
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;