summaryrefslogtreecommitdiff
path: root/test/binaryen.js/push-pop.js
diff options
context:
space:
mode:
authorHeejin Ahn <aheejin@gmail.com>2019-07-24 23:57:04 -0700
committerGitHub <noreply@github.com>2019-07-24 23:57:04 -0700
commit443c0069df34bac9640ed75e396c8b76d3870ae0 (patch)
tree95869cd8599bf83689b7329a5ecc180622091a17 /test/binaryen.js/push-pop.js
parent7bf827d38eb710069662b99eed6ba9ece20775c1 (diff)
downloadbinaryen-443c0069df34bac9640ed75e396c8b76d3870ae0.tar.gz
binaryen-443c0069df34bac9640ed75e396c8b76d3870ae0.tar.bz2
binaryen-443c0069df34bac9640ed75e396c8b76d3870ae0.zip
More push/pop support (#2260)
This adds - `push`/`pop` support for other types: v128 and exnref - `push`/`pop` support for binaryen.js Because binaryen.js follows Binaryen's AST structure, without `pop` in binaryen.js, EH instructions cannot be represented in binaryen.js.
Diffstat (limited to 'test/binaryen.js/push-pop.js')
-rw-r--r--test/binaryen.js/push-pop.js40
1 files changed, 40 insertions, 0 deletions
diff --git a/test/binaryen.js/push-pop.js b/test/binaryen.js/push-pop.js
new file mode 100644
index 000000000..5064ed864
--- /dev/null
+++ b/test/binaryen.js/push-pop.js
@@ -0,0 +1,40 @@
+function cleanInfo(info) {
+ var ret = {};
+ for (var x in info) {
+ if (x !== 'value') {
+ ret[x] = info[x];
+ }
+ }
+ return ret;
+}
+
+function stringify(expr) {
+ return JSON.stringify(cleanInfo(Binaryen.getExpressionInfo(expr)));
+}
+
+var module = new Binaryen.Module();
+
+var v = module.addFunctionType("v", Binaryen.none, []);
+
+var func = module.addFunction("func", v, [],
+ module.block(null, [
+ module.push(module.i32.pop()),
+ module.push(module.i64.pop()),
+ module.push(module.f32.pop()),
+ module.push(module.f64.pop()),
+ module.push(module.v128.pop()),
+ module.push(module.exnref.pop())
+ ]
+ )
+)
+
+module.validate();
+console.log(module.emitText());
+
+console.log("getExpressionInfo(i32.pop) = " + stringify(module.i32.pop()));
+console.log("getExpressionInfo(i64.pop) = " + stringify(module.i64.pop()));
+console.log("getExpressionInfo(f32.pop) = " + stringify(module.f32.pop()));
+console.log("getExpressionInfo(f64.pop) = " + stringify(module.f64.pop()));
+console.log("getExpressionInfo(v128.pop) = " + stringify(module.v128.pop()));
+console.log("getExpressionInfo(exnref.pop) = " + stringify(module.exnref.pop()));
+console.log("getExpressionInfo(push) = " + stringify(module.push(module.i32.const(0))));