diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-25 22:20:14 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-25 22:20:14 +0100 |
| commit | 6e6182342ef59c47972a49543cd8b15dc4f28f6d (patch) | |
| tree | 81f7b11d93a08568e3f9925772c35000a5e4d69e /miscutils | |
| parent | 0b0e8d0509bdd45aa600d3ea2bf9043630809cd2 (diff) | |
| download | busybox-w32-6e6182342ef59c47972a49543cd8b15dc4f28f6d.tar.gz busybox-w32-6e6182342ef59c47972a49543cd8b15dc4f28f6d.tar.bz2 busybox-w32-6e6182342ef59c47972a49543cd8b15dc4f28f6d.zip | |
bc: move BcLex::lex member to be the first in struct globals
function old new delta
zbc_program_exec 3967 4003 +36
zdc_program_execStr 501 520 +19
zbc_posix_error_fmt 58 62 +4
bc_vm_init 675 679 +4
bc_read_line 407 411 +4
bc_error_fmt 36 40 +4
zdc_parse_register 45 44 -1
zdc_parse_exprs_until_eof 28 27 -1
zbc_parse_text_init 56 55 -1
zbc_parse_stmt_allow_NLINE_before 55 54 -1
zbc_lex_skip_if_at_NLINE 19 18 -1
zbc_lex_number 178 177 -1
bc_parse_create 97 96 -1
bc_lex_whitespace 43 42 -1
bc_lex_name 71 70 -1
bc_lex_lineComment 38 37 -1
bc_lex_assign 35 34 -1
zdc_parse_expr 476 473 -3
bc_verror_msg 93 90 -3
bc_lex_file 27 24 -3
zbc_parse_name 453 448 -5
bc_parse_expr_empty_ok 1776 1764 -12
zbc_vm_process 878 865 -13
zbc_parse_stmt_possibly_auto 1451 1425 -26
zbc_lex_next 2075 2039 -36
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 6/19 up/down: 71/-112) Total: -41 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils')
| -rw-r--r-- | miscutils/bc.c | 130 |
1 files changed, 65 insertions, 65 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index 7a6278cfc..44d4976cc 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c | |||
| @@ -711,40 +711,29 @@ dc_LEX_to_INST[] = { // starts at XC_LEX_OP_POWER // corresponding XC/DC_L | |||
| 711 | #endif // ENABLE_DC | 711 | #endif // ENABLE_DC |
| 712 | 712 | ||
| 713 | typedef struct BcLex { | 713 | typedef struct BcLex { |
| 714 | const char *lex_inbuf; | 714 | smallint lex; // was BcLexType // first member is most used |
| 715 | const char *lex_next_at; // last lex_next() was called at this string | 715 | smallint lex_last; // was BcLexType |
| 716 | bool lex_newline; | ||
| 716 | size_t lex_i; | 717 | size_t lex_i; |
| 717 | size_t lex_line; | 718 | size_t lex_line; |
| 718 | size_t lex_len; | 719 | size_t lex_len; |
| 719 | bool lex_newline; | 720 | const char *lex_inbuf; |
| 720 | smallint lex; // was BcLexType | 721 | const char *lex_next_at; // last lex_next() was called at this string |
| 721 | smallint lex_last; // was BcLexType | ||
| 722 | BcVec lex_strnumbuf; | 722 | BcVec lex_strnumbuf; |
| 723 | } BcLex; | 723 | } BcLex; |
| 724 | 724 | ||
| 725 | #define BC_PARSE_STREND (0xff) | ||
| 726 | |||
| 727 | #if ENABLE_BC | ||
| 728 | # define BC_PARSE_REL (1 << 0) | ||
| 729 | # define BC_PARSE_PRINT (1 << 1) | ||
| 730 | # define BC_PARSE_ARRAY (1 << 2) | ||
| 731 | # define BC_PARSE_NOCALL (1 << 3) | ||
| 732 | #endif | ||
| 733 | |||
| 734 | typedef struct BcParse { | 725 | typedef struct BcParse { |
| 735 | BcLex l; | 726 | BcLex l; // first member is most used |
| 736 | |||
| 737 | IF_BC(BcVec exits;) | ||
| 738 | IF_BC(BcVec conds;) | ||
| 739 | IF_BC(BcVec ops;) | ||
| 740 | 727 | ||
| 741 | const char *filename; | 728 | const char *filename; |
| 742 | FILE *input_fp; | 729 | FILE *input_fp; |
| 743 | 730 | ||
| 744 | BcFunc *func; | 731 | BcFunc *func; |
| 745 | size_t fidx; | 732 | size_t fidx; |
| 746 | |||
| 747 | IF_BC(size_t in_funcdef;) | 733 | IF_BC(size_t in_funcdef;) |
| 734 | IF_BC(BcVec exits;) | ||
| 735 | IF_BC(BcVec conds;) | ||
| 736 | IF_BC(BcVec ops;) | ||
| 748 | } BcParse; | 737 | } BcParse; |
| 749 | 738 | ||
| 750 | typedef struct BcProgram { | 739 | typedef struct BcProgram { |
| @@ -775,6 +764,62 @@ typedef struct BcProgram { | |||
| 775 | IF_BC(BcNum last;) | 764 | IF_BC(BcNum last;) |
| 776 | } BcProgram; | 765 | } BcProgram; |
| 777 | 766 | ||
| 767 | struct globals { | ||
| 768 | BcParse prs; // first member is most used | ||
| 769 | |||
| 770 | // For error messages. Can be set to current parsed line, | ||
| 771 | // or [TODO] to current executing line (can be before last parsed one) | ||
| 772 | unsigned err_line; | ||
| 773 | |||
| 774 | BcVec input_buffer; | ||
| 775 | |||
| 776 | IF_FEATURE_BC_SIGNALS(smallint ttyin;) | ||
| 777 | IF_FEATURE_CLEAN_UP(smallint exiting;) | ||
| 778 | |||
| 779 | BcProgram prog; | ||
| 780 | |||
| 781 | BcVec files; | ||
| 782 | |||
| 783 | char *env_args; | ||
| 784 | |||
| 785 | #if ENABLE_FEATURE_EDITING | ||
| 786 | line_input_t *line_input_state; | ||
| 787 | #endif | ||
| 788 | } FIX_ALIASING; | ||
| 789 | #define G (*ptr_to_globals) | ||
| 790 | #define INIT_G() do { \ | ||
| 791 | SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ | ||
| 792 | } while (0) | ||
| 793 | #define FREE_G() do { \ | ||
| 794 | FREE_PTR_TO_GLOBALS(); \ | ||
| 795 | } while (0) | ||
| 796 | #define G_posix (ENABLE_BC && (option_mask32 & BC_FLAG_S)) | ||
| 797 | #define G_warn (ENABLE_BC && (option_mask32 & BC_FLAG_W)) | ||
| 798 | #define G_exreg (ENABLE_DC && (option_mask32 & DC_FLAG_X)) | ||
| 799 | #if ENABLE_FEATURE_BC_SIGNALS | ||
| 800 | # define G_interrupt bb_got_signal | ||
| 801 | # define G_ttyin G.ttyin | ||
| 802 | #else | ||
| 803 | # define G_interrupt 0 | ||
| 804 | # define G_ttyin 0 | ||
| 805 | #endif | ||
| 806 | #if ENABLE_FEATURE_CLEAN_UP | ||
| 807 | # define G_exiting G.exiting | ||
| 808 | #else | ||
| 809 | # define G_exiting 0 | ||
| 810 | #endif | ||
| 811 | #define IS_BC (ENABLE_BC && (!ENABLE_DC || applet_name[0] == 'b')) | ||
| 812 | #define IS_DC (ENABLE_DC && (!ENABLE_BC || applet_name[0] != 'b')) | ||
| 813 | |||
| 814 | #define BC_PARSE_STREND (0xff) | ||
| 815 | |||
| 816 | #if ENABLE_BC | ||
| 817 | # define BC_PARSE_REL (1 << 0) | ||
| 818 | # define BC_PARSE_PRINT (1 << 1) | ||
| 819 | # define BC_PARSE_ARRAY (1 << 2) | ||
| 820 | # define BC_PARSE_NOCALL (1 << 3) | ||
| 821 | #endif | ||
| 822 | |||
| 778 | #define BC_PROG_MAIN (0) | 823 | #define BC_PROG_MAIN (0) |
| 779 | #define BC_PROG_READ (1) | 824 | #define BC_PROG_READ (1) |
| 780 | #if ENABLE_DC | 825 | #if ENABLE_DC |
| @@ -830,51 +875,6 @@ typedef struct BcProgram { | |||
| 830 | #endif | 875 | #endif |
| 831 | #define BC_MAX_NUM_STR BC_MAX_STRING_STR | 876 | #define BC_MAX_NUM_STR BC_MAX_STRING_STR |
| 832 | 877 | ||
| 833 | struct globals { | ||
| 834 | IF_FEATURE_BC_SIGNALS(smallint ttyin;) | ||
| 835 | IF_FEATURE_CLEAN_UP(smallint exiting;) | ||
| 836 | |||
| 837 | BcParse prs; | ||
| 838 | BcProgram prog; | ||
| 839 | |||
| 840 | // For error messages. Can be set to current parsed line, | ||
| 841 | // or [TODO] to current executing line (can be before last parsed one) | ||
| 842 | unsigned err_line; | ||
| 843 | |||
| 844 | BcVec files; | ||
| 845 | BcVec input_buffer; | ||
| 846 | |||
| 847 | char *env_args; | ||
| 848 | |||
| 849 | #if ENABLE_FEATURE_EDITING | ||
| 850 | line_input_t *line_input_state; | ||
| 851 | #endif | ||
| 852 | } FIX_ALIASING; | ||
| 853 | #define G (*ptr_to_globals) | ||
| 854 | #define INIT_G() do { \ | ||
| 855 | SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ | ||
| 856 | } while (0) | ||
| 857 | #define FREE_G() do { \ | ||
| 858 | FREE_PTR_TO_GLOBALS(); \ | ||
| 859 | } while (0) | ||
| 860 | #define G_posix (ENABLE_BC && (option_mask32 & BC_FLAG_S)) | ||
| 861 | #define G_warn (ENABLE_BC && (option_mask32 & BC_FLAG_W)) | ||
| 862 | #define G_exreg (ENABLE_DC && (option_mask32 & DC_FLAG_X)) | ||
| 863 | #if ENABLE_FEATURE_BC_SIGNALS | ||
| 864 | # define G_interrupt bb_got_signal | ||
| 865 | # define G_ttyin G.ttyin | ||
| 866 | #else | ||
| 867 | # define G_interrupt 0 | ||
| 868 | # define G_ttyin 0 | ||
| 869 | #endif | ||
| 870 | #if ENABLE_FEATURE_CLEAN_UP | ||
| 871 | # define G_exiting G.exiting | ||
| 872 | #else | ||
| 873 | # define G_exiting 0 | ||
| 874 | #endif | ||
| 875 | #define IS_BC (ENABLE_BC && (!ENABLE_DC || applet_name[0] == 'b')) | ||
| 876 | #define IS_DC (ENABLE_DC && (!ENABLE_BC || applet_name[0] != 'b')) | ||
| 877 | |||
| 878 | // In configurations where errors abort instead of propagating error | 878 | // In configurations where errors abort instead of propagating error |
| 879 | // return code up the call chain, functions returning BC_STATUS | 879 | // return code up the call chain, functions returning BC_STATUS |
| 880 | // actually don't return anything, they always succeed and return "void". | 880 | // actually don't return anything, they always succeed and return "void". |
