]> granicus.if.org Git - re2c/commit
Lexer: glued together two variables with almost identical functionality.
authorUlya Trofimovich <skvadrik@gmail.com>
Wed, 12 Aug 2015 16:39:21 +0000 (17:39 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Wed, 12 Aug 2015 17:42:17 +0000 (18:42 +0100)
commit4fcbf6db3e7b7b770133273be325799fb935ae01
tree3d35adc81e0770f92badf54dee6d32cf82743ad1
parent79411974da8e39514ab53bad9987f878100fa795
Lexer: glued together two variables with almost identical functionality.

These two variables ('ScannerState' class member 'cur' and local variable
'cursor') both played the role of YYCURSOR: YYCURSOR was defined to
'cursor', but the code had to adjust 'cur' to 'cursor' on every return
and restore it when reentering lexing procedures.

There was only two obscure places in which they were not completely
syncronized. Both looked the same:

    cur = ptr > tok ? ptr - 1 : cursor;

However, 'ptr' is effectively YYMARKER and is never changed manually
by lexing procedures; 'tok' should point to the beginning of current
lexeme; this check doesn't make sense to me. This is an attempt to
resume lexing one character before YYMARKER, but what for? YYMARKER
isn't even used in Scanner::scan (look at the the generated code),
so 'ptr > tok' is always false.

This check is present since the initial commit, so I cannot trace back
it's origin.

As it doesn't break any tests I hereby simply remove it.
re2c/bootstrap/src/parse/scanner_lex.cc
re2c/src/parse/scanner.cc
re2c/src/parse/scanner.h
re2c/src/parse/scanner_lex.re