diff options
| author | Masahiro Yamada <yamada.masahiro@socionext.com> | 2018-12-11 06:01:06 -0500 |
|---|---|---|
| committer | Masahiro Yamada <yamada.masahiro@socionext.com> | 2018-12-21 10:25:54 -0500 |
| commit | caaebb3c6de3493c7f11f79a5dddc6691a40e55f (patch) | |
| tree | 06a4d167748f5432b813a6e7a774404b0aad40f6 /scripts | |
| parent | f5451582c4e22ce8912aae4950810f3598c9b516 (diff) | |
kconfig: refactor end token rules
T_ENDMENU, T_ENDCHOICE, T_ENDIF are the last users of kconf_id
associated with yylval. Refactor them to not use it.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/kconfig/zconf.y | 43 |
1 files changed, 15 insertions, 28 deletions
diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y index 2127f1d65170..71c2fe737e37 100644 --- a/scripts/kconfig/zconf.y +++ b/scripts/kconfig/zconf.y | |||
| @@ -24,7 +24,8 @@ int yylex(void); | |||
| 24 | static void yyerror(const char *err); | 24 | static void yyerror(const char *err); |
| 25 | static void zconfprint(const char *err, ...); | 25 | static void zconfprint(const char *err, ...); |
| 26 | static void zconf_error(const char *err, ...); | 26 | static void zconf_error(const char *err, ...); |
| 27 | static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken); | 27 | static bool zconf_endtoken(const char *tokenname, |
| 28 | const char *expected_tokenname); | ||
| 28 | 29 | ||
| 29 | struct symbol *symbol_hash[SYMBOL_HASHSIZE]; | 30 | struct symbol *symbol_hash[SYMBOL_HASHSIZE]; |
| 30 | 31 | ||
| @@ -98,7 +99,7 @@ static struct menu *current_menu, *current_entry; | |||
| 98 | %type <type> type logic_type default | 99 | %type <type> type logic_type default |
| 99 | %type <expr> expr | 100 | %type <expr> expr |
| 100 | %type <expr> if_expr | 101 | %type <expr> if_expr |
| 101 | %type <id> end | 102 | %type <string> end |
| 102 | %type <menu> if_entry menu_entry choice_entry | 103 | %type <menu> if_entry menu_entry choice_entry |
| 103 | %type <string> word_opt assign_val | 104 | %type <string> word_opt assign_val |
| 104 | %type <flavor> assign_op | 105 | %type <flavor> assign_op |
| @@ -256,7 +257,7 @@ choice_entry: choice choice_option_list | |||
| 256 | 257 | ||
| 257 | choice_end: end | 258 | choice_end: end |
| 258 | { | 259 | { |
| 259 | if (zconf_endtoken($1, T_CHOICE, T_ENDCHOICE)) { | 260 | if (zconf_endtoken($1, "choice")) { |
| 260 | menu_end_menu(); | 261 | menu_end_menu(); |
| 261 | printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); | 262 | printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); |
| 262 | } | 263 | } |
| @@ -330,7 +331,7 @@ if_entry: T_IF expr T_EOL | |||
| 330 | 331 | ||
| 331 | if_end: end | 332 | if_end: end |
| 332 | { | 333 | { |
| 333 | if (zconf_endtoken($1, T_IF, T_ENDIF)) { | 334 | if (zconf_endtoken($1, "if")) { |
| 334 | menu_end_menu(); | 335 | menu_end_menu(); |
| 335 | printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); | 336 | printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); |
| 336 | } | 337 | } |
| @@ -355,7 +356,7 @@ menu_entry: menu menu_option_list | |||
| 355 | 356 | ||
| 356 | menu_end: end | 357 | menu_end: end |
| 357 | { | 358 | { |
| 358 | if (zconf_endtoken($1, T_MENU, T_ENDMENU)) { | 359 | if (zconf_endtoken($1, "menu")) { |
| 359 | menu_end_menu(); | 360 | menu_end_menu(); |
| 360 | printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); | 361 | printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); |
| 361 | } | 362 | } |
| @@ -445,9 +446,9 @@ prompt: T_WORD | |||
| 445 | | T_WORD_QUOTE | 446 | | T_WORD_QUOTE |
| 446 | ; | 447 | ; |
| 447 | 448 | ||
| 448 | end: T_ENDMENU T_EOL { $$ = $1; } | 449 | end: T_ENDMENU T_EOL { $$ = "menu"; } |
| 449 | | T_ENDCHOICE T_EOL { $$ = $1; } | 450 | | T_ENDCHOICE T_EOL { $$ = "choice"; } |
| 450 | | T_ENDIF T_EOL { $$ = $1; } | 451 | | T_ENDIF T_EOL { $$ = "if"; } |
| 451 | ; | 452 | ; |
| 452 | 453 | ||
| 453 | if_expr: /* empty */ { $$ = NULL; } | 454 | if_expr: /* empty */ { $$ = NULL; } |
| @@ -530,35 +531,21 @@ void conf_parse(const char *name) | |||
| 530 | sym_set_change_count(1); | 531 | sym_set_change_count(1); |
| 531 | } | 532 | } |
| 532 | 533 | ||
| 533 | static const char *zconf_tokenname(int token) | 534 | static bool zconf_endtoken(const char *tokenname, |
| 534 | { | 535 | const char *expected_tokenname) |
| 535 | switch (token) { | ||
| 536 | case T_MENU: return "menu"; | ||
| 537 | case T_ENDMENU: return "endmenu"; | ||
| 538 | case T_CHOICE: return "choice"; | ||
| 539 | case T_ENDCHOICE: return "endchoice"; | ||
| 540 | case T_IF: return "if"; | ||
| 541 | case T_ENDIF: return "endif"; | ||
| 542 | case T_DEPENDS: return "depends"; | ||
| 543 | case T_VISIBLE: return "visible"; | ||
| 544 | } | ||
| 545 | return "<token>"; | ||
| 546 | } | ||
| 547 | |||
| 548 | static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken) | ||
| 549 | { | 536 | { |
| 550 | if (id->token != endtoken) { | 537 | if (strcmp(tokenname, expected_tokenname)) { |
| 551 | zconf_error("unexpected '%s' within %s block", | 538 | zconf_error("unexpected '%s' within %s block", |
| 552 | id->name, zconf_tokenname(starttoken)); | 539 | tokenname, expected_tokenname); |
| 553 | yynerrs++; | 540 | yynerrs++; |
| 554 | return false; | 541 | return false; |
| 555 | } | 542 | } |
| 556 | if (current_menu->file != current_file) { | 543 | if (current_menu->file != current_file) { |
| 557 | zconf_error("'%s' in different file than '%s'", | 544 | zconf_error("'%s' in different file than '%s'", |
| 558 | id->name, zconf_tokenname(starttoken)); | 545 | tokenname, expected_tokenname); |
| 559 | fprintf(stderr, "%s:%d: location of the '%s'\n", | 546 | fprintf(stderr, "%s:%d: location of the '%s'\n", |
| 560 | current_menu->file->name, current_menu->lineno, | 547 | current_menu->file->name, current_menu->lineno, |
| 561 | zconf_tokenname(starttoken)); | 548 | expected_tokenname); |
| 562 | yynerrs++; | 549 | yynerrs++; |
| 563 | return false; | 550 | return false; |
| 564 | } | 551 | } |
