2
0
Эх сурвалжийг харах

allowed keywords for macro conditions (true, false, etc)

Nicolas Cannasse 13 жил өмнө
parent
commit
5e2be9e6e2
1 өөрчлөгдсөн 16 нэмэгдсэн , 10 устгасан
  1. 16 10
      parser.ml

+ 16 - 10
parser.ml

@@ -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