فهرست منبع

[parser] error on invalid sharp tokens even when discarding

closes #4945
closes #7108
Simon Krajewski 6 سال پیش
والد
کامیت
dd9f1f6948

+ 11 - 0
src/syntax/parserEntry.ml

@@ -114,6 +114,11 @@ let parse ctx code file =
 	in_macro := Define.defined ctx Define.Macro;
 	Lexer.skip_header code;
 
+	let sharp_error s p =
+		let line = StringError.string_error ("#" ^ s) ["#if";"#elseif";"#else";"#end";"#error";"#line"] "Unknown token" in
+		error (Custom line) p
+	in
+
 	let sraw = Stream.from (fun _ -> Some (Lexer.sharp_token code)) in
 	let rec next_token() = process_token (Lexer.token code)
 
@@ -153,6 +158,8 @@ let parse ctx code file =
 			) in
 			!(Lexer.cur).Lexer.lline <- line - 1;
 			next_token();
+		| Sharp s ->
+			sharp_error s (pos tk)
 		| _ ->
 			tk
 
@@ -178,6 +185,10 @@ let parse ctx code file =
 			enter_macro (snd tk)
 		| Sharp "if" ->
 			skip_tokens_loop p test (skip_tokens p false)
+		| Sharp ("error" | "line") ->
+			skip_tokens p test
+		| Sharp s ->
+			sharp_error s (pos tk)
 		| Eof ->
 			syntax_error Unclosed_conditional ~pos:(Some p) sraw tk
 		| _ ->

+ 12 - 0
tests/misc/projects/Issue7108/Main.hx

@@ -0,0 +1,12 @@
+class Main {
+  static function main() {
+    trace("Haxe is great!");
+    #if js
+      trace('x');
+    #elsif js
+      trace('elif');
+    #else
+      trace('end');
+    #end
+  }
+}

+ 1 - 0
tests/misc/projects/Issue7108/compile-fail.hxml

@@ -0,0 +1 @@
+-main Main

+ 1 - 0
tests/misc/projects/Issue7108/compile-fail.hxml.stderr

@@ -0,0 +1 @@
+Main.hx:6: characters 5-11 : Unknown token (Suggestion: #elseif)