kconfig: use distinct tokens for type and default properties
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Tue, 11 Dec 2018 11:00:59 +0000 (20:00 +0900)
committerChristian Lamparter <chunkeey@gmail.com>
Sun, 10 Feb 2019 21:32:11 +0000 (22:32 +0100)
This commit removes kconf_id::stype to prepare for the entire
removal of kconf_id.c

To simplify the lexer, I want keywords straight-mapped to tokens.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
config/kconf_id.c
config/lkc.h
config/zconf.y

index b3e0ea0ac732712813c3bcf220d1839174fac95e..ec2c011f9e6263b52ca6e0bff724169ffe1a27d1 100644 (file)
@@ -15,15 +15,15 @@ static struct kconf_id kconf_id_array[] = {
        { "endif",              T_ENDIF,                TF_COMMAND },
        { "depends",            T_DEPENDS,              TF_COMMAND },
        { "optional",           T_OPTIONAL,             TF_COMMAND },
-       { "default",            T_DEFAULT,              TF_COMMAND, S_UNKNOWN },
+       { "default",            T_DEFAULT,              TF_COMMAND },
+       { "def_bool",           T_DEF_BOOL,             TF_COMMAND },
+       { "def_tristate",       T_DEF_TRISTATE,         TF_COMMAND },
        { "prompt",             T_PROMPT,               TF_COMMAND },
-       { "tristate",           T_TYPE,                 TF_COMMAND, S_TRISTATE },
-       { "def_tristate",       T_DEFAULT,              TF_COMMAND, S_TRISTATE },
-       { "bool",               T_TYPE,                 TF_COMMAND, S_BOOLEAN },
-       { "def_bool",           T_DEFAULT,              TF_COMMAND, S_BOOLEAN },
-       { "int",                T_TYPE,                 TF_COMMAND, S_INT },
-       { "hex",                T_TYPE,                 TF_COMMAND, S_HEX },
-       { "string",             T_TYPE,                 TF_COMMAND, S_STRING },
+       { "bool",               T_BOOL,                 TF_COMMAND },
+       { "tristate",           T_TRISTATE,             TF_COMMAND },
+       { "int",                T_INT,                  TF_COMMAND },
+       { "hex",                T_HEX,                  TF_COMMAND },
+       { "string",             T_STRING,               TF_COMMAND },
        { "select",             T_SELECT,               TF_COMMAND },
        { "imply",              T_IMPLY,                TF_COMMAND },
        { "range",              T_RANGE,                TF_COMMAND },
index 9eb7c837cd8fd686bbafa000d067db3c8e4b444f..b6bbcd1dda2be89d3f2a6e63da92f6411c83f4ff 100644 (file)
@@ -50,7 +50,6 @@ struct kconf_id {
        const char *name;
        int token;
        unsigned int flags;
-       enum symbol_type stype;
 };
 
 extern int yylineno;
index 1dac176e24fd90a31d95d3c0f442393c84cadd2a..de3b94e7f4b680fc0a6ca7e15c53836701147fc5 100644 (file)
@@ -40,6 +40,7 @@ static struct menu *current_menu, *current_entry;
        struct expr *expr;
        struct menu *menu;
        const struct kconf_id *id;
+       enum symbol_type type;
        enum variable_flavor flavor;
 }
 
@@ -59,8 +60,6 @@ static struct menu *current_menu, *current_entry;
 %token <id>T_DEPENDS
 %token <id>T_OPTIONAL
 %token <id>T_PROMPT
-%token <id>T_TYPE
-%token <id>T_DEFAULT
 %token <id>T_SELECT
 %token <id>T_IMPLY
 %token <id>T_RANGE
@@ -69,8 +68,16 @@ static struct menu *current_menu, *current_entry;
 %token <id>T_ON
 %token <string> T_WORD
 %token <string> T_WORD_QUOTE
+%token T_BOOL
 %token T_CLOSE_PAREN
+%token T_DEFAULT
+%token T_DEF_BOOL
+%token T_DEF_TRISTATE
+%token T_HEX
+%token T_INT
 %token T_OPEN_PAREN
+%token T_STRING
+%token T_TRISTATE
 %token T_EOL
 %token <string> T_VARIABLE
 %token <flavor> T_ASSIGN
@@ -85,6 +92,7 @@ static struct menu *current_menu, *current_entry;
 %type <string> prompt
 %type <symbol> nonconst_symbol
 %type <symbol> symbol
+%type <type> type logic_type default
 %type <expr> expr
 %type <expr> if_expr
 %type <id> end
@@ -169,12 +177,12 @@ config_option_list:
        | config_option_list help
 ;
 
-config_option: T_TYPE prompt_stmt_opt T_EOL
+config_option: type prompt_stmt_opt T_EOL
 {
-       menu_set_type($1->stype);
+       menu_set_type($1);
        printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
                zconf_curname(), zconf_lineno(),
-               $1->stype);
+               $1);
 };
 
 config_option: T_PROMPT prompt if_expr T_EOL
@@ -183,14 +191,14 @@ config_option: T_PROMPT prompt if_expr T_EOL
        printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
 };
 
-config_option: T_DEFAULT expr if_expr T_EOL
+config_option: default expr if_expr T_EOL
 {
        menu_add_expr(P_DEFAULT, $2, $3);
-       if ($1->stype != S_UNKNOWN)
-               menu_set_type($1->stype);
+       if ($1 != S_UNKNOWN)
+               menu_set_type($1);
        printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
                zconf_curname(), zconf_lineno(),
-               $1->stype);
+               $1);
 };
 
 config_option: T_SELECT nonconst_symbol if_expr T_EOL
@@ -274,15 +282,11 @@ choice_option: T_PROMPT prompt if_expr T_EOL
        printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
 };
 
-choice_option: T_TYPE prompt_stmt_opt T_EOL
+choice_option: logic_type prompt_stmt_opt T_EOL
 {
-       if ($1->stype == S_BOOLEAN || $1->stype == S_TRISTATE) {
-               menu_set_type($1->stype);
-               printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-                       zconf_curname(), zconf_lineno(),
-                       $1->stype);
-       } else
-               YYERROR;
+       menu_set_type($1);
+       printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
+              zconf_curname(), zconf_lineno(), $1);
 };
 
 choice_option: T_OPTIONAL T_EOL
@@ -293,14 +297,26 @@ choice_option: T_OPTIONAL T_EOL
 
 choice_option: T_DEFAULT nonconst_symbol if_expr T_EOL
 {
-       if ($1->stype == S_UNKNOWN) {
-               menu_add_symbol(P_DEFAULT, $2, $3);
-               printd(DEBUG_PARSE, "%s:%d:default\n",
-                       zconf_curname(), zconf_lineno());
-       } else
-               YYERROR;
+       menu_add_symbol(P_DEFAULT, $2, $3);
+       printd(DEBUG_PARSE, "%s:%d:default\n",
+              zconf_curname(), zconf_lineno());
 };
 
+type:
+         logic_type
+       | T_INT                 { $$ = S_INT; }
+       | T_HEX                 { $$ = S_HEX; }
+       | T_STRING              { $$ = S_STRING; }
+
+logic_type:
+         T_BOOL                { $$ = S_BOOLEAN; }
+       | T_TRISTATE            { $$ = S_TRISTATE; }
+
+default:
+         T_DEFAULT             { $$ = S_UNKNOWN; }
+       | T_DEF_BOOL            { $$ = S_BOOLEAN; }
+       | T_DEF_TRISTATE        { $$ = S_TRISTATE; }
+
 choice_block:
          /* empty */
        | choice_block common_stmt