mirror of
https://github.com/dgibson/dtc.git
synced 2025-10-13 16:27:39 -04:00
dtc: Cleanup line number tracking, add column number tracking
Our YYLTYPE current carries around first and last line and first and last column information. However, of these, on the first line information is actually filled in properly. Furthermore, filling in the line number information from yylineno is kind of clunky: we have to copy its value to the srcfile stack and back to handle include file positioning correctly. This patch cleans this up. We turn off flex's yylineno option and instead track the line and column number ourselves from YY_USER_ACTION. The line and column number are stored directly inside the srcfile_state structure, so it's automatically a per-file quantity. We now also fill in all the yylloc from YY_USER_ACTION. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
d68cb36b0b
commit
728c5e87c6
3 changed files with 38 additions and 9 deletions
11
dtc-lexer.l
11
dtc-lexer.l
|
@ -18,7 +18,7 @@
|
|||
* USA
|
||||
*/
|
||||
|
||||
%option noyywrap nounput noinput yylineno
|
||||
%option noyywrap nounput noinput
|
||||
|
||||
%x INCLUDE
|
||||
%x BYTESTRING
|
||||
|
@ -38,10 +38,11 @@ LINECOMMENT "//".*\n
|
|||
#include "srcpos.h"
|
||||
#include "dtc-parser.tab.h"
|
||||
|
||||
|
||||
/* CAUTION: this will stop working if we ever use yyless() or yyunput() */
|
||||
#define YY_USER_ACTION \
|
||||
{ \
|
||||
yylloc.file = current_srcfile; \
|
||||
yylloc.first_line = yylineno; \
|
||||
srcpos_update(&yylloc, yytext, yyleng); \
|
||||
}
|
||||
|
||||
/*#define LEXDEBUG 1*/
|
||||
|
@ -169,12 +170,9 @@ static void push_input_file(const char *filename)
|
|||
{
|
||||
assert(filename);
|
||||
|
||||
current_srcfile->lineno = yylineno;
|
||||
|
||||
srcfile_push(filename);
|
||||
|
||||
yyin = current_srcfile->f;
|
||||
yylineno = 1;
|
||||
|
||||
yypush_buffer_state(yy_create_buffer(yyin, YY_BUF_SIZE));
|
||||
}
|
||||
|
@ -186,7 +184,6 @@ static int pop_input_file(void)
|
|||
return 0;
|
||||
|
||||
yypop_buffer_state();
|
||||
yylineno = current_srcfile->lineno;
|
||||
yyin = current_srcfile->f;
|
||||
|
||||
return 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue