aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-12-24 15:00:56 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-12-24 15:00:56 +0100
commit9d9c97efbdc0f30851a5e56398c371d4171df34e (patch)
tree3931708427d15aabb41b36198f0adb17f6dc1a7e /miscutils/bc.c
parent69560f42da3deb5c87a9ccdbcaae26a5ff0cabaf (diff)
downloadbusybox-w32-9d9c97efbdc0f30851a5e56398c371d4171df34e.tar.gz
busybox-w32-9d9c97efbdc0f30851a5e56398c371d4171df34e.tar.bz2
busybox-w32-9d9c97efbdc0f30851a5e56398c371d4171df34e.zip
bc: separate many bc and dc LEX constants
function old new delta zdc_parse_expr 510 516 +6 bc_parse_expr_empty_ok 1963 1966 +3 dc_LEX_to_INST 83 56 -27 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 9/-27) Total: -18 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to '')
-rw-r--r--miscutils/bc.c118
1 files changed, 69 insertions, 49 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index f9d654afb..a67cfbfcd 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -260,7 +260,7 @@ typedef enum BcInst {
260 XC_INST_PLUS, // for 260 XC_INST_PLUS, // for
261 XC_INST_MINUS, // these 261 XC_INST_MINUS, // these
262 262
263 XC_INST_REL_EQ, // opeartions 263 XC_INST_REL_EQ, // operations
264 XC_INST_REL_LE, // | 264 XC_INST_REL_LE, // |
265 XC_INST_REL_GE, // | 265 XC_INST_REL_GE, // |
266 XC_INST_REL_NE, // | 266 XC_INST_REL_NE, // |
@@ -388,11 +388,16 @@ 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// XC_LEX_NEG is not used in lexing; it is only for parsing.
392typedef enum BcLexType { 391typedef enum BcLexType {
393 XC_LEX_EOF, 392 XC_LEX_EOF,
394 XC_LEX_INVALID, 393 XC_LEX_INVALID,
395 394
395 BC_LEX_NLINE,
396 BC_LEX_WHITESPACE,
397 BC_LEX_STR,
398 BC_LEX_NAME,
399 BC_LEX_NUMBER,
400
396 XC_LEX_1st_op, 401 XC_LEX_1st_op,
397 XC_LEX_NEG = XC_LEX_1st_op, // order 402 XC_LEX_NEG = XC_LEX_1st_op, // order
398 403
@@ -403,13 +408,14 @@ typedef enum BcLexType {
403 XC_LEX_OP_PLUS, // for 408 XC_LEX_OP_PLUS, // for
404 XC_LEX_OP_MINUS, // these 409 XC_LEX_OP_MINUS, // these
405 410
406 XC_LEX_OP_REL_EQ, // opeartions 411 XC_LEX_OP_REL_EQ, // operations
407 XC_LEX_OP_REL_LE, // | 412 XC_LEX_OP_REL_LE, // |
408 XC_LEX_OP_REL_GE, // | 413 XC_LEX_OP_REL_GE, // |
409 XC_LEX_OP_REL_NE, // | 414 XC_LEX_OP_REL_NE, // |
410 XC_LEX_OP_REL_LT, // | 415 XC_LEX_OP_REL_LT, // |
411 XC_LEX_OP_REL_GT, // | 416 XC_LEX_OP_REL_GT, // |
412 417 XC_LEX_OP_last = XC_LEX_OP_REL_GT,
418#if ENABLE_BC
413 BC_LEX_OP_BOOL_NOT, // | 419 BC_LEX_OP_BOOL_NOT, // |
414 BC_LEX_OP_BOOL_OR, // | 420 BC_LEX_OP_BOOL_OR, // |
415 BC_LEX_OP_BOOL_AND, // | 421 BC_LEX_OP_BOOL_AND, // |
@@ -426,9 +432,6 @@ typedef enum BcLexType {
426 BC_LEX_OP_INC, 432 BC_LEX_OP_INC,
427 BC_LEX_OP_DEC, 433 BC_LEX_OP_DEC,
428 434
429 BC_LEX_NLINE,
430 BC_LEX_WHITESPACE,
431
432 BC_LEX_LPAREN, 435 BC_LEX_LPAREN,
433 BC_LEX_RPAREN, 436 BC_LEX_RPAREN,
434 437
@@ -440,10 +443,6 @@ typedef enum BcLexType {
440 BC_LEX_SCOLON, 443 BC_LEX_SCOLON,
441 BC_LEX_RBRACE, // should be LBRACE+2: code uses (c - '{' + BC_LEX_LBRACE) 444 BC_LEX_RBRACE, // should be LBRACE+2: code uses (c - '{' + BC_LEX_LBRACE)
442 445
443 BC_LEX_STR,
444 BC_LEX_NAME,
445 BC_LEX_NUMBER,
446
447 BC_LEX_KEY_1st_keyword, 446 BC_LEX_KEY_1st_keyword,
448 BC_LEX_KEY_AUTO = BC_LEX_KEY_1st_keyword, 447 BC_LEX_KEY_AUTO = BC_LEX_KEY_1st_keyword,
449 BC_LEX_KEY_BREAK, 448 BC_LEX_KEY_BREAK,
@@ -466,8 +465,24 @@ typedef enum BcLexType {
466 BC_LEX_KEY_SCALE, 465 BC_LEX_KEY_SCALE,
467 BC_LEX_KEY_SQRT, 466 BC_LEX_KEY_SQRT,
468 BC_LEX_KEY_WHILE, 467 BC_LEX_KEY_WHILE,
468#endif // ENABLE_BC
469 469
470#if ENABLE_DC 470#if ENABLE_DC
471 DC_LEX_OP_BOOL_NOT = XC_LEX_OP_last + 1,
472 DC_LEX_OP_ASSIGN,
473
474 DC_LEX_LPAREN,
475 DC_LEX_SCOLON,
476 DC_LEX_READ,
477 DC_LEX_IBASE,
478 DC_LEX_SCALE,
479 DC_LEX_OBASE,
480 DC_LEX_LENGTH,
481 DC_LEX_PRINT,
482 DC_LEX_QUIT,
483 DC_LEX_SQRT,
484 DC_LEX_LBRACE,
485
471 DC_LEX_EQ_NO_REG, 486 DC_LEX_EQ_NO_REG,
472 DC_LEX_OP_MODEXP, 487 DC_LEX_OP_MODEXP,
473 DC_LEX_OP_DIVMOD, 488 DC_LEX_OP_DIVMOD,
@@ -566,11 +581,11 @@ enum {
566#define EXBITS(a,b,c,d,e,f,g,h) \ 581#define EXBITS(a,b,c,d,e,f,g,h) \
567 ((uint64_t)((a << 0)+(b << 1)+(c << 2)+(d << 3)+(e << 4)+(f << 5)+(g << 6)+(h << 7))) 582 ((uint64_t)((a << 0)+(b << 1)+(c << 2)+(d << 3)+(e << 4)+(f << 5)+(g << 6)+(h << 7)))
568 BC_PARSE_EXPRS_BITS = 0 // corresponding BC_LEX_xyz: 583 BC_PARSE_EXPRS_BITS = 0 // corresponding BC_LEX_xyz:
569 + (EXBITS(0,0,1,1,1,1,1,1) << (0*8)) // 0: eof inval - ^ * / % + 584 + (EXBITS(0,0,0,0,0,1,1,1) << (0*8)) // 0: EOF INVAL NL WS STR NAME NUM -
570 + (EXBITS(1,1,1,1,1,1,1,1) << (1*8)) // 8: - == <= >= != < > ! 585 + (EXBITS(1,1,1,1,1,1,1,1) << (1*8)) // 8: ^ * / % + - == <=
571 + (EXBITS(1,1,1,1,1,1,1,1) << (2*8)) // 16: || && ^= *= /= %= += -= 586 + (EXBITS(1,1,1,1,1,1,1,1) << (2*8)) // 16: >= != < > ! || && ^=
572 + (EXBITS(1,1,1,0,0,1,1,0) << (3*8)) // 24: = ++ -- NL WS ( ) [ 587 + (EXBITS(1,1,1,1,1,1,1,1) << (3*8)) // 24: *= /= %= += -= = ++ --
573 + (EXBITS(0,0,0,0,0,0,1,1) << (4*8)) // 32: , ] { ; } STR NAME NUM 588 + (EXBITS(1,1,0,0,0,0,0,0) << (4*8)) // 32: ( ) [ , ] { ; }
574 + (EXBITS(0,0,0,0,0,0,0,1) << (5*8)) // 40: auto break cont define else for halt ibase 589 + (EXBITS(0,0,0,0,0,0,0,1) << (5*8)) // 40: auto break cont define else for halt ibase
575 + (EXBITS(1,0,1,1,0,0,0,1) << (6*8)) // 48: obase if last length limits print quit read 590 + (EXBITS(1,0,1,1,0,0,0,1) << (6*8)) // 48: obase if last length limits print quit read
576 + (EXBITS(0,1,1,0,0,0,0,0) << (7*8)) // 56: return scale sqrt while 591 + (EXBITS(0,1,1,0,0,0,0,0) << (7*8)) // 56: return scale sqrt while
@@ -617,7 +632,7 @@ static const //BcLexType - should be this type
617uint8_t 632uint8_t
618dc_char_to_LEX[] = { 633dc_char_to_LEX[] = {
619 /* %&'( */ 634 /* %&'( */
620 XC_LEX_OP_MODULUS, XC_LEX_INVALID, XC_LEX_INVALID, BC_LEX_LPAREN, 635 XC_LEX_OP_MODULUS, XC_LEX_INVALID, XC_LEX_INVALID, DC_LEX_LPAREN,
621 /* )*+, */ 636 /* )*+, */
622 XC_LEX_INVALID, XC_LEX_OP_MULTIPLY, XC_LEX_OP_PLUS, XC_LEX_INVALID, 637 XC_LEX_INVALID, XC_LEX_OP_MULTIPLY, XC_LEX_OP_PLUS, XC_LEX_INVALID,
623 /* -./ */ 638 /* -./ */
@@ -627,19 +642,19 @@ dc_char_to_LEX[] = {
627 XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, 642 XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID,
628 XC_LEX_INVALID, XC_LEX_INVALID, 643 XC_LEX_INVALID, XC_LEX_INVALID,
629 /* :;<=>?@ */ 644 /* :;<=>?@ */
630 DC_LEX_COLON, BC_LEX_SCOLON, XC_LEX_OP_REL_GT, XC_LEX_OP_REL_EQ, 645 DC_LEX_COLON, DC_LEX_SCOLON, XC_LEX_OP_REL_GT, XC_LEX_OP_REL_EQ,
631 XC_LEX_OP_REL_LT, BC_LEX_KEY_READ, XC_LEX_INVALID, 646 XC_LEX_OP_REL_LT, DC_LEX_READ, XC_LEX_INVALID,
632 /* ABCDEFGH */ 647 /* ABCDEFGH */
633 XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, 648 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, 649 XC_LEX_INVALID, XC_LEX_INVALID, DC_LEX_EQ_NO_REG, XC_LEX_INVALID,
635 /* IJKLMNOP */ 650 /* IJKLMNOP */
636 BC_LEX_KEY_IBASE, XC_LEX_INVALID, BC_LEX_KEY_SCALE, DC_LEX_LOAD_POP, 651 DC_LEX_IBASE, XC_LEX_INVALID, DC_LEX_SCALE, DC_LEX_LOAD_POP,
637 XC_LEX_INVALID, BC_LEX_OP_BOOL_NOT, BC_LEX_KEY_OBASE, DC_LEX_PRINT_STREAM, 652 XC_LEX_INVALID, DC_LEX_OP_BOOL_NOT, DC_LEX_OBASE, DC_LEX_PRINT_STREAM,
638 /* QRSTUVWXY */ 653 /* QRSTUVWXY */
639 DC_LEX_NQUIT, DC_LEX_POP, DC_LEX_STORE_PUSH, XC_LEX_INVALID, XC_LEX_INVALID, 654 DC_LEX_NQUIT, DC_LEX_POP, DC_LEX_STORE_PUSH, XC_LEX_INVALID, XC_LEX_INVALID,
640 XC_LEX_INVALID, XC_LEX_INVALID, DC_LEX_SCALE_FACTOR, XC_LEX_INVALID, 655 XC_LEX_INVALID, XC_LEX_INVALID, DC_LEX_SCALE_FACTOR, XC_LEX_INVALID,
641 /* Z[\] */ 656 /* Z[\] */
642 BC_LEX_KEY_LENGTH, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID, 657 DC_LEX_LENGTH, XC_LEX_INVALID, XC_LEX_INVALID, XC_LEX_INVALID,
643 /* ^_` */ 658 /* ^_` */
644 XC_LEX_OP_POWER, XC_LEX_NEG, XC_LEX_INVALID, 659 XC_LEX_OP_POWER, XC_LEX_NEG, XC_LEX_INVALID,
645 /* abcdefgh */ 660 /* abcdefgh */
@@ -647,43 +662,48 @@ dc_char_to_LEX[] = {
647 DC_LEX_ELSE, DC_LEX_PRINT_STACK, XC_LEX_INVALID, XC_LEX_INVALID, 662 DC_LEX_ELSE, DC_LEX_PRINT_STACK, XC_LEX_INVALID, XC_LEX_INVALID,
648 /* ijklmnop */ 663 /* ijklmnop */
649 DC_LEX_STORE_IBASE, XC_LEX_INVALID, DC_LEX_STORE_SCALE, DC_LEX_LOAD, 664 DC_LEX_STORE_IBASE, XC_LEX_INVALID, DC_LEX_STORE_SCALE, DC_LEX_LOAD,
650 XC_LEX_INVALID, DC_LEX_PRINT_POP, DC_LEX_STORE_OBASE, BC_LEX_KEY_PRINT, 665 XC_LEX_INVALID, DC_LEX_PRINT_POP, DC_LEX_STORE_OBASE, DC_LEX_PRINT,
651 /* qrstuvwx */ 666 /* qrstuvwx */
652 BC_LEX_KEY_QUIT, DC_LEX_SWAP, BC_LEX_OP_ASSIGN, XC_LEX_INVALID, 667 DC_LEX_QUIT, DC_LEX_SWAP, DC_LEX_OP_ASSIGN, XC_LEX_INVALID,
653 XC_LEX_INVALID, BC_LEX_KEY_SQRT, XC_LEX_INVALID, DC_LEX_EXECUTE, 668 XC_LEX_INVALID, DC_LEX_SQRT, XC_LEX_INVALID, DC_LEX_EXECUTE,
654 /* yz */ 669 /* yz */
655 XC_LEX_INVALID, DC_LEX_STACK_LEVEL, 670 XC_LEX_INVALID, DC_LEX_STACK_LEVEL,
656 /* {|}~ */ 671 /* {|}~ */
657 BC_LEX_LBRACE, DC_LEX_OP_MODEXP, XC_LEX_INVALID, DC_LEX_OP_DIVMOD, 672 DC_LEX_LBRACE, DC_LEX_OP_MODEXP, XC_LEX_INVALID, DC_LEX_OP_DIVMOD,
658}; 673};
659static const //BcInst - should be this type. Using signed narrow type since DC_INST_INVALID is -1 674static const //BcInst - should be this type. Using signed narrow type since DC_INST_INVALID is -1
660int8_t 675int8_t
661dc_LEX_to_INST[] = { // (so many INVALIDs b/c dc parser does not generate these LEXs) // corresponding BC_LEX_xyz: 676dc_LEX_to_INST[] = { // (so many INVALIDs b/c dc parser does not generate these LEXs) // corresponding XC/DC_LEX_xyz:
662 DC_INST_INVALID, DC_INST_INVALID, // EOF INVALID 677 DC_INST_INVALID, DC_INST_INVALID, // EOF INVALID
678 DC_INST_INVALID, DC_INST_INVALID, // NLINE WHITESPACE
679 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // STR NAME NUMBER
663 DC_INST_INVALID, // NEG 680 DC_INST_INVALID, // NEG
664 XC_INST_POWER, XC_INST_MULTIPLY, XC_INST_DIVIDE, // OP_POWER OP_MULTIPLY OP_DIVIDE 681 XC_INST_POWER, XC_INST_MULTIPLY, XC_INST_DIVIDE, // OP_POWER OP_MULTIPLY OP_DIVIDE
665 XC_INST_MODULUS, XC_INST_PLUS, XC_INST_MINUS, // OP_MODULUS OP_PLUS OP_MINUS 682 XC_INST_MODULUS, XC_INST_PLUS, XC_INST_MINUS, // OP_MODULUS OP_PLUS OP_MINUS
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 683 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // OP_REL_EQ OP_REL_LE OP_REL_GE OP_REL_NE
667 DC_INST_INVALID, DC_INST_INVALID, // OP_REL_LT OP_REL_GT 684 DC_INST_INVALID, DC_INST_INVALID, // OP_REL_LT OP_REL_GT
668 XC_INST_BOOL_NOT, DC_INST_INVALID, DC_INST_INVALID, // OP_BOOL_NOT OP_BOOL_OR OP_BOOL_AND 685 XC_INST_BOOL_NOT, // DC_LEX_OP_BOOL_NOT
669 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // OP_ASSIGN_POWER OP_ASSIGN_MULTIPLY OP_ASSIGN_DIVIDE OP_ASSIGN_MODULUS 686 DC_INST_INVALID, // DC_LEX_OP_ASSIGN
670 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // OP_ASSIGN_PLUS OP_ASSIGN_MINUS OP_ASSIGN 687 XC_INST_REL_GT, // DC_LEX_LPAREN
671 DC_INST_INVALID, XC_INST_REL_GE, // OP_INC OP_DEC 688 DC_INST_INVALID, // DC_LEX_SCOLON
672 DC_INST_INVALID, DC_INST_INVALID, XC_INST_REL_GT, DC_INST_INVALID, // NLINE WHITESPACE LPAREN RPAREN 689 DC_INST_INVALID, // DC_LEX_READ
673 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, XC_INST_REL_GE, // LBRACKET COMMA RBRACKET LBRACE 690 XC_INST_IBASE, // DC_LEX_IBASE
674 DC_INST_INVALID, DC_INST_INVALID, // SCOLON RBRACE 691 XC_INST_SCALE, // DC_LEX_SCALE
675 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // STR NAME NUMBER 692 XC_INST_OBASE, // DC_LEX_OBASE
676 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // KEY_AUTO KEY_BREAK KEY_CONTINUE KEY_DEFINE 693 XC_INST_LENGTH, // DC_LEX_LENGTH
677 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, XC_INST_IBASE, // KEY_ELSE KEY_FOR KEY_HALT KEY_IBASE 694 XC_INST_PRINT, // DC_LEX_PRINT
678 XC_INST_OBASE, DC_INST_INVALID, IF_BC(DC_INST_INVALID,) XC_INST_LENGTH,//KEY_OBASE KEY_IF KEY_LAST(bc) KEY_LENGTH 695 DC_INST_QUIT, // DC_LEX_QUIT
679 DC_INST_INVALID, XC_INST_PRINT, DC_INST_QUIT, DC_INST_INVALID, // KEY_LIMITS KEY_PRINT KEY_QUIT KEY_READ 696 XC_INST_SQRT, // DC_LEX_SQRT
680 DC_INST_INVALID, XC_INST_SCALE, XC_INST_SQRT, DC_INST_INVALID, // KEY_RETURN KEY_SCALE KEY_SQRT KEY_WHILE 697 XC_INST_REL_GE, // DC_LEX_LBRACE
681 XC_INST_REL_EQ, DC_INST_MODEXP, DC_INST_DIVMOD, DC_INST_INVALID, // EQ_NO_REG OP_MODEXP OP_DIVMOD COLON 698 XC_INST_REL_EQ, DC_INST_MODEXP, DC_INST_DIVMOD, DC_INST_INVALID, // EQ_NO_REG OP_MODEXP OP_DIVMOD COLON
682 DC_INST_INVALID, DC_INST_EXECUTE, DC_INST_PRINT_STACK, DC_INST_CLEAR_STACK, //ELSE EXECUTE PRINT_STACK CLEAR_STACK 699 DC_INST_INVALID, DC_INST_EXECUTE, DC_INST_PRINT_STACK, DC_INST_CLEAR_STACK, //ELSE EXECUTE PRINT_STACK CLEAR_STACK
683 DC_INST_STACK_LEN, DC_INST_DUPLICATE, DC_INST_SWAP, XC_INST_POP, // STACK_LEVEL DUPLICATE SWAP POP 700 DC_INST_STACK_LEN, DC_INST_DUPLICATE, DC_INST_SWAP, XC_INST_POP, // STACK_LEVEL DUPLICATE SWAP POP
684 DC_INST_ASCIIFY, DC_INST_PRINT_STREAM, DC_INST_INVALID, DC_INST_INVALID, //ASCIIFY PRINT_STREAM STORE_IBASE STORE_OBASE 701 DC_INST_ASCIIFY, DC_INST_PRINT_STREAM, DC_INST_INVALID, DC_INST_INVALID, //ASCIIFY PRINT_STREAM STORE_IBASE STORE_OBASE
685 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // STORE_SCALE LOAD LOAD_POP STORE_PUSH 702 DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, DC_INST_INVALID, // STORE_SCALE LOAD LOAD_POP STORE_PUSH
686 XC_INST_PRINT, DC_INST_NQUIT, XC_INST_SCALE_FUNC, // PRINT_POP NQUIT SCALE_FACTOR 703 XC_INST_PRINT, DC_INST_NQUIT, XC_INST_SCALE_FUNC, // PRINT_POP NQUIT SCALE_FACTOR
704 // DC_INST_INVALID in this table either means that corresponding LEX
705 // is not possible for dc, or that it does not compile one-to-one
706 // to a single INST.
687}; 707};
688#endif // ENABLE_DC 708#endif // ENABLE_DC
689 709
@@ -3397,8 +3417,8 @@ static BC_STATUS zdc_lex_token(BcLex *l)
3397 uint8_t 3417 uint8_t
3398 dc_lex_regs[] = { 3418 dc_lex_regs[] = {
3399 XC_LEX_OP_REL_EQ, XC_LEX_OP_REL_LE, XC_LEX_OP_REL_GE, XC_LEX_OP_REL_NE, 3419 XC_LEX_OP_REL_EQ, XC_LEX_OP_REL_LE, XC_LEX_OP_REL_GE, XC_LEX_OP_REL_NE,
3400 XC_LEX_OP_REL_LT, XC_LEX_OP_REL_GT, BC_LEX_SCOLON, DC_LEX_COLON, 3420 XC_LEX_OP_REL_LT, XC_LEX_OP_REL_GT, DC_LEX_SCOLON, DC_LEX_COLON,
3401 DC_LEX_ELSE, DC_LEX_LOAD, DC_LEX_LOAD_POP, BC_LEX_OP_ASSIGN, 3421 DC_LEX_ELSE, DC_LEX_LOAD, DC_LEX_LOAD_POP, DC_LEX_OP_ASSIGN,
3402 DC_LEX_STORE_PUSH, 3422 DC_LEX_STORE_PUSH,
3403 }; 3423 };
3404 3424
@@ -4923,7 +4943,7 @@ static BC_STATUS zdc_parse_token(BcParse *p, BcLexType t)
4923 s = zdc_parse_cond(p, t - XC_LEX_OP_REL_EQ + XC_INST_REL_EQ); 4943 s = zdc_parse_cond(p, t - XC_LEX_OP_REL_EQ + XC_INST_REL_EQ);
4924 get_token = false; 4944 get_token = false;
4925 break; 4945 break;
4926 case BC_LEX_SCOLON: 4946 case DC_LEX_SCOLON:
4927 case DC_LEX_COLON: 4947 case DC_LEX_COLON:
4928 dbg_lex("%s:%d LEX_[S]COLON", __func__, __LINE__); 4948 dbg_lex("%s:%d LEX_[S]COLON", __func__, __LINE__);
4929 s = zdc_parse_mem(p, XC_INST_ARRAY_ELEM, true, t == DC_LEX_COLON); 4949 s = zdc_parse_mem(p, XC_INST_ARRAY_ELEM, true, t == DC_LEX_COLON);
@@ -4945,14 +4965,14 @@ static BC_STATUS zdc_parse_token(BcParse *p, BcLexType t)
4945 dbg_lex("%s:%d LEX_NUMBER", __func__, __LINE__); 4965 dbg_lex("%s:%d LEX_NUMBER", __func__, __LINE__);
4946 bc_parse_pushNUM(p); 4966 bc_parse_pushNUM(p);
4947 break; 4967 break;
4948 case BC_LEX_KEY_READ: 4968 case DC_LEX_READ:
4949 dbg_lex("%s:%d LEX_KEY_READ", __func__, __LINE__); 4969 dbg_lex("%s:%d LEX_KEY_READ", __func__, __LINE__);
4950 bc_parse_push(p, XC_INST_READ); 4970 bc_parse_push(p, XC_INST_READ);
4951 break; 4971 break;
4952 case BC_LEX_OP_ASSIGN: 4972 case DC_LEX_OP_ASSIGN:
4953 case DC_LEX_STORE_PUSH: 4973 case DC_LEX_STORE_PUSH:
4954 dbg_lex("%s:%d LEX_OP_ASSIGN/STORE_PUSH", __func__, __LINE__); 4974 dbg_lex("%s:%d LEX_OP_ASSIGN/STORE_PUSH", __func__, __LINE__);
4955 assign = t == BC_LEX_OP_ASSIGN; 4975 assign = (t == DC_LEX_OP_ASSIGN);
4956 inst = assign ? XC_INST_VAR : DC_INST_PUSH_TO_VAR; 4976 inst = assign ? XC_INST_VAR : DC_INST_PUSH_TO_VAR;
4957 s = zdc_parse_mem(p, inst, true, assign); 4977 s = zdc_parse_mem(p, inst, true, assign);
4958 break; 4978 break;