Skip to content

Commit d45a6eb

Browse files
committed
CN: Support else-if syntax (fix rems-project#811)
1 parent 2d84326 commit d45a6eb

File tree

2 files changed

+200
-186
lines changed

2 files changed

+200
-186
lines changed

parsers/c/c_parser.mly

+10-4
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ type asm_qualifier =
327327
%type<(Symbol.identifier, Cabs.type_name) Cn.cn_function> cn_function
328328
%type<(Symbol.identifier, Cabs.type_name) Cn.cn_predicate> cn_predicate
329329
%type<(Symbol.identifier) Cn.cn_datatype> cn_datatype
330-
%type<(Symbol.identifier, Cabs.type_name) Cn.cn_clauses> clauses
330+
%type<(Symbol.identifier, Cabs.type_name) Cn.cn_clauses> clauses if_clauses
331331
%type<(Symbol.identifier, Cabs.type_name) Cn.cn_clause> clause
332332
%type<(Symbol.identifier, Cabs.type_name) Cn.cn_resource> resource
333333
%type<(Symbol.identifier, Cabs.type_name) Cn.cn_pred> pred
@@ -2318,12 +2318,18 @@ cons_args:
23182318
{ xs }
23192319

23202320

2321+
if_clauses:
2322+
| LBRACE cs= clauses RBRACE
2323+
{ cs }
2324+
| IF LPAREN e= expr RPAREN LBRACE c= clause SEMICOLON RBRACE ELSE cs = if_clauses
2325+
{ Cerb_frontend.Cn.CN_if (region $loc noCursor, e, c, cs) }
2326+
;
2327+
23212328
clauses:
23222329
| c= clause SEMICOLON
23232330
{ Cerb_frontend.Cn.CN_clause (region $loc noCursor, c) }
2324-
| IF LPAREN e= expr RPAREN LBRACE c= clause SEMICOLON RBRACE ELSE LBRACE cs= clauses RBRACE
2325-
{ Cerb_frontend.Cn.CN_if (region $loc noCursor, e, c, cs) }
2326-
;
2331+
| c= if_clauses
2332+
{ c }
23272333

23282334
cn_option_func_body:
23292335
| cn_func_body=delimited(LBRACE, expr, RBRACE)

0 commit comments

Comments
 (0)