|
@@ -791,21 +791,27 @@ and parse_call_params ec s =
|
|
|
and parse_macro_cond allow_op s =
|
|
|
match s with parser
|
|
|
| [< '(Const (Ident t | Type t),p) >] ->
|
|
|
- let e = (EConst (Ident t),p) in
|
|
|
- if not allow_op then
|
|
|
- None, e
|
|
|
- else (match Stream.peek s with
|
|
|
- | Some (Binop op,_) ->
|
|
|
- Stream.junk s;
|
|
|
- let tk, e2 = (try parse_macro_cond true s with Stream.Failure -> serror()) in
|
|
|
- tk, make_binop op e e2
|
|
|
- | tk ->
|
|
|
- tk, e);
|
|
|
+ parse_macro_ident allow_op t p s
|
|
|
+ | [< '(Kwd k,p) >] ->
|
|
|
+ parse_macro_ident allow_op (s_keyword k) p s
|
|
|
| [< '(POpen, p1); _,e = parse_macro_cond true; '(PClose, p2) >] ->
|
|
|
None, (EParenthesis e,punion p1 p2)
|
|
|
| [< '(Unop op,p); tk, e = parse_macro_cond allow_op >] ->
|
|
|
tk, make_unop op e p
|
|
|
|
|
|
+and parse_macro_ident allow_op t p s =
|
|
|
+ let e = (EConst (Ident t),p) in
|
|
|
+ if not allow_op then
|
|
|
+ None, e
|
|
|
+ else match Stream.peek s with
|
|
|
+ | Some (Binop op,_) ->
|
|
|
+ Stream.junk s;
|
|
|
+ let tk, e2 = (try parse_macro_cond true s with Stream.Failure -> serror()) in
|
|
|
+ tk, make_binop op e e2
|
|
|
+ | tk ->
|
|
|
+ tk, e
|
|
|
+
|
|
|
+
|
|
|
and toplevel_expr s =
|
|
|
try
|
|
|
expr s
|