소스 검색

allow function $name() for macros, still forbid it in typer

Nicolas Cannasse 13 년 전
부모
커밋
82409ca762
2개의 변경된 파일9개의 추가작업 그리고 3개의 파일을 삭제
  1. 1 1
      parser.ml
  2. 8 2
      typer.ml

+ 1 - 1
parser.ml

@@ -658,7 +658,7 @@ 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
-	| [< inl, p1 = inline_function; name = popt ident; pl = parse_constraint_params; '(POpen,_); al = psep Comma parse_fun_param; '(PClose,_); t = parse_type_opt; s >] ->
+	| [< inl, p1 = inline_function; name = popt dollar_ident; pl = parse_constraint_params; '(POpen,_); al = psep Comma parse_fun_param; '(PClose,_); t = parse_type_opt; s >] ->
 		let make e =
 			let f = {
 				f_params = pl;

+ 8 - 2
typer.ml

@@ -1990,8 +1990,14 @@ and type_expr ctx ?(need_val=true) (e,p) =
 		let ft = TFun (fun_args args,rt) in
 		let inline, v = (match name with
 			| None -> false, None
-			| Some v when ExtString.String.starts_with v "inline_" -> true, Some (add_local ctx (String.sub v 7 (String.length v - 7)) ft)
-			| Some v -> false, Some (add_local ctx v ft)
+			| Some v when ExtString.String.starts_with v "inline_" -> true, Some (String.sub v 7 (String.length v - 7))
+			| Some v -> false, Some v
+		) in
+		let v = (match v with
+			| None -> None
+			| Some v ->
+				if v.[0] = '$' then display_error ctx "Variables names starting with a dollar are not allowed" p;
+				Some (add_local ctx v ft)
 		) in
 		let e , fargs = Typeload.type_function ctx args rt (match ctx.curfun with FStatic -> FStatic | _ -> FMemberLocal) f p in
 		ctx.type_params <- old;