Commit 52907c07 authored by Masahiro Yamada's avatar Masahiro Yamada

kconfig: replace current_pos with separate cur_{filename,lineno}

Replace current_pos with separate variables representing the file name
and the line number, respectively.

No functional change is intended.

By the way, you might wonder why the "<none>" fallback exists in
zconf_curname(). menu_add_symbol() saves the current file and the line
number. It is intended to be called only during the yyparse() time.
However, menu_finalize() calls it, where there is no file being parsed.
This is a long-standing hack that should be fixed later. I left a FIXME
comment.
Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
parent d3d16228
...@@ -22,10 +22,14 @@ ...@@ -22,10 +22,14 @@
#define START_STRSIZE 16 #define START_STRSIZE 16
static struct { /* The Kconfig file currently being parsed. */
struct file *file; static const char *cur_filename;
int lineno;
} current_pos; /*
* The line number of the current statement. This does not match yylineno.
* yylineno is used by the lexer, while cur_lineno is used by the parser.
*/
static int cur_lineno;
static int prev_prev_token = T_EOL; static int prev_prev_token = T_EOL;
static int prev_token = T_EOL; static int prev_token = T_EOL;
...@@ -279,9 +283,14 @@ repeat: ...@@ -279,9 +283,14 @@ repeat:
* of each statement. Generally, \n is a statement * of each statement. Generally, \n is a statement
* terminator in Kconfig, but it is not always true * terminator in Kconfig, but it is not always true
* because \n could be escaped by a backslash. * because \n could be escaped by a backslash.
*
* FIXME:
* cur_filename and cur_lineno are used even after
* yyparse(); menu_finalize() calls menu_add_symbol().
* This should be fixed.
*/ */
current_pos.file = current_file; cur_filename = current_file ? current_file->name : "<none>";
current_pos.lineno = yylineno; cur_lineno = yylineno;
} }
} }
...@@ -462,10 +471,10 @@ static void zconf_endfile(void) ...@@ -462,10 +471,10 @@ static void zconf_endfile(void)
int zconf_lineno(void) int zconf_lineno(void)
{ {
return current_pos.lineno; return cur_lineno;
} }
const char *zconf_curname(void) const char *zconf_curname(void)
{ {
return current_pos.file ? current_pos.file->name : "<none>"; return cur_filename;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment