@@ -1210,21 +1210,29 @@ BinaryenExpressionRef BinaryenRefEq(BinaryenModuleRef module,
1210
1210
}
1211
1211
1212
1212
BinaryenExpressionRef BinaryenTry (BinaryenModuleRef module,
1213
+ const char * name,
1213
1214
BinaryenExpressionRef body,
1214
- const char ** catchEvents_ ,
1215
+ const char ** catchEvents ,
1215
1216
BinaryenIndex numCatchEvents,
1216
- BinaryenExpressionRef* catchBodies_,
1217
- BinaryenIndex numCatchBodies) {
1218
- std::vector<Name> catchEvents;
1219
- std::vector<Expression*> catchBodies;
1217
+ BinaryenExpressionRef* catchBodies,
1218
+ BinaryenIndex numCatchBodies,
1219
+ const char * delegateTarget) {
1220
+ auto * ret = ((Module*)module)->allocator .alloc <Try>();
1221
+ if (name) {
1222
+ ret->name = name;
1223
+ }
1224
+ ret->body = (Expression*)body;
1220
1225
for (BinaryenIndex i = 0 ; i < numCatchEvents; i++) {
1221
- catchEvents.push_back (catchEvents_ [i]);
1226
+ ret-> catchEvents .push_back (catchEvents [i]);
1222
1227
}
1223
1228
for (BinaryenIndex i = 0 ; i < numCatchBodies; i++) {
1224
- catchBodies.push_back ((Expression*)catchBodies_ [i]);
1229
+ ret-> catchBodies .push_back ((Expression*)catchBodies [i]);
1225
1230
}
1226
- return static_cast <Expression*>(
1227
- Builder (*(Module*)module).makeTry (body, catchEvents, catchBodies));
1231
+ if (delegateTarget) {
1232
+ ret->delegateTarget = delegateTarget;
1233
+ }
1234
+ ret->finalize ();
1235
+ return static_cast <Expression*>(ret);
1228
1236
}
1229
1237
1230
1238
BinaryenExpressionRef BinaryenThrow (BinaryenModuleRef module,
@@ -2765,6 +2773,16 @@ void BinaryenRefEqSetRight(BinaryenExpressionRef expr,
2765
2773
static_cast <RefEq*>(expression)->right = (Expression*)right;
2766
2774
}
2767
2775
// Try
2776
+ const char * BinaryenTryGetName (BinaryenExpressionRef expr) {
2777
+ auto * expression = (Expression*)expr;
2778
+ assert (expression->is <Try>());
2779
+ return static_cast <Try*>(expression)->name .c_str ();
2780
+ }
2781
+ void BinaryenTrySetName (BinaryenExpressionRef expr, const char * name) {
2782
+ auto * expression = (Expression*)expr;
2783
+ assert (expression->is <Try>());
2784
+ static_cast <Try*>(expression)->name = name;
2785
+ }
2768
2786
BinaryenExpressionRef BinaryenTryGetBody (BinaryenExpressionRef expr) {
2769
2787
auto * expression = (Expression*)expr;
2770
2788
assert (expression->is <Try>());
@@ -2873,6 +2891,22 @@ int BinaryenTryHasCatchAll(BinaryenExpressionRef expr) {
2873
2891
assert (expression->is <Try>());
2874
2892
return static_cast <Try*>(expression)->hasCatchAll ();
2875
2893
}
2894
+ const char * BinaryenTryGetDelegateTarget (BinaryenExpressionRef expr) {
2895
+ auto * expression = (Expression*)expr;
2896
+ assert (expression->is <Try>());
2897
+ return static_cast <Try*>(expression)->delegateTarget .c_str ();
2898
+ }
2899
+ void BinaryenTrySetDelegateTarget (BinaryenExpressionRef expr,
2900
+ const char * delegateTarget) {
2901
+ auto * expression = (Expression*)expr;
2902
+ assert (expression->is <Try>());
2903
+ static_cast <Try*>(expression)->delegateTarget = delegateTarget;
2904
+ }
2905
+ int BinaryenTryIsDelegate (BinaryenExpressionRef expr) {
2906
+ auto * expression = (Expression*)expr;
2907
+ assert (expression->is <Try>());
2908
+ return static_cast <Try*>(expression)->isDelegate ();
2909
+ }
2876
2910
// Throw
2877
2911
const char * BinaryenThrowGetEvent (BinaryenExpressionRef expr) {
2878
2912
auto * expression = (Expression*)expr;
0 commit comments