diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-24 15:00:56 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-24 15:00:56 +0100 |
commit | 9d9c97efbdc0f30851a5e56398c371d4171df34e (patch) | |
tree | 3931708427d15aabb41b36198f0adb17f6dc1a7e /miscutils/bc.c | |
parent | 69560f42da3deb5c87a9ccdbcaae26a5ff0cabaf (diff) | |
download | busybox-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.c | 118 |
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. | ||
392 | typedef enum BcLexType { | 391 | typedef 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 | |||
617 | uint8_t | 632 | uint8_t |
618 | dc_char_to_LEX[] = { | 633 | dc_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 | }; |
659 | static const //BcInst - should be this type. Using signed narrow type since DC_INST_INVALID is -1 | 674 | static const //BcInst - should be this type. Using signed narrow type since DC_INST_INVALID is -1 |
660 | int8_t | 675 | int8_t |
661 | dc_LEX_to_INST[] = { // (so many INVALIDs b/c dc parser does not generate these LEXs) // corresponding BC_LEX_xyz: | 676 | dc_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; |