aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/kconfig/zconf.l
diff options
context:
space:
mode:
authorRoman Zippel <zippel@linux-m68k.org>2005-11-09 00:34:53 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-09 10:55:54 -0500
commita02f0570ae201c495ee991b959bb974af18f35cc (patch)
tree363e06307b7355caa2435a006c5385a1149bb7cc /scripts/kconfig/zconf.l
parent3370f9f0d9c7d14bf71aab27fa45c0537f130614 (diff)
[PATCH] kconfig: improve error handling in the parser
Add a few error tokens to the parser to catch common errors and print more descriptive error messages. Signed-off-by: Roman Zippel <zippel@linux-m68k.org> Cc: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'scripts/kconfig/zconf.l')
-rw-r--r--scripts/kconfig/zconf.l42
1 files changed, 24 insertions, 18 deletions
diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l
index cfcfabd7a069..cfa46077c6b4 100644
--- a/scripts/kconfig/zconf.l
+++ b/scripts/kconfig/zconf.l
@@ -18,6 +18,11 @@
18 18
19#define START_STRSIZE 16 19#define START_STRSIZE 16
20 20
21static struct {
22 struct file *file;
23 int lineno;
24} current_pos;
25
21static char *text; 26static char *text;
22static int text_size, text_asize; 27static int text_size, text_asize;
23 28
@@ -31,7 +36,7 @@ struct buffer *current_buf;
31static int last_ts, first_ts; 36static int last_ts, first_ts;
32 37
33static void zconf_endhelp(void); 38static void zconf_endhelp(void);
34static struct buffer *zconf_endfile(void); 39static void zconf_endfile(void);
35 40
36void new_string(void) 41void new_string(void)
37{ 42{
@@ -70,10 +75,13 @@ n [A-Za-z0-9_]
70 int str = 0; 75 int str = 0;
71 int ts, i; 76 int ts, i;
72 77
73[ \t]*#.*\n current_file->lineno++; 78[ \t]*#.*\n |
79[ \t]*\n {
80 current_file->lineno++;
81 return T_EOL;
82}
74[ \t]*#.* 83[ \t]*#.*
75 84
76[ \t]*\n current_file->lineno++; return T_EOL;
77 85
78[ \t]+ { 86[ \t]+ {
79 BEGIN(COMMAND); 87 BEGIN(COMMAND);
@@ -88,8 +96,10 @@ n [A-Za-z0-9_]
88<COMMAND>{ 96<COMMAND>{
89 {n}+ { 97 {n}+ {
90 struct kconf_id *id = kconf_id_lookup(yytext, yyleng); 98 struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
99 BEGIN(PARAM);
100 current_pos.file = current_file;
101 current_pos.lineno = current_file->lineno;
91 if (id && id->flags & TF_COMMAND) { 102 if (id && id->flags & TF_COMMAND) {
92 BEGIN(PARAM);
93 zconflval.id = id; 103 zconflval.id = id;
94 return id->token; 104 return id->token;
95 } 105 }
@@ -98,7 +108,11 @@ n [A-Za-z0-9_]
98 return T_WORD; 108 return T_WORD;
99 } 109 }
100 . 110 .
101 \n current_file->lineno++; BEGIN(INITIAL); 111 \n {
112 BEGIN(INITIAL);
113 current_file->lineno++;
114 return T_EOL;
115 }
102} 116}
103 117
104<PARAM>{ 118<PARAM>{
@@ -214,9 +228,9 @@ n [A-Za-z0-9_]
214} 228}
215 229
216<<EOF>> { 230<<EOF>> {
217 if (current_buf) { 231 if (current_file) {
218 zconf_endfile(); 232 zconf_endfile();
219 return T_EOF; 233 return T_EOL;
220 } 234 }
221 fclose(yyin); 235 fclose(yyin);
222 yyterminate(); 236 yyterminate();
@@ -307,7 +321,7 @@ void zconf_nextfile(const char *name)
307 current_file = file; 321 current_file = file;
308} 322}
309 323
310static struct buffer *zconf_endfile(void) 324static void zconf_endfile(void)
311{ 325{
312 struct buffer *parent; 326 struct buffer *parent;
313 327
@@ -323,22 +337,14 @@ static struct buffer *zconf_endfile(void)
323 } 337 }
324 free(current_buf); 338 free(current_buf);
325 current_buf = parent; 339 current_buf = parent;
326
327 return parent;
328} 340}
329 341
330int zconf_lineno(void) 342int zconf_lineno(void)
331{ 343{
332 if (current_buf) 344 return current_pos.lineno;
333 return current_file->lineno - 1;
334 else
335 return 0;
336} 345}
337 346
338char *zconf_curname(void) 347char *zconf_curname(void)
339{ 348{
340 if (current_buf) 349 return current_pos.file ? current_pos.file->name : "<none>";
341 return current_file->name;
342 else
343 return "<none>";
344} 350}