summaryrefslogtreecommitdiff
path: root/giscanner/scannerlexer.l
diff options
context:
space:
mode:
authorStefan Kost <ensonic@users.sf.net>2009-12-05 23:00:32 +0200
committerStefan Kost <ensonic@users.sf.net>2009-12-05 23:00:32 +0200
commit58de797638c54954d56862b58c4ec78a57485131 (patch)
treefa75dc7229b1a1101fbe34e07753458637c70897 /giscanner/scannerlexer.l
parent531442faea054507f7d50e36464ea1737e2423ac (diff)
downloadgobject-introspection-58de797638c54954d56862b58c4ec78a57485131.tar.gz
scanner: more verbose parser error messages
Keep track of the current line (the first 2000 chars of it) and include that in syntax error messages. Also print that failed token in the error message.
Diffstat (limited to 'giscanner/scannerlexer.l')
-rw-r--r--giscanner/scannerlexer.l8
1 files changed, 7 insertions, 1 deletions
diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l
index cee91608..ff1ee0ff 100644
--- a/giscanner/scannerlexer.l
+++ b/giscanner/scannerlexer.l
@@ -37,6 +37,7 @@
#include "grealpath.h"
int lineno;
+char linebuf[2000];
#undef YY_BUF_SIZE
#define YY_BUF_SIZE 1048576
@@ -61,7 +62,12 @@ stringtext ([^\\\"])|(\\.)
%%
-"\n" { ++lineno; } /* " */
+\n.* { strncpy(linebuf, yytext+1, sizeof(linebuf)); /* save the next line */
+ linebuf[sizeof(linebuf)-1]='\0';
+ /* printf("%4d:%s\n",lineno,linebuf); */
+ yyless(1); /* give back all but the \n to rescan */
+ ++lineno;
+ }
"\\\n" { ++lineno; }
[\t\f\v\r ]+ { /* Ignore whitespace. */ }