From ca4e6f32f59e7db71b00451e9ff6ee40c2e094fb Mon Sep 17 00:00:00 2001 From: Alexey Gladkov Date: Tue, 20 Mar 2012 08:15:46 +0400 Subject: [PATCH] Dont use flex internal variable Signed-off-by: Alexey Gladkov --- src/loadkeys.analyze.c | 124 +++++++++++++++++++++++++++---------------------- src/loadkeys.analyze.h | 2 +- src/loadkeys.analyze.l | 15 +++++- 3 files changed, 82 insertions(+), 59 deletions(-) diff --git a/src/loadkeys.analyze.c b/src/loadkeys.analyze.c index 9fade96..1cbc46b 100644 --- a/src/loadkeys.analyze.c +++ b/src/loadkeys.analyze.c @@ -835,7 +835,9 @@ static struct infile { char *filename = NULL; int line_nr = 1; -static int infile_stack_ptr = -1; + +static int infile_stack_ptr = -1; +static int state_ptr = 0; void stack_push(FILE *fd, int is_pipe, char *fname) { if (infile_stack_ptr >= MAX_INCLUDE_DEPTH) @@ -1040,7 +1042,7 @@ static void open_include(char *s) -#line 1044 "loadkeys.analyze.c" +#line 1046 "loadkeys.analyze.c" #define INITIAL 0 #define RVALUE 1 @@ -1231,7 +1233,7 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 285 "loadkeys.analyze.l" +#line 287 "loadkeys.analyze.l" /* To protect from wrong code in the higher level parser (loadkeys.y), @@ -1247,7 +1249,7 @@ YY_DECL yylval = YYLVAL_UNDEF; -#line 1251 "loadkeys.analyze.c" +#line 1253 "loadkeys.analyze.c" if ( !(yy_init) ) { @@ -1332,25 +1334,27 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 300 "loadkeys.analyze.l" +#line 302 "loadkeys.analyze.l" { yy_push_state(INCLSTR); + state_ptr++; } YY_BREAK case 2: YY_RULE_SETUP -#line 303 "loadkeys.analyze.l" +#line 306 "loadkeys.analyze.l" { char *s = xstrndup(yytext+1, strlen(yytext)-2); /* use static pathname to store *s ? */ open_include(s); yy_pop_state(); + state_ptr--; } YY_BREAK case 3: /* rule 3 can match eol */ YY_RULE_SETUP -#line 309 "loadkeys.analyze.l" +#line 313 "loadkeys.analyze.l" { yyerror(_("expected filename between quotes")); } @@ -1359,7 +1363,7 @@ case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(RVALUE): case YY_STATE_EOF(STR): case YY_STATE_EOF(INCLSTR): -#line 312 "loadkeys.analyze.l" +#line 316 "loadkeys.analyze.l" { stack_pop(); if (!YY_CURRENT_BUFFER) @@ -1369,7 +1373,7 @@ case YY_STATE_EOF(INCLSTR): case 4: /* rule 4 can match eol */ YY_RULE_SETUP -#line 317 "loadkeys.analyze.l" +#line 321 "loadkeys.analyze.l" { line_nr++; } @@ -1377,17 +1381,20 @@ YY_RULE_SETUP case 5: /* rule 5 can match eol */ YY_RULE_SETUP -#line 320 "loadkeys.analyze.l" +#line 324 "loadkeys.analyze.l" { line_nr++; - if (yy_start_stack_ptr > 0) + //if (yy_start_stack_ptr > 0) + if (state_ptr > 0) { yy_pop_state(); + state_ptr--; + } return(EOL); } YY_BREAK case 6: YY_RULE_SETUP -#line 326 "loadkeys.analyze.l" +#line 333 "loadkeys.analyze.l" ; /* do nothing */ YY_BREAK case 7: @@ -1396,37 +1403,40 @@ case 7: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 327 "loadkeys.analyze.l" +#line 334 "loadkeys.analyze.l" ; /* do nothing */ YY_BREAK case 8: YY_RULE_SETUP -#line 328 "loadkeys.analyze.l" +#line 335 "loadkeys.analyze.l" { yy_push_state(RVALUE); + state_ptr++; rvalct = 0; return(EQUALS); } YY_BREAK case 9: YY_RULE_SETUP -#line 333 "loadkeys.analyze.l" +#line 341 "loadkeys.analyze.l" { yy_push_state(RVALUE); + state_ptr++; return(STRING); } YY_BREAK case 10: YY_RULE_SETUP -#line 337 "loadkeys.analyze.l" +#line 346 "loadkeys.analyze.l" { yy_push_state(RVALUE); + state_ptr++; return(TO); } YY_BREAK case 11: YY_RULE_SETUP -#line 341 "loadkeys.analyze.l" +#line 351 "loadkeys.analyze.l" { yylval = strtol(yytext + 1, NULL, 16); if (yylval >= 0xf000) @@ -1436,7 +1446,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 347 "loadkeys.analyze.l" +#line 357 "loadkeys.analyze.l" { yylval = strtol(yytext, NULL, 0); return(NUMBER); @@ -1444,127 +1454,127 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 351 "loadkeys.analyze.l" +#line 361 "loadkeys.analyze.l" { return((yylval = ksymtocode(yytext, TO_AUTO)) == -1 ? ERROR : LITERAL); } YY_BREAK case 14: YY_RULE_SETUP -#line 352 "loadkeys.analyze.l" +#line 362 "loadkeys.analyze.l" { return(DASH); } YY_BREAK case 15: YY_RULE_SETUP -#line 353 "loadkeys.analyze.l" +#line 363 "loadkeys.analyze.l" { return(COMMA); } YY_BREAK case 16: YY_RULE_SETUP -#line 354 "loadkeys.analyze.l" +#line 364 "loadkeys.analyze.l" { return(PLUS); } YY_BREAK case 17: YY_RULE_SETUP -#line 355 "loadkeys.analyze.l" +#line 365 "loadkeys.analyze.l" { return(CHARSET); } YY_BREAK case 18: YY_RULE_SETUP -#line 356 "loadkeys.analyze.l" +#line 366 "loadkeys.analyze.l" { return(KEYMAPS); } YY_BREAK case 19: YY_RULE_SETUP -#line 357 "loadkeys.analyze.l" +#line 367 "loadkeys.analyze.l" { return(KEYCODE); } YY_BREAK case 20: YY_RULE_SETUP -#line 358 "loadkeys.analyze.l" +#line 368 "loadkeys.analyze.l" { return(PLAIN); } YY_BREAK case 21: YY_RULE_SETUP -#line 359 "loadkeys.analyze.l" +#line 369 "loadkeys.analyze.l" { return(SHIFT); } YY_BREAK case 22: YY_RULE_SETUP -#line 360 "loadkeys.analyze.l" +#line 370 "loadkeys.analyze.l" { return(CONTROL); } YY_BREAK case 23: YY_RULE_SETUP -#line 361 "loadkeys.analyze.l" +#line 371 "loadkeys.analyze.l" { return(ALT); } YY_BREAK case 24: YY_RULE_SETUP -#line 362 "loadkeys.analyze.l" +#line 372 "loadkeys.analyze.l" { return(ALTGR); } YY_BREAK case 25: YY_RULE_SETUP -#line 363 "loadkeys.analyze.l" +#line 373 "loadkeys.analyze.l" { return(SHIFTL); } YY_BREAK case 26: YY_RULE_SETUP -#line 364 "loadkeys.analyze.l" +#line 374 "loadkeys.analyze.l" { return(SHIFTR); } YY_BREAK case 27: YY_RULE_SETUP -#line 365 "loadkeys.analyze.l" +#line 375 "loadkeys.analyze.l" { return(CTRLL); } YY_BREAK case 28: YY_RULE_SETUP -#line 366 "loadkeys.analyze.l" +#line 376 "loadkeys.analyze.l" { return(CTRLR); } YY_BREAK case 29: YY_RULE_SETUP -#line 367 "loadkeys.analyze.l" +#line 377 "loadkeys.analyze.l" { return(CAPSSHIFT); } YY_BREAK case 30: YY_RULE_SETUP -#line 368 "loadkeys.analyze.l" +#line 378 "loadkeys.analyze.l" { return(ALT_IS_META); } YY_BREAK case 31: YY_RULE_SETUP -#line 369 "loadkeys.analyze.l" +#line 379 "loadkeys.analyze.l" { return(STRINGS); } YY_BREAK case 32: YY_RULE_SETUP -#line 370 "loadkeys.analyze.l" +#line 380 "loadkeys.analyze.l" { return(COMPOSE); } YY_BREAK case 33: YY_RULE_SETUP -#line 371 "loadkeys.analyze.l" +#line 381 "loadkeys.analyze.l" { return(AS); } YY_BREAK case 34: YY_RULE_SETUP -#line 372 "loadkeys.analyze.l" +#line 382 "loadkeys.analyze.l" { return(USUAL); } YY_BREAK case 35: YY_RULE_SETUP -#line 373 "loadkeys.analyze.l" +#line 383 "loadkeys.analyze.l" { return(ON); } YY_BREAK case 36: YY_RULE_SETUP -#line 374 "loadkeys.analyze.l" +#line 384 "loadkeys.analyze.l" { return(FOR); } YY_BREAK case 37: YY_RULE_SETUP -#line 375 "loadkeys.analyze.l" +#line 385 "loadkeys.analyze.l" { yylval = strtol(yytext + 2, NULL, 8); return(CCHAR); @@ -1572,7 +1582,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 379 "loadkeys.analyze.l" +#line 389 "loadkeys.analyze.l" { yylval = (unsigned char) yytext[2]; return(CCHAR); @@ -1580,7 +1590,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 383 "loadkeys.analyze.l" +#line 393 "loadkeys.analyze.l" { yylval = (unsigned char) yytext[1]; return(CCHAR); @@ -1588,16 +1598,17 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 387 "loadkeys.analyze.l" +#line 397 "loadkeys.analyze.l" { p = (char *) kbs_buf.kb_string; pmax = p + sizeof(kbs_buf.kb_string) - 1; yy_push_state(STR); + state_ptr++; } YY_BREAK case 41: YY_RULE_SETUP -#line 392 "loadkeys.analyze.l" +#line 403 "loadkeys.analyze.l" { if (p >= pmax) lkfatal(_("string too long")); @@ -1606,7 +1617,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 397 "loadkeys.analyze.l" +#line 408 "loadkeys.analyze.l" { if (p >= pmax) lkfatal(_("string too long")); @@ -1615,7 +1626,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 402 "loadkeys.analyze.l" +#line 413 "loadkeys.analyze.l" { if (p >= pmax) lkfatal(_("string too long")); @@ -1624,7 +1635,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 407 "loadkeys.analyze.l" +#line 418 "loadkeys.analyze.l" { if (p >= pmax) lkfatal(_("string too long")); @@ -1634,7 +1645,7 @@ YY_RULE_SETUP case 45: /* rule 45 can match eol */ YY_RULE_SETUP -#line 412 "loadkeys.analyze.l" +#line 423 "loadkeys.analyze.l" { char *ptmp = p; p += strlen(yytext); @@ -1645,26 +1656,27 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 419 "loadkeys.analyze.l" +#line 430 "loadkeys.analyze.l" { *p = '\0'; yy_pop_state(); + state_ptr--; return(STRLITERAL); } YY_BREAK case 47: YY_RULE_SETUP -#line 424 "loadkeys.analyze.l" +#line 436 "loadkeys.analyze.l" { return(ERROR); /* report any unknown characters */ } YY_BREAK case 48: YY_RULE_SETUP -#line 427 "loadkeys.analyze.l" +#line 439 "loadkeys.analyze.l" ECHO; YY_BREAK -#line 1668 "loadkeys.analyze.c" +#line 1680 "loadkeys.analyze.c" case YY_END_OF_BUFFER: { @@ -2663,7 +2675,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 427 "loadkeys.analyze.l" +#line 439 "loadkeys.analyze.l" diff --git a/src/loadkeys.analyze.h b/src/loadkeys.analyze.h index 1b6ee24..b3c2ce6 100644 --- a/src/loadkeys.analyze.h +++ b/src/loadkeys.analyze.h @@ -315,7 +315,7 @@ extern int yylex (void); #undef YY_DECL #endif -#line 427 "/mnt/scm/legion/kbd-upstream/src/loadkeys.analyze.l" +#line 439 "/mnt/scm/legion/kbd-upstream/src/loadkeys.analyze.l" #line 322 "/mnt/scm/legion/kbd-upstream/src/loadkeys.analyze.h" diff --git a/src/loadkeys.analyze.l b/src/loadkeys.analyze.l index 62ab8a3..c18dcea 100644 --- a/src/loadkeys.analyze.l +++ b/src/loadkeys.analyze.l @@ -42,7 +42,9 @@ static struct infile { char *filename = NULL; int line_nr = 1; -static int infile_stack_ptr = -1; + +static int infile_stack_ptr = -1; +static int state_ptr = 0; void stack_push(FILE *fd, int is_pipe, char *fname) { if (infile_stack_ptr >= MAX_INCLUDE_DEPTH) @@ -299,12 +301,14 @@ To to|To|TO {Include} { yy_push_state(INCLSTR); + state_ptr++; } \"[^\"\n]+\" { char *s = xstrndup(yytext+1, strlen(yytext)-2); /* use static pathname to store *s ? */ open_include(s); yy_pop_state(); + state_ptr--; } [^"]|\"\"|\"[^"\n]*{Eol} { yyerror(_("expected filename between quotes")); @@ -319,23 +323,28 @@ To to|To|TO } {Eol} { line_nr++; - if (yy_start_stack_ptr > 0) + if (state_ptr > 0) { yy_pop_state(); + state_ptr--; + } return(EOL); } {Blank}+ ; /* do nothing */ {Comment}.*/{Eol} ; /* do nothing */ {Equals} { yy_push_state(RVALUE); + state_ptr++; rvalct = 0; return(EQUALS); } {String} { yy_push_state(RVALUE); + state_ptr++; return(STRING); } {To} { yy_push_state(RVALUE); + state_ptr++; return(TO); } {Unicode} { @@ -388,6 +397,7 @@ To to|To|TO p = (char *) kbs_buf.kb_string; pmax = p + sizeof(kbs_buf.kb_string) - 1; yy_push_state(STR); + state_ptr++; } \\{Octa} { if (p >= pmax) @@ -419,6 +429,7 @@ To to|To|TO \" { *p = '\0'; yy_pop_state(); + state_ptr--; return(STRLITERAL); } . { -- 2.7.4