From 9898ab5316d50a817a06c9c56d82e78f383437f8 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Sun, 18 Nov 2012 15:23:00 +0100 Subject: [PATCH] fixup line counting in #pragmas --- lexer.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lexer.c b/lexer.c index c28ad88..40756c0 100644 --- a/lexer.c +++ b/lexer.c @@ -353,10 +353,13 @@ static bool lex_try_pragma(lex_file *lex) char *pragma = NULL; char *command = NULL; char *param = NULL; + size_t line; if (lex->flags.preprocessing) return false; + line = lex->line; + ch = lex_getch(lex); if (ch != '#') { lex_ungetch(lex, ch); @@ -393,7 +396,7 @@ static bool lex_try_pragma(lex_file *lex) if (!strcmp(command, "push")) { if (!strcmp(param, "line")) { lex->push_line++; - lex->line--; + --line; } else goto unroll; @@ -402,7 +405,6 @@ static bool lex_try_pragma(lex_file *lex) if (!strcmp(param, "line")) { if (lex->push_line) lex->push_line--; - lex->line--; } else goto unroll; @@ -412,6 +414,7 @@ static bool lex_try_pragma(lex_file *lex) while (ch != '\n') ch = lex_getch(lex); + lex->line = line; return true; unroll: @@ -440,6 +443,8 @@ unroll: vec_free(pragma); } lex_ungetch(lex, '#'); + + lex->line = line; return false; }