aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-12-24 14:14:23 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-12-24 14:14:23 +0100
commit69560f42da3deb5c87a9ccdbcaae26a5ff0cabaf (patch)
tree8c68c6cc0770e13b546a9c4bfb4d9aeaf030a38b /miscutils/bc.c
parentabf6cf67654425a7ede2f9c18e83f35c48cd67f8 (diff)
downloadbusybox-w32-69560f42da3deb5c87a9ccdbcaae26a5ff0cabaf.tar.gz
busybox-w32-69560f42da3deb5c87a9ccdbcaae26a5ff0cabaf.tar.bz2
busybox-w32-69560f42da3deb5c87a9ccdbcaae26a5ff0cabaf.zip
bc: rename several BC_LEX_OPs to XC_LEX_OPs.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to '')
-rw-r--r--miscutils/bc.c143
1 files changed, 72 insertions, 71 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 3ae88f1a5..f9d654afb 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -388,27 +388,27 @@ typedef struct BcInstPtr {
388 IF_BC(size_t results_len_before_call;) 388 IF_BC(size_t results_len_before_call;)
389} BcInstPtr; 389} BcInstPtr;
390 390
391// BC_LEX_NEG is not used in lexing; it is only for parsing. 391// XC_LEX_NEG is not used in lexing; it is only for parsing.
392typedef enum BcLexType { 392typedef enum BcLexType {
393 XC_LEX_EOF, 393 XC_LEX_EOF,
394 XC_LEX_INVALID, 394 XC_LEX_INVALID,
395 395
396 BC_LEX_1st_op, 396 XC_LEX_1st_op,
397 BC_LEX_NEG = BC_LEX_1st_op, // order 397 XC_LEX_NEG = XC_LEX_1st_op, // order
398 398
399 BC_LEX_OP_POWER, // should 399 XC_LEX_OP_POWER, // should
400 BC_LEX_OP_MULTIPLY, // match 400 XC_LEX_OP_MULTIPLY, // match
401 BC_LEX_OP_DIVIDE, // INST 401 XC_LEX_OP_DIVIDE, // INST
402 BC_LEX_OP_MODULUS, // constants 402 XC_LEX_OP_MODULUS, // constants
403 BC_LEX_OP_PLUS, // for 403 XC_LEX_OP_PLUS, // for
404 BC_LEX_OP_MINUS, // these 404 XC_LEX_OP_MINUS, // these
405 405
406 BC_LEX_OP_REL_EQ, // opeartions 406 XC_LEX_OP_REL_EQ, // opeartions
407 BC_LEX_OP_REL_LE, // | 407 XC_LEX_OP_REL_LE, // |
408 BC_LEX_OP_REL_GE, // | 408 XC_LEX_OP_REL_GE, // |
409 BC_LEX_OP_REL_NE, // | 409 XC_LEX_OP_REL_NE, // |
410 BC_LEX_OP_REL_LT, // | 410 XC_LEX_OP_REL_LT, // |
411 BC_LEX_OP_REL_GT, // | 411 XC_LEX_OP_REL_GT, // |
412 412
413 BC_LEX_OP_BOOL_NOT, // | 413 BC_LEX_OP_BOOL_NOT, // |
414 BC_LEX_OP_BOOL_OR, // | 414 BC_LEX_OP_BOOL_OR, // |
@@ -593,7 +593,7 @@ static ALWAYS_INLINE long bc_parse_exprs(unsigned i)
593} 593}
594 594
595// This is an array of data for operators that correspond to 595// This is an array of data for operators that correspond to
596// [BC_LEX_1st_op...BC_LEX_last_op] token types. 596// [XC_LEX_1st_op...] token types.
597static const uint8_t bc_parse_ops[] = { 597static const uint8_t bc_parse_ops[] = {
598#define OP(p,l) ((int)(l) * 0x10 + (p)) 598#define OP(p,l) ((int)(l) * 0x10 + (p))
599 OP(1, false), // neg 599 OP(1, false), // neg
@@ -617,18 +617,18 @@ static const //BcLexType - should be this type
617uint8_t 617uint8_t
618dc_char_to_LEX[] = { 618dc_char_to_LEX[] = {
619 /* %&'( */ 619 /* %&'( */
620 BC_LEX_OP_MODULUS, XC_LEX_INVALID, XC_LEX_INVALID, BC_LEX_LPAREN, 620 XC_LEX_OP_MODULUS, XC_LEX_INVALID, XC_LEX_INVALID, BC_LEX_LPAREN,
621 /* )*+, */ 621 /* )*+, */
622 XC_LEX_INVALID, BC_LEX_OP_MULTIPLY, BC_LEX_OP_PLUS, XC_LEX_INVALID, 622 XC_LEX_INVALID, XC_LEX_OP_MULTIPLY, XC_LEX_OP_PLUS, XC_LEX_INVALID,
623 /* -./ */ 623 /* -./ */
624 BC_LEX_OP_MINUS, XC_LEX_INVALID, BC_LEX_OP_DIVIDE, 624 XC_LEX_OP_MINUS, XC_LEX_INVALID, XC_LEX_OP_DIVIDE,
625 /* 0123456789 */ 625 /* 0123456789 */
626 XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, 626 XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID,
627 XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, 627 XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID,
628 XC_LEX_INVALID, XC_LEX_INVALID, 628 XC_LEX_INVALID, XC_LEX_INVALID,
629 /* :;<=>?@ */ 629 /* :;<=>?@ */
630 DC_LEX_COLON, BC_LEX_SCOLON, BC_LEX_OP_REL_GT, BC_LEX_OP_REL_EQ, 630 DC_LEX_COLON, BC_LEX_SCOLON, XC_LEX_OP_REL_GT, XC_LEX_OP_REL_EQ,
631 BC_LEX_OP_REL_LT, BC_LEX_KEY_READ, XC_LEX_INVALID, 631 XC_LEX_OP_REL_LT, BC_LEX_KEY_READ, XC_LEX_INVALID,
632 /* ABCDEFGH */ 632 /* ABCDEFGH */
633 XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, 633 XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID,
634 XC_LEX_INVALID, XC_LEX_INVALID, DC_LEX_EQ_NO_REG, XC_LEX_INVALID, 634 XC_LEX_INVALID, XC_LEX_INVALID, DC_LEX_EQ_NO_REG, XC_LEX_INVALID,
@@ -641,7 +641,7 @@ dc_char_to_LEX[] = {
641 /* Z[\] */ 641 /* Z[\] */
642 BC_LEX_KEY_LENGTH, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, 642 BC_LEX_KEY_LENGTH, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID,
643 /* ^_` */ 643 /* ^_` */
644 BC_LEX_OP_POWER, BC_LEX_NEG, XC_LEX_INVALID, 644 XC_LEX_OP_POWER, XC_LEX_NEG, XC_LEX_INVALID,
645 /* abcdefgh */ 645 /* abcdefgh */
646 DC_LEX_ASCIIFY, XC_LEX_INVALID, DC_LEX_CLEAR_STACK, DC_LEX_DUPLICATE, 646 DC_LEX_ASCIIFY, XC_LEX_INVALID, DC_LEX_CLEAR_STACK, DC_LEX_DUPLICATE,
647 DC_LEX_ELSE, DC_LEX_PRINT_STACK, XC_LEX_INVALID, XC_LEX_INVALID, 647 DC_LEX_ELSE, DC_LEX_PRINT_STACK, XC_LEX_INVALID, XC_LEX_INVALID,
@@ -660,7 +660,8 @@ static const //BcInst - should be this type. Using signed narrow type since DC_I
660int8_t 660int8_t
661dc_LEX_to_INST[] = { // (so many INVALIDs b/c dc parser does not generate these LEXs) // corresponding BC_LEX_xyz: 661dc_LEX_to_INST[] = { // (so many INVALIDs b/c dc parser does not generate these LEXs) // corresponding BC_LEX_xyz:
662 DC_INST_INVALID, DC_INST_INVALID, // EOF INVALID 662 DC_INST_INVALID, DC_INST_INVALID, // EOF INVALID
663 DC_INST_INVALID, XC_INST_POWER, XC_INST_MULTIPLY, XC_INST_DIVIDE, // NEG OP_POWER OP_MULTIPLY OP_DIVIDE 663 DC_INST_INVALID, // NEG
664 XC_INST_POWER, XC_INST_MULTIPLY, XC_INST_DIVIDE, // OP_POWER OP_MULTIPLY OP_DIVIDE
664 XC_INST_MODULUS, XC_INST_PLUS, XC_INST_MINUS, // OP_MODULUS OP_PLUS OP_MINUS 665 XC_INST_MODULUS, XC_INST_PLUS, XC_INST_MINUS, // OP_MODULUS OP_PLUS OP_MINUS
665 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // OP_REL_EQ OP_REL_LE OP_REL_GE OP_REL_NE 666 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // OP_REL_EQ OP_REL_LE OP_REL_GE OP_REL_NE
666 DC_INST_INVALID, DC_INST_INVALID, // OP_REL_LT OP_REL_GT 667 DC_INST_INVALID, DC_INST_INVALID, // OP_REL_LT OP_REL_GT
@@ -3159,7 +3160,7 @@ static BC_STATUS zbc_lex_token(BcLex *l)
3159 bc_lex_whitespace(l); 3160 bc_lex_whitespace(l);
3160 break; 3161 break;
3161 case '!': 3162 case '!':
3162 bc_lex_assign(l, BC_LEX_OP_REL_NE, BC_LEX_OP_BOOL_NOT); 3163 bc_lex_assign(l, XC_LEX_OP_REL_NE, BC_LEX_OP_BOOL_NOT);
3163 if (l->t.t == BC_LEX_OP_BOOL_NOT) { 3164 if (l->t.t == BC_LEX_OP_BOOL_NOT) {
3164 s = bc_POSIX_does_not_allow_bool_ops_this_is_bad("!"); 3165 s = bc_POSIX_does_not_allow_bool_ops_this_is_bad("!");
3165 IF_ERROR_RETURN_POSSIBLE(if (s) RETURN_STATUS(s)); 3166 IF_ERROR_RETURN_POSSIBLE(if (s) RETURN_STATUS(s));
@@ -3174,7 +3175,7 @@ static BC_STATUS zbc_lex_token(BcLex *l)
3174 bc_lex_lineComment(l); 3175 bc_lex_lineComment(l);
3175 break; 3176 break;
3176 case '%': 3177 case '%':
3177 bc_lex_assign(l, BC_LEX_OP_ASSIGN_MODULUS, BC_LEX_OP_MODULUS); 3178 bc_lex_assign(l, BC_LEX_OP_ASSIGN_MODULUS, XC_LEX_OP_MODULUS);
3178 break; 3179 break;
3179 case '&': 3180 case '&':
3180 c2 = l->buf[l->i]; 3181 c2 = l->buf[l->i];
@@ -3193,7 +3194,7 @@ static BC_STATUS zbc_lex_token(BcLex *l)
3193 l->t.t = (BcLexType)(c - '(' + BC_LEX_LPAREN); 3194 l->t.t = (BcLexType)(c - '(' + BC_LEX_LPAREN);
3194 break; 3195 break;
3195 case '*': 3196 case '*':
3196 bc_lex_assign(l, BC_LEX_OP_ASSIGN_MULTIPLY, BC_LEX_OP_MULTIPLY); 3197 bc_lex_assign(l, BC_LEX_OP_ASSIGN_MULTIPLY, XC_LEX_OP_MULTIPLY);
3197 break; 3198 break;
3198 case '+': 3199 case '+':
3199 c2 = l->buf[l->i]; 3200 c2 = l->buf[l->i];
@@ -3201,7 +3202,7 @@ static BC_STATUS zbc_lex_token(BcLex *l)
3201 ++l->i; 3202 ++l->i;
3202 l->t.t = BC_LEX_OP_INC; 3203 l->t.t = BC_LEX_OP_INC;
3203 } else 3204 } else
3204 bc_lex_assign(l, BC_LEX_OP_ASSIGN_PLUS, BC_LEX_OP_PLUS); 3205 bc_lex_assign(l, BC_LEX_OP_ASSIGN_PLUS, XC_LEX_OP_PLUS);
3205 break; 3206 break;
3206 case ',': 3207 case ',':
3207 l->t.t = BC_LEX_COMMA; 3208 l->t.t = BC_LEX_COMMA;
@@ -3212,7 +3213,7 @@ static BC_STATUS zbc_lex_token(BcLex *l)
3212 ++l->i; 3213 ++l->i;
3213 l->t.t = BC_LEX_OP_DEC; 3214 l->t.t = BC_LEX_OP_DEC;
3214 } else 3215 } else
3215 bc_lex_assign(l, BC_LEX_OP_ASSIGN_MINUS, BC_LEX_OP_MINUS); 3216 bc_lex_assign(l, BC_LEX_OP_ASSIGN_MINUS, XC_LEX_OP_MINUS);
3216 break; 3217 break;
3217 case '.': 3218 case '.':
3218 if (isdigit(l->buf[l->i])) 3219 if (isdigit(l->buf[l->i]))
@@ -3227,7 +3228,7 @@ static BC_STATUS zbc_lex_token(BcLex *l)
3227 if (c2 == '*') 3228 if (c2 == '*')
3228 s = zbc_lex_comment(l); 3229 s = zbc_lex_comment(l);
3229 else 3230 else
3230 bc_lex_assign(l, BC_LEX_OP_ASSIGN_DIVIDE, BC_LEX_OP_DIVIDE); 3231 bc_lex_assign(l, BC_LEX_OP_ASSIGN_DIVIDE, XC_LEX_OP_DIVIDE);
3231 break; 3232 break;
3232 case '0': 3233 case '0':
3233 case '1': 3234 case '1':
@@ -3251,13 +3252,13 @@ static BC_STATUS zbc_lex_token(BcLex *l)
3251 l->t.t = BC_LEX_SCOLON; 3252 l->t.t = BC_LEX_SCOLON;
3252 break; 3253 break;
3253 case '<': 3254 case '<':
3254 bc_lex_assign(l, BC_LEX_OP_REL_LE, BC_LEX_OP_REL_LT); 3255 bc_lex_assign(l, XC_LEX_OP_REL_LE, XC_LEX_OP_REL_LT);
3255 break; 3256 break;
3256 case '=': 3257 case '=':
3257 bc_lex_assign(l, BC_LEX_OP_REL_EQ, BC_LEX_OP_ASSIGN); 3258 bc_lex_assign(l, XC_LEX_OP_REL_EQ, BC_LEX_OP_ASSIGN);
3258 break; 3259 break;
3259 case '>': 3260 case '>':
3260 bc_lex_assign(l, BC_LEX_OP_REL_GE, BC_LEX_OP_REL_GT); 3261 bc_lex_assign(l, XC_LEX_OP_REL_GE, XC_LEX_OP_REL_GT);
3261 break; 3262 break;
3262 case '[': 3263 case '[':
3263 case ']': 3264 case ']':
@@ -3271,7 +3272,7 @@ static BC_STATUS zbc_lex_token(BcLex *l)
3271 s = bc_error_bad_character(c); 3272 s = bc_error_bad_character(c);
3272 break; 3273 break;
3273 case '^': 3274 case '^':
3274 bc_lex_assign(l, BC_LEX_OP_ASSIGN_POWER, BC_LEX_OP_POWER); 3275 bc_lex_assign(l, BC_LEX_OP_ASSIGN_POWER, XC_LEX_OP_POWER);
3275 break; 3276 break;
3276 case 'a': 3277 case 'a':
3277 case 'b': 3278 case 'b':
@@ -3395,8 +3396,8 @@ static BC_STATUS zdc_lex_token(BcLex *l)
3395 static const //BcLexType - should be this type, but narrower type saves size: 3396 static const //BcLexType - should be this type, but narrower type saves size:
3396 uint8_t 3397 uint8_t
3397 dc_lex_regs[] = { 3398 dc_lex_regs[] = {
3398 BC_LEX_OP_REL_EQ, BC_LEX_OP_REL_LE, BC_LEX_OP_REL_GE, BC_LEX_OP_REL_NE, 3399 XC_LEX_OP_REL_EQ, XC_LEX_OP_REL_LE, XC_LEX_OP_REL_GE, XC_LEX_OP_REL_NE,
3399 BC_LEX_OP_REL_LT, BC_LEX_OP_REL_GT, BC_LEX_SCOLON, DC_LEX_COLON, 3400 XC_LEX_OP_REL_LT, XC_LEX_OP_REL_GT, BC_LEX_SCOLON, DC_LEX_COLON,
3400 DC_LEX_ELSE, DC_LEX_LOAD, DC_LEX_LOAD_POP, BC_LEX_OP_ASSIGN, 3401 DC_LEX_ELSE, DC_LEX_LOAD, DC_LEX_LOAD_POP, BC_LEX_OP_ASSIGN,
3401 DC_LEX_STORE_PUSH, 3402 DC_LEX_STORE_PUSH,
3402 }; 3403 };
@@ -3446,11 +3447,11 @@ static BC_STATUS zdc_lex_token(BcLex *l)
3446 case '!': 3447 case '!':
3447 c2 = l->buf[l->i]; 3448 c2 = l->buf[l->i];
3448 if (c2 == '=') 3449 if (c2 == '=')
3449 l->t.t = BC_LEX_OP_REL_NE; 3450 l->t.t = XC_LEX_OP_REL_NE;
3450 else if (c2 == '<') 3451 else if (c2 == '<')
3451 l->t.t = BC_LEX_OP_REL_LE; 3452 l->t.t = XC_LEX_OP_REL_LE;
3452 else if (c2 == '>') 3453 else if (c2 == '>')
3453 l->t.t = BC_LEX_OP_REL_GE; 3454 l->t.t = XC_LEX_OP_REL_GE;
3454 else 3455 else
3455 RETURN_STATUS(bc_error_bad_character(c)); 3456 RETURN_STATUS(bc_error_bad_character(c));
3456 ++l->i; 3457 ++l->i;
@@ -3686,7 +3687,7 @@ static size_t bc_program_addFunc(char *name)
3686// We can calculate the conversion between tokens and exprs by subtracting the 3687// We can calculate the conversion between tokens and exprs by subtracting the
3687// position of the first operator in the lex enum and adding the position of the 3688// position of the first operator in the lex enum and adding the position of the
3688// first in the expr enum. Note: This only works for binary operators. 3689// first in the expr enum. Note: This only works for binary operators.
3689#define BC_TOKEN_2_INST(t) ((char) ((t) - BC_LEX_OP_POWER + XC_INST_POWER)) 3690#define BC_TOKEN_2_INST(t) ((char) ((t) - XC_LEX_OP_POWER + XC_INST_POWER))
3690 3691
3691static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags); 3692static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags);
3692 3693
@@ -3726,19 +3727,19 @@ static BC_STATUS zbc_parse_stmt_allow_NLINE_before(BcParse *p, const char *after
3726static void bc_parse_operator(BcParse *p, BcLexType type, size_t start, 3727static void bc_parse_operator(BcParse *p, BcLexType type, size_t start,
3727 size_t *nexprs) 3728 size_t *nexprs)
3728{ 3729{
3729 char l, r = bc_parse_op_PREC(type - BC_LEX_1st_op); 3730 char l, r = bc_parse_op_PREC(type - XC_LEX_1st_op);
3730 bool left = bc_parse_op_LEFT(type - BC_LEX_1st_op); 3731 bool left = bc_parse_op_LEFT(type - XC_LEX_1st_op);
3731 3732
3732 while (p->ops.len > start) { 3733 while (p->ops.len > start) {
3733 BcLexType t = BC_PARSE_TOP_OP(p); 3734 BcLexType t = BC_PARSE_TOP_OP(p);
3734 if (t == BC_LEX_LPAREN) break; 3735 if (t == BC_LEX_LPAREN) break;
3735 3736
3736 l = bc_parse_op_PREC(t - BC_LEX_1st_op); 3737 l = bc_parse_op_PREC(t - XC_LEX_1st_op);
3737 if (l >= r && (l != r || !left)) break; 3738 if (l >= r && (l != r || !left)) break;
3738 3739
3739 bc_parse_push(p, BC_TOKEN_2_INST(t)); 3740 bc_parse_push(p, BC_TOKEN_2_INST(t));
3740 bc_vec_pop(&p->ops); 3741 bc_vec_pop(&p->ops);
3741 *nexprs -= (t != BC_LEX_OP_BOOL_NOT && t != BC_LEX_NEG); 3742 *nexprs -= (t != BC_LEX_OP_BOOL_NOT && t != XC_LEX_NEG);
3742 } 3743 }
3743 3744
3744 bc_vec_push(&p->ops, &type); 3745 bc_vec_push(&p->ops, &type);
@@ -3756,7 +3757,7 @@ static BC_STATUS zbc_parse_rightParen(BcParse *p, size_t ops_bgn, size_t *nexs)
3756 bc_parse_push(p, BC_TOKEN_2_INST(top)); 3757 bc_parse_push(p, BC_TOKEN_2_INST(top));
3757 3758
3758 bc_vec_pop(&p->ops); 3759 bc_vec_pop(&p->ops);
3759 *nexs -= (top != BC_LEX_OP_BOOL_NOT && top != BC_LEX_NEG); 3760 *nexs -= (top != BC_LEX_OP_BOOL_NOT && top != XC_LEX_NEG);
3760 3761
3761 if (p->ops.len <= ops_bgn) 3762 if (p->ops.len <= ops_bgn)
3762 RETURN_STATUS(bc_error_bad_expression()); 3763 RETURN_STATUS(bc_error_bad_expression());
@@ -4032,13 +4033,13 @@ static BC_STATUS zbc_parse_minus(BcParse *p, BcInst *prev, size_t ops_bgn,
4032 4033
4033 type = rparen || etype == BC_INST_INC_POST || etype == BC_INST_DEC_POST || 4034 type = rparen || etype == BC_INST_INC_POST || etype == BC_INST_DEC_POST ||
4034 (etype >= XC_INST_NUM && etype <= XC_INST_SQRT) ? 4035 (etype >= XC_INST_NUM && etype <= XC_INST_SQRT) ?
4035 BC_LEX_OP_MINUS : 4036 XC_LEX_OP_MINUS :
4036 BC_LEX_NEG; 4037 XC_LEX_NEG;
4037 *prev = BC_TOKEN_2_INST(type); 4038 *prev = BC_TOKEN_2_INST(type);
4038 4039
4039 // We can just push onto the op stack because this is the largest 4040 // We can just push onto the op stack because this is the largest
4040 // precedence operator that gets pushed. Inc/dec does not. 4041 // precedence operator that gets pushed. Inc/dec does not.
4041 if (type != BC_LEX_OP_MINUS) 4042 if (type != XC_LEX_OP_MINUS)
4042 bc_vec_push(&p->ops, &type); 4043 bc_vec_push(&p->ops, &type);
4043 else 4044 else
4044 bc_parse_operator(p, type, ops_bgn, nexprs); 4045 bc_parse_operator(p, type, ops_bgn, nexprs);
@@ -4523,9 +4524,9 @@ static BC_STATUS zbc_parse_stmt_possibly_auto(BcParse *p, bool auto_allowed)
4523 4524
4524 dbg_lex("%s:%d p->l.t.t:%d", __func__, __LINE__, p->l.t.t); 4525 dbg_lex("%s:%d p->l.t.t:%d", __func__, __LINE__, p->l.t.t);
4525 switch (p->l.t.t) { 4526 switch (p->l.t.t) {
4527 case XC_LEX_OP_MINUS:
4526 case BC_LEX_OP_INC: 4528 case BC_LEX_OP_INC:
4527 case BC_LEX_OP_DEC: 4529 case BC_LEX_OP_DEC:
4528 case BC_LEX_OP_MINUS:
4529 case BC_LEX_OP_BOOL_NOT: 4530 case BC_LEX_OP_BOOL_NOT:
4530 case BC_LEX_LPAREN: 4531 case BC_LEX_LPAREN:
4531 case BC_LEX_NAME: 4532 case BC_LEX_NAME:
@@ -4642,7 +4643,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4642 s = zbc_parse_incdec(p, &prev, &paren_expr, &nexprs, flags); 4643 s = zbc_parse_incdec(p, &prev, &paren_expr, &nexprs, flags);
4643 rprn = get_token = bin_last = false; 4644 rprn = get_token = bin_last = false;
4644 break; 4645 break;
4645 case BC_LEX_OP_MINUS: 4646 case XC_LEX_OP_MINUS:
4646 s = zbc_parse_minus(p, &prev, ops_bgn, rprn, &nexprs); 4647 s = zbc_parse_minus(p, &prev, ops_bgn, rprn, &nexprs);
4647 rprn = get_token = false; 4648 rprn = get_token = false;
4648 bin_last = prev == XC_INST_MINUS; 4649 bin_last = prev == XC_INST_MINUS;
@@ -4665,17 +4666,17 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4665 break; 4666 break;
4666 } 4667 }
4667 // Fallthrough. 4668 // Fallthrough.
4668 case BC_LEX_OP_POWER: 4669 case XC_LEX_OP_POWER:
4669 case BC_LEX_OP_MULTIPLY: 4670 case XC_LEX_OP_MULTIPLY:
4670 case BC_LEX_OP_DIVIDE: 4671 case XC_LEX_OP_DIVIDE:
4671 case BC_LEX_OP_MODULUS: 4672 case XC_LEX_OP_MODULUS:
4672 case BC_LEX_OP_PLUS: 4673 case XC_LEX_OP_PLUS:
4673 case BC_LEX_OP_REL_EQ: 4674 case XC_LEX_OP_REL_EQ:
4674 case BC_LEX_OP_REL_LE: 4675 case XC_LEX_OP_REL_LE:
4675 case BC_LEX_OP_REL_GE: 4676 case XC_LEX_OP_REL_GE:
4676 case BC_LEX_OP_REL_NE: 4677 case XC_LEX_OP_REL_NE:
4677 case BC_LEX_OP_REL_LT: 4678 case XC_LEX_OP_REL_LT:
4678 case BC_LEX_OP_REL_GT: 4679 case XC_LEX_OP_REL_GT:
4679 case BC_LEX_OP_BOOL_NOT: 4680 case BC_LEX_OP_BOOL_NOT:
4680 case BC_LEX_OP_BOOL_OR: 4681 case BC_LEX_OP_BOOL_OR:
4681 case BC_LEX_OP_BOOL_AND: 4682 case BC_LEX_OP_BOOL_AND:
@@ -4684,12 +4685,12 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4684 ) { 4685 ) {
4685 return bc_error_bad_expression(); 4686 return bc_error_bad_expression();
4686 } 4687 }
4687 nrelops += t >= BC_LEX_OP_REL_EQ && t <= BC_LEX_OP_REL_GT; 4688 nrelops += (t >= XC_LEX_OP_REL_EQ && t <= XC_LEX_OP_REL_GT);
4688 prev = BC_TOKEN_2_INST(t); 4689 prev = BC_TOKEN_2_INST(t);
4689 bc_parse_operator(p, t, ops_bgn, &nexprs); 4690 bc_parse_operator(p, t, ops_bgn, &nexprs);
4690 s = zbc_lex_next(&p->l); 4691 s = zbc_lex_next(&p->l);
4691 rprn = get_token = false; 4692 rprn = get_token = false;
4692 bin_last = t != BC_LEX_OP_BOOL_NOT; 4693 bin_last = (t != BC_LEX_OP_BOOL_NOT);
4693 break; 4694 break;
4694 case BC_LEX_LPAREN: 4695 case BC_LEX_LPAREN:
4695 if (BC_PARSE_LEAF(prev, rprn)) 4696 if (BC_PARSE_LEAF(prev, rprn))
@@ -4793,7 +4794,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4793 4794
4794 bc_parse_push(p, BC_TOKEN_2_INST(top)); 4795 bc_parse_push(p, BC_TOKEN_2_INST(top));
4795 4796
4796 nexprs -= (top != BC_LEX_OP_BOOL_NOT && top != BC_LEX_NEG); 4797 nexprs -= (top != BC_LEX_OP_BOOL_NOT && top != XC_LEX_NEG);
4797 bc_vec_pop(&p->ops); 4798 bc_vec_pop(&p->ops);
4798 } 4799 }
4799 4800
@@ -4912,14 +4913,14 @@ static BC_STATUS zdc_parse_token(BcParse *p, BcLexType t)
4912 s = BC_STATUS_SUCCESS; 4913 s = BC_STATUS_SUCCESS;
4913 get_token = true; 4914 get_token = true;
4914 switch (t) { 4915 switch (t) {
4915 case BC_LEX_OP_REL_EQ: 4916 case XC_LEX_OP_REL_EQ:
4916 case BC_LEX_OP_REL_LE: 4917 case XC_LEX_OP_REL_LE:
4917 case BC_LEX_OP_REL_GE: 4918 case XC_LEX_OP_REL_GE:
4918 case BC_LEX_OP_REL_NE: 4919 case XC_LEX_OP_REL_NE:
4919 case BC_LEX_OP_REL_LT: 4920 case XC_LEX_OP_REL_LT:
4920 case BC_LEX_OP_REL_GT: 4921 case XC_LEX_OP_REL_GT:
4921 dbg_lex("%s:%d LEX_OP_REL_xyz", __func__, __LINE__); 4922 dbg_lex("%s:%d LEX_OP_REL_xyz", __func__, __LINE__);
4922 s = zdc_parse_cond(p, t - BC_LEX_OP_REL_EQ + XC_INST_REL_EQ); 4923 s = zdc_parse_cond(p, t - XC_LEX_OP_REL_EQ + XC_INST_REL_EQ);
4923 get_token = false; 4924 get_token = false;
4924 break; 4925 break;
4925 case BC_LEX_SCOLON: 4926 case BC_LEX_SCOLON:
@@ -4931,7 +4932,7 @@ static BC_STATUS zdc_parse_token(BcParse *p, BcLexType t)
4931 dbg_lex("%s:%d LEX_STR", __func__, __LINE__); 4932 dbg_lex("%s:%d LEX_STR", __func__, __LINE__);
4932 dc_parse_string(p); 4933 dc_parse_string(p);
4933 break; 4934 break;
4934 case BC_LEX_NEG: 4935 case XC_LEX_NEG:
4935 dbg_lex("%s:%d LEX_NEG", __func__, __LINE__); 4936 dbg_lex("%s:%d LEX_NEG", __func__, __LINE__);
4936 s = zbc_lex_next(&p->l); 4937 s = zbc_lex_next(&p->l);
4937 if (s) RETURN_STATUS(s); 4938 if (s) RETURN_STATUS(s);