summaryrefslogtreecommitdiff
path: root/src/binaryen-c.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/binaryen-c.cpp')
-rw-r--r--src/binaryen-c.cpp52
1 files changed, 43 insertions, 9 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index 1015e41c0..f4d93afa1 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -1210,21 +1210,29 @@ BinaryenExpressionRef BinaryenRefEq(BinaryenModuleRef module,
}
BinaryenExpressionRef BinaryenTry(BinaryenModuleRef module,
+ const char* name,
BinaryenExpressionRef body,
- const char** catchEvents_,
+ const char** catchEvents,
BinaryenIndex numCatchEvents,
- BinaryenExpressionRef* catchBodies_,
- BinaryenIndex numCatchBodies) {
- std::vector<Name> catchEvents;
- std::vector<Expression*> catchBodies;
+ BinaryenExpressionRef* catchBodies,
+ BinaryenIndex numCatchBodies,
+ const char* delegateTarget) {
+ auto* ret = ((Module*)module)->allocator.alloc<Try>();
+ if (name) {
+ ret->name = name;
+ }
+ ret->body = (Expression*)body;
for (BinaryenIndex i = 0; i < numCatchEvents; i++) {
- catchEvents.push_back(catchEvents_[i]);
+ ret->catchEvents.push_back(catchEvents[i]);
}
for (BinaryenIndex i = 0; i < numCatchBodies; i++) {
- catchBodies.push_back((Expression*)catchBodies_[i]);
+ ret->catchBodies.push_back((Expression*)catchBodies[i]);
}
- return static_cast<Expression*>(
- Builder(*(Module*)module).makeTry(body, catchEvents, catchBodies));
+ if (delegateTarget) {
+ ret->delegateTarget = delegateTarget;
+ }
+ ret->finalize();
+ return static_cast<Expression*>(ret);
}
BinaryenExpressionRef BinaryenThrow(BinaryenModuleRef module,
@@ -2765,6 +2773,16 @@ void BinaryenRefEqSetRight(BinaryenExpressionRef expr,
static_cast<RefEq*>(expression)->right = (Expression*)right;
}
// Try
+const char* BinaryenTryGetName(BinaryenExpressionRef expr) {
+ auto* expression = (Expression*)expr;
+ assert(expression->is<Try>());
+ return static_cast<Try*>(expression)->name.c_str();
+}
+void BinaryenTrySetName(BinaryenExpressionRef expr, const char* name) {
+ auto* expression = (Expression*)expr;
+ assert(expression->is<Try>());
+ static_cast<Try*>(expression)->name = name;
+}
BinaryenExpressionRef BinaryenTryGetBody(BinaryenExpressionRef expr) {
auto* expression = (Expression*)expr;
assert(expression->is<Try>());
@@ -2873,6 +2891,22 @@ int BinaryenTryHasCatchAll(BinaryenExpressionRef expr) {
assert(expression->is<Try>());
return static_cast<Try*>(expression)->hasCatchAll();
}
+const char* BinaryenTryGetDelegateTarget(BinaryenExpressionRef expr) {
+ auto* expression = (Expression*)expr;
+ assert(expression->is<Try>());
+ return static_cast<Try*>(expression)->delegateTarget.c_str();
+}
+void BinaryenTrySetDelegateTarget(BinaryenExpressionRef expr,
+ const char* delegateTarget) {
+ auto* expression = (Expression*)expr;
+ assert(expression->is<Try>());
+ static_cast<Try*>(expression)->delegateTarget = delegateTarget;
+}
+int BinaryenTryIsDelegate(BinaryenExpressionRef expr) {
+ auto* expression = (Expression*)expr;
+ assert(expression->is<Try>());
+ return static_cast<Try*>(expression)->isDelegate();
+}
// Throw
const char* BinaryenThrowGetEvent(BinaryenExpressionRef expr) {
auto* expression = (Expression*)expr;