Browse Source

fixed local functions completion.

Nicolas Cannasse 18 năm trước cách đây
mục cha
commit
ff07a7adf3
1 tập tin đã thay đổi với 13 bổ sung7 xóa
  1. 13 7
      parser.ml

+ 13 - 7
parser.ml

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