bc: fix keyword matching to not think "ifz" is the "if" keyword
function old new delta zbc_lex_next 2224 2225 +1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
503faf9d53
commit
5acd14ba5b
@ -2950,6 +2950,8 @@ static BC_STATUS zbc_lex_identifier(BcLex *l)
|
|||||||
continue;
|
continue;
|
||||||
match:
|
match:
|
||||||
// buf starts with keyword bc_lex_kws[i]
|
// buf starts with keyword bc_lex_kws[i]
|
||||||
|
if (isalnum(buf[j]) || buf[j]=='_')
|
||||||
|
continue; // "ifz" does not match "if" keyword, "if." does
|
||||||
l->t.t = BC_LEX_KEY_1st_keyword + i;
|
l->t.t = BC_LEX_KEY_1st_keyword + i;
|
||||||
if (!bc_lex_kws_POSIX(i)) {
|
if (!bc_lex_kws_POSIX(i)) {
|
||||||
s = bc_posix_error_fmt("%sthe '%.8s' keyword", "POSIX does not allow ", bc_lex_kws[i].name8);
|
s = bc_posix_error_fmt("%sthe '%.8s' keyword", "POSIX does not allow ", bc_lex_kws[i].name8);
|
||||||
|
@ -76,6 +76,11 @@ testing "bc while(cond)<NL>" \
|
|||||||
"8\n7\n6\n5\n4\n3\n2\n1\n9\n" \
|
"8\n7\n6\n5\n4\n3\n2\n1\n9\n" \
|
||||||
"" "i=9;while(--i)\ni\n9"
|
"" "i=9;while(--i)\ni\n9"
|
||||||
|
|
||||||
|
testing "bc ifz does not match if keyword" \
|
||||||
|
"bc" \
|
||||||
|
"1\n2\n2\n3\n" \
|
||||||
|
"" "ifz=1;ifz\n++ifz;ifz++\nifz"
|
||||||
|
|
||||||
testing "bc print 1,2,3" \
|
testing "bc print 1,2,3" \
|
||||||
"bc" \
|
"bc" \
|
||||||
"123" \
|
"123" \
|
||||||
|
Loading…
Reference in New Issue
Block a user