@@ -1200,10 +1200,20 @@ BinaryenExpressionRef BinaryenRefEq(BinaryenModuleRef module,
1200
1200
1201
1201
BinaryenExpressionRef BinaryenTry (BinaryenModuleRef module,
1202
1202
BinaryenExpressionRef body,
1203
- BinaryenExpressionRef catchBody) {
1203
+ const char ** catchEvents_,
1204
+ BinaryenIndex numCatchEvents,
1205
+ BinaryenExpressionRef* catchBodies_,
1206
+ BinaryenIndex numCatchBodies) {
1207
+ std::vector<Name> catchEvents;
1208
+ std::vector<Expression*> catchBodies;
1209
+ for (BinaryenIndex i = 0 ; i < numCatchEvents; i++) {
1210
+ catchEvents.push_back (catchEvents_[i]);
1211
+ }
1212
+ for (BinaryenIndex i = 0 ; i < numCatchBodies; i++) {
1213
+ catchBodies.push_back ((Expression*)catchBodies_[i]);
1214
+ }
1204
1215
return static_cast <Expression*>(
1205
- Builder (*(Module*)module)
1206
- .makeTry ((Expression*)body, (Expression*)catchBody));
1216
+ Builder (*(Module*)module).makeTry (body, catchEvents, catchBodies));
1207
1217
}
1208
1218
1209
1219
BinaryenExpressionRef BinaryenThrow (BinaryenModuleRef module,
@@ -1219,9 +1229,8 @@ BinaryenExpressionRef BinaryenThrow(BinaryenModuleRef module,
1219
1229
}
1220
1230
1221
1231
BinaryenExpressionRef BinaryenRethrow (BinaryenModuleRef module,
1222
- BinaryenExpressionRef exnref) {
1223
- return static_cast <Expression*>(
1224
- Builder (*(Module*)module).makeRethrow ((Expression*)exnref));
1232
+ BinaryenIndex depth) {
1233
+ return static_cast <Expression*>(Builder (*(Module*)module).makeRethrow (depth));
1225
1234
}
1226
1235
1227
1236
BinaryenExpressionRef BinaryenBrOnExn (BinaryenModuleRef module,
@@ -2755,17 +2764,101 @@ void BinaryenTrySetBody(BinaryenExpressionRef expr,
2755
2764
assert (bodyExpr);
2756
2765
static_cast <Try*>(expression)->body = (Expression*)bodyExpr;
2757
2766
}
2758
- BinaryenExpressionRef BinaryenTryGetCatchBody (BinaryenExpressionRef expr) {
2767
+ BinaryenIndex BinaryenTryGetNumCatchEvents (BinaryenExpressionRef expr) {
2768
+ auto * expression = (Expression*)expr;
2769
+ assert (expression->is <Try>());
2770
+ return static_cast <Try*>(expression)->catchEvents .size ();
2771
+ }
2772
+ BinaryenIndex BinaryenTryGetNumCatchBodies (BinaryenExpressionRef expr) {
2773
+ auto * expression = (Expression*)expr;
2774
+ assert (expression->is <Try>());
2775
+ return static_cast <Try*>(expression)->catchBodies .size ();
2776
+ }
2777
+ const char * BinaryenTryGetCatchEventAt (BinaryenExpressionRef expr,
2778
+ BinaryenIndex index) {
2779
+ auto * expression = (Expression*)expr;
2780
+ assert (expression->is <Try>());
2781
+ assert (index < static_cast <Try*>(expression)->catchEvents .size ());
2782
+ return static_cast <Try*>(expression)->catchEvents [index ].c_str ();
2783
+ }
2784
+ void BinaryenTrySetCatchEventAt (BinaryenExpressionRef expr,
2785
+ BinaryenIndex index,
2786
+ const char * catchEvent) {
2759
2787
auto * expression = (Expression*)expr;
2760
2788
assert (expression->is <Try>());
2761
- return static_cast <Try*>(expression)->catchBody ;
2789
+ assert (index < static_cast <Try*>(expression)->catchEvents .size ());
2790
+ assert (catchEvent);
2791
+ static_cast <Try*>(expression)->catchEvents [index ] = catchEvent;
2762
2792
}
2763
- void BinaryenTrySetCatchBody (BinaryenExpressionRef expr,
2764
- BinaryenExpressionRef catchBodyExpr ) {
2793
+ BinaryenIndex BinaryenTryAppendCatchEvent (BinaryenExpressionRef expr,
2794
+ const char * catchEvent ) {
2765
2795
auto * expression = (Expression*)expr;
2766
2796
assert (expression->is <Try>());
2767
- assert (catchBodyExpr);
2768
- static_cast <Try*>(expression)->catchBody = (Expression*)catchBodyExpr;
2797
+ assert (catchEvent);
2798
+ auto & list = static_cast <Try*>(expression)->catchEvents ;
2799
+ auto index = list.size ();
2800
+ list.push_back (catchEvent);
2801
+ return index ;
2802
+ }
2803
+ void BinaryenTryInsertCatchEventAt (BinaryenExpressionRef expr,
2804
+ BinaryenIndex index,
2805
+ const char * catchEvent) {
2806
+ auto * expression = (Expression*)expr;
2807
+ assert (expression->is <Try>());
2808
+ assert (catchEvent);
2809
+ static_cast <Try*>(expression)->catchEvents .insertAt (index , catchEvent);
2810
+ }
2811
+ const char * BinaryenTryRemoveCatchEventAt (BinaryenExpressionRef expr,
2812
+ BinaryenIndex index) {
2813
+ auto * expression = (Expression*)expr;
2814
+ assert (expression->is <Try>());
2815
+ return static_cast <Try*>(expression)->catchEvents .removeAt (index ).c_str ();
2816
+ }
2817
+ BinaryenExpressionRef BinaryenTryGetCatchBodyAt (BinaryenExpressionRef expr,
2818
+ BinaryenIndex index) {
2819
+ auto * expression = (Expression*)expr;
2820
+ assert (expression->is <Try>());
2821
+ assert (index < static_cast <Try*>(expression)->catchBodies .size ());
2822
+ return static_cast <Try*>(expression)->catchBodies [index ];
2823
+ }
2824
+ void BinaryenTrySetCatchBodyAt (BinaryenExpressionRef expr,
2825
+ BinaryenIndex index,
2826
+ BinaryenExpressionRef catchExpr) {
2827
+ auto * expression = (Expression*)expr;
2828
+ assert (expression->is <Try>());
2829
+ assert (index < static_cast <Try*>(expression)->catchBodies .size ());
2830
+ assert (catchExpr);
2831
+ static_cast <Try*>(expression)->catchBodies [index ] = (Expression*)catchExpr;
2832
+ }
2833
+ BinaryenIndex BinaryenTryAppendCatchBody (BinaryenExpressionRef expr,
2834
+ BinaryenExpressionRef catchExpr) {
2835
+ auto * expression = (Expression*)expr;
2836
+ assert (expression->is <Try>());
2837
+ assert (catchExpr);
2838
+ auto & list = static_cast <Try*>(expression)->catchBodies ;
2839
+ auto index = list.size ();
2840
+ list.push_back ((Expression*)catchExpr);
2841
+ return index ;
2842
+ }
2843
+ void BinaryenTryInsertCatchBodyAt (BinaryenExpressionRef expr,
2844
+ BinaryenIndex index,
2845
+ BinaryenExpressionRef catchExpr) {
2846
+ auto * expression = (Expression*)expr;
2847
+ assert (expression->is <Try>());
2848
+ assert (catchExpr);
2849
+ static_cast <Try*>(expression)
2850
+ ->catchBodies .insertAt (index , (Expression*)catchExpr);
2851
+ }
2852
+ BinaryenExpressionRef BinaryenTryRemoveCatchBodyAt (BinaryenExpressionRef expr,
2853
+ BinaryenIndex index) {
2854
+ auto * expression = (Expression*)expr;
2855
+ assert (expression->is <Try>());
2856
+ return static_cast <Try*>(expression)->catchBodies .removeAt (index );
2857
+ }
2858
+ int BinaryenTryHasCatchAll (BinaryenExpressionRef expr) {
2859
+ auto * expression = (Expression*)expr;
2860
+ assert (expression->is <Try>());
2861
+ return static_cast <Try*>(expression)->hasCatchAll ();
2769
2862
}
2770
2863
// Throw
2771
2864
const char * BinaryenThrowGetEvent (BinaryenExpressionRef expr) {
@@ -2825,17 +2918,15 @@ BinaryenExpressionRef BinaryenThrowRemoveOperandAt(BinaryenExpressionRef expr,
2825
2918
return static_cast <Throw*>(expression)->operands .removeAt (index );
2826
2919
}
2827
2920
// Rethrow
2828
- BinaryenExpressionRef BinaryenRethrowGetExnref (BinaryenExpressionRef expr) {
2921
+ BinaryenIndex BinaryenRethrowGetDepth (BinaryenExpressionRef expr) {
2829
2922
auto * expression = (Expression*)expr;
2830
2923
assert (expression->is <Rethrow>());
2831
- return static_cast <Rethrow*>(expression)->exnref ;
2924
+ return static_cast <Rethrow*>(expression)->depth ;
2832
2925
}
2833
- void BinaryenRethrowSetExnref (BinaryenExpressionRef expr,
2834
- BinaryenExpressionRef exnrefExpr) {
2926
+ void BinaryenRethrowSetDepth (BinaryenExpressionRef expr, BinaryenIndex depth) {
2835
2927
auto * expression = (Expression*)expr;
2836
2928
assert (expression->is <Rethrow>());
2837
- assert (exnrefExpr);
2838
- static_cast <Rethrow*>(expression)->exnref = (Expression*)exnrefExpr;
2929
+ static_cast <Rethrow*>(expression)->depth = depth;
2839
2930
}
2840
2931
// BrOnExn
2841
2932
const char * BinaryenBrOnExnGetEvent (BinaryenExpressionRef expr) {
0 commit comments