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