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/kconfig | |
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/kconfig')
-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 | } |