|
@@ -506,13 +506,19 @@ and expr = parser
|
|
|
| [< >] -> serror())
|
|
|
| [< '(POpen,p1); e = expr; '(PClose,p2); s >] -> expr_next (EParenthesis e, punion p1 p2) s
|
|
|
| [< '(BkOpen,p1); l = parse_array_decl; '(BkClose,p2); s >] -> expr_next (EArrayDecl l, punion p1 p2) s
|
|
|
- | [< '(Kwd Function,p1); '(POpen,_); al = psep Comma parse_fun_param; '(PClose,_); t = parse_type_opt; e = toplevel_expr; s >] ->
|
|
|
- let f = {
|
|
|
- f_type = t;
|
|
|
- f_args = al;
|
|
|
- f_expr = e;
|
|
|
- } in
|
|
|
- expr_next (EFunction f, punion p1 (pos e)) s
|
|
|
+ | [< '(Kwd Function,p1); '(POpen,_); al = psep Comma parse_fun_param; '(PClose,_); t = parse_type_opt; s >] ->
|
|
|
+ let make e =
|
|
|
+ let f = {
|
|
|
+ f_type = t;
|
|
|
+ f_args = al;
|
|
|
+ f_expr = e;
|
|
|
+ } in
|
|
|
+ EFunction f, punion p1 (pos e)
|
|
|
+ in
|
|
|
+ (try
|
|
|
+ expr_next (make (expr s)) s
|
|
|
+ with
|
|
|
+ Display e -> display (make e))
|
|
|
| [< '(Unop op,p1) when is_prefix op; e = expr >] -> make_unop op e p1
|
|
|
| [< '(Binop OpSub,p1); e = expr >] -> make_unop Neg e p1
|
|
|
| [< '(Kwd For,p); '(POpen,_); name = any_ident; '(Kwd In,_); it = expr; '(PClose,_); s >] ->
|