summaryrefslogtreecommitdiff
path: root/src/js/binaryen.js-post.js
diff options
context:
space:
mode:
authorHeejin Ahn <aheejin@gmail.com>2021-02-13 21:23:47 +0900
committerGitHub <noreply@github.com>2021-02-13 21:23:47 +0900
commitc12cc3f50c0ef798b218739fc3de06237ea2c5d5 (patch)
tree512a69360c953ac88f257fb7340a35bf895c4b6d /src/js/binaryen.js-post.js
parentac3188facecb78ebaea1eec6cd6e4723a1a161fe (diff)
downloadbinaryen-c12cc3f50c0ef798b218739fc3de06237ea2c5d5.tar.gz
binaryen-c12cc3f50c0ef798b218739fc3de06237ea2c5d5.tar.bz2
binaryen-c12cc3f50c0ef798b218739fc3de06237ea2c5d5.zip
[EH] Update C and binaryen.js API for delegate (#3565)
This updates C and binaryen.js API to match the new `Try` structure to support `delegate`, added in #3561. Now `try` can take a name (which can be null) like a block, and also has an additional `delegateTarget` field argument which should only be used for try-delegate and otherwise null. This also adds several more variant of `makeTry` methods in wasm-builder. Some are for making try-delegate and some are for try-catch(_all).
Diffstat (limited to 'src/js/binaryen.js-post.js')
-rw-r--r--src/js/binaryen.js-post.js26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 2ac2605fa..63be4d446 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -2147,9 +2147,9 @@ function wrapModule(module, self = {}) {
}
};
- self['try'] = function(body, catchEvents, catchBodies) {
+ self['try'] = function(name, body, catchEvents, catchBodies, delegateTarget) {
return preserveStack(() =>
- Module['_BinaryenTry'](module, body, i32sToStack(catchEvents.map(strToStack)), catchEvents.length, i32sToStack(catchBodies), catchBodies.length));
+ Module['_BinaryenTry'](module, name ? strToStack(name) : 0, body, i32sToStack(catchEvents.map(strToStack)), catchEvents.length, i32sToStack(catchBodies), catchBodies.length, delegateTarget ? strToStack(delegateTarget) : 0));
};
self['throw'] = function(event_, operands) {
return preserveStack(() => Module['_BinaryenThrow'](module, strToStack(event_), i32sToStack(operands), operands.length));
@@ -2897,10 +2897,13 @@ Module['getExpressionInfo'] = function(expr) {
return {
'id': id,
'type': type,
+ 'name': UTF8ToString(Module['_BinaryenTryGetName'](expr)),
'body': Module['_BinaryenTryGetBody'](expr),
'catchEvents': getAllNested(expr, Module['_BinaryenTryGetNumCatchEvents'], Module['_BinaryenTryGetCatchEventAt']),
'catchBodies': getAllNested(expr, Module['_BinaryenTryGetNumCatchBodies'], Module['_BinaryenTryGetCatchBodyAt']),
- 'hasCatchAll': Module['_BinaryenTryHasCatchAll'](expr)
+ 'hasCatchAll': Module['_BinaryenTryHasCatchAll'](expr),
+ 'delegateTarget': UTF8ToString(Module['_BinaryenTryGetDelegateTarget'](expr)),
+ 'isDelegate': Module['_BinaryenTryIsDelegate'](expr)
};
case Module['ThrowId']:
return {
@@ -4172,6 +4175,13 @@ Module['RefEq'] = makeExpressionWrapper({
});
Module['Try'] = makeExpressionWrapper({
+ 'getName'(expr) {
+ const name = Module['_BinaryenTryGetName'](expr);
+ return name ? UTF8ToString(name) : null;
+ },
+ 'setName'(expr, name) {
+ preserveStack(() => { Module['_BinaryenTrySetName'](expr, strToStack(name)) });
+ },
'getBody'(expr) {
return Module['_BinaryenTryGetBody'](expr);
},
@@ -4231,6 +4241,16 @@ Module['Try'] = makeExpressionWrapper({
'hasCatchAll'(expr) {
return Boolean(Module['_BinaryenTryHasCatchAll'](expr));
},
+ 'getDelegateTarget'(expr) {
+ const name = Module['_BinaryenTryGetDelegateTarget'](expr);
+ return name ? UTF8ToString(name) : null;
+ },
+ 'setDelegateTarget'(expr, name) {
+ preserveStack(() => { Module['_BinaryenTrySetDelegateTarget'](expr, strToStack(name)) });
+ },
+ 'isDelegate'(expr) {
+ return Boolean(Module['_BinaryenTryIsDelegate'](expr));
+ }
});
Module['Throw'] = makeExpressionWrapper({