hoc: don't nest calls to follow() when lexing ++/+= and --/-= (#287)
The code had a nested use of the follow() function that could cause +=+ and -=- to register as ++ and --. The first follow() to execute could consume a character and match and then the second follow() could consume another character and match. For example i-=-10 would result in a syntax error and i-=- would decrement i. (imported from plan9port commit f1dd3f065a97f57bf59db2e3284868e181734159)
This commit is contained in:
parent
c3779afdd6
commit
450ec696ee
|
@ -214,8 +214,8 @@ yylex(void) /* hoc6 */
|
||||||
return STRING;
|
return STRING;
|
||||||
}
|
}
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case '+': return follow('+', INC, follow('=', ADDEQ, '+'));
|
case '+': return follow('+', INC, '+') == INC ? INC : follow('=', ADDEQ, '+');
|
||||||
case '-': return follow('-', DEC, follow('=', SUBEQ, '-'));
|
case '-': return follow('-', DEC, '-') == DEC ? DEC : follow('=', SUBEQ, '-');
|
||||||
case '*': return follow('=', MULEQ, '*');
|
case '*': return follow('=', MULEQ, '*');
|
||||||
case '/': return follow('=', DIVEQ, '/');
|
case '/': return follow('=', DIVEQ, '/');
|
||||||
case '%': return follow('=', MODEQ, '%');
|
case '%': return follow('=', MODEQ, '%');
|
||||||
|
|
Loading…
Reference in a new issue