@@ -37,7 +37,7 @@ let make_switch n selector caselist =
37
37
let index = Array. make n 0 in
38
38
let casev = Array. of_list caselist in
39
39
let dbg = Debuginfo. none in
40
- let actv = Array. make (Array. length casev) (Cexit (0 ,[] ), dbg) in
40
+ let actv = Array. make (Array. length casev) (Cexit (Cmm. Lbl 0 , [] ,[] ), dbg) in
41
41
for i = 0 to Array. length casev - 1 do
42
42
let (posl, e) = casev.(i) in
43
43
List. iter (fun pos -> index.(pos) < - i) posl;
@@ -206,6 +206,9 @@ componentlist:
206
206
component { [$ 1 ] }
207
207
| componentlist STAR component { $ 3 :: $ 1 }
208
208
;
209
+ traps:
210
+ LPAREN INTCONST RPAREN { List. init $ 2 (fun _ -> Pop ) }
211
+ | /**/ { [] }
209
212
expr:
210
213
INTCONST { Cconst_int ($ 1 , debuginfo () ) }
211
214
| FLOATCONST { Cconst_float (float_of_string $ 1 , debuginfo () ) }
@@ -241,22 +244,22 @@ expr:
241
244
match $ 3 with
242
245
Cconst_int (x, _) when x <> 0 -> $ 4
243
246
| _ -> Cifthenelse ($ 3 , debuginfo () , $ 4 , debuginfo () ,
244
- (Cexit (lbl0,[] )),
247
+ (Cexit (Cmm. Lbl lbl0, [] ,[] )),
245
248
debuginfo () ) in
246
249
Ccatch (Nonrecursive , [lbl0, [], Ctuple [], debuginfo () ],
247
250
Ccatch (Recursive ,
248
- [lbl1, [], Csequence (body, Cexit (lbl1, [] )), debuginfo () ],
249
- Cexit (lbl1, [] ))) }
250
- | LPAREN EXIT IDENT exprlist RPAREN
251
- { Cexit (find_label $ 3 , List. rev $ 4 ) }
251
+ [lbl1, [], Csequence (body, Cexit (Cmm. Lbl lbl1, [] , [] )), debuginfo () ],
252
+ Cexit (Cmm. Lbl lbl1, [] , [] ))) }
253
+ | LPAREN EXIT traps IDENT exprlist RPAREN
254
+ { Cexit (Cmm. Lbl ( find_label $ 4 ) , List. rev $ 5 , $ 3 ) }
252
255
| LPAREN CATCH sequence WITH catch_handlers RPAREN
253
256
{ let handlers = $ 5 in
254
257
List. iter (fun (_ , l , _ , _ ) ->
255
258
List. iter (fun (x , _ ) -> unbind_ident x) l) handlers;
256
259
Ccatch (Recursive , handlers, $ 3 ) }
257
- | EXIT { Cexit (0 ,[] ) }
260
+ | EXIT { Cexit (Cmm. Lbl 0 , [] ,[] ) }
258
261
| LPAREN TRY sequence WITH bind_ident sequence RPAREN
259
- { unbind_ident $ 5 ; Ctrywith ($ 3 , $ 5 , $ 6 , debuginfo () ) }
262
+ { unbind_ident $ 5 ; Ctrywith ($ 3 , Regular , $ 5 , $ 6 , debuginfo () ) }
260
263
| LPAREN VAL expr expr RPAREN
261
264
{ let open Asttypes in
262
265
Cop (Cload (Word_val , Mutable ), [access_array $ 3 $ 4 Arch. size_addr],
0 commit comments