diff options
author | Heejin Ahn <aheejin@gmail.com> | 2021-02-13 21:23:47 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-13 21:23:47 +0900 |
commit | c12cc3f50c0ef798b218739fc3de06237ea2c5d5 (patch) | |
tree | 512a69360c953ac88f257fb7340a35bf895c4b6d /src/js/binaryen.js-post.js | |
parent | ac3188facecb78ebaea1eec6cd6e4723a1a161fe (diff) | |
download | binaryen-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.js | 26 |
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({ |