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:
Denys Vlasenko 2018-12-20 16:48:50 +01:00
parent 503faf9d53
commit 5acd14ba5b
2 changed files with 7 additions and 0 deletions

View File

@ -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);

View File

@ -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" \