aboutsummaryrefslogtreecommitdiff
path: root/editors/awk.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* awk: rename GRPSTART/END to L/RBRACE, no code changesDenys Vlasenko2021-07-031-27/+33
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: move match() code out-of-lineDenys Vlasenko2021-07-021-17/+28
| | | | | | | | | | function old new delta exec_builtin_match - 202 +202 exec_builtin 1434 1157 -277 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/1 up/down: 202/-277) Total: -75 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: use smaller regmatch_t arrays, they had 2 elements for no apparent reasonDenys Vlasenko2021-07-021-3/+5
| | | | | | | function old new delta exec_builtin 1479 1434 -45 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: fix detection of VAR=VAL argumentsDenys Vlasenko2021-07-021-5/+4
| | | | | | | | | | | | 1NAME=VAL is not it, neither is VA.R=VAL function old new delta next_input_file 216 214 -2 is_assignment 115 91 -24 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-26) Total: -26 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: fix beavior of "exit" without parameterDenys Vlasenko2021-07-021-18/+22
| | | | | | | | | | | function old new delta evaluate 3336 3339 +3 awk_exit 93 94 +1 awk_main 829 827 -2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-2) Total: 2 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: rand() could return 1.0, fix this - should be in [0,1)Denys Vlasenko2021-07-021-2/+13
| | | | | | | | | | | | While at it, make it finer-grained (63 bits of randomness) function old new delta evaluate 3303 3336 +33 .rodata 104107 104111 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 37/0) Total: 37 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: beautify builtins table, no code changesDenys Vlasenko2021-07-021-12/+14
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: enforce simple builtins' argument numberDenys Vlasenko2021-07-021-17/+28
| | | | | | | | | | function old new delta evaluate 3215 3303 +88 .rodata 104036 104107 +71 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 159/0) Total: 159 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: make builtin definitions more understandable, no code changesDenys Vlasenko2021-07-021-22/+49
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: do not special-case "delete"Denys Vlasenko2021-07-021-29/+27
| | | | | | | | | | | | | Rework of the previous fix: Can use operation attributes to disable arg evaluation instead of special-casing. function old new delta .rodata 104032 104036 +4 evaluate 3223 3215 -8 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 4/-8) Total: -4 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: shuffle globals for smaller offsetsDenys Vlasenko2021-07-021-12/+13
| | | | | | | | | | function old new delta awk_main 832 829 -3 evaluate 3229 3223 -6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-9) Total: -9 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: use "static" tmpvars in main and exitDenys Vlasenko2021-07-021-12/+5
| | | | | | | | | | function old new delta awk_exit 103 93 -10 awk_main 850 832 -18 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-28) Total: -28 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: when parsing length(), simplify eating of LPARENDenys Vlasenko2021-07-021-3/+4
| | | | | | | function old new delta parse_expr 945 948 +3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: shuffle functions to reduce forward declarations, no code changesDenys Vlasenko2021-07-021-98/+94
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: use static tmpvars instead of nvalloc(1)ed onesDenys Vlasenko2021-07-011-15/+34
| | | | | | | | | | | | | | | | | ptest() was using this idea already. As far as I can see, this is safe. Ttestsuite passes. One downside is that a temporary from e.g. printf invocation won't be freed until the next printf call. function old new delta awk_printf 481 468 -13 as_regex 137 111 -26 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-39) Total: -39 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: rename temp variables, no code changesDenys Vlasenko2021-07-011-30/+46
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: evaluate all, even superfluous function argsDenys Vlasenko2021-06-301-7/+12
| | | | | | | function old new delta evaluate 3128 3135 +7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: rewrite "print" logic a bit to make it clearerDenys Vlasenko2021-06-301-5/+4
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: allow empty fuinctions with no arguments, disallow function redefinitionsDenys Vlasenko2021-06-301-4/+7
| | | | | | | | | | | function old new delta .rodata 103681 103700 +19 parse_program 303 307 +4 evaluate 3145 3141 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 23/-4) Total: 19 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: replace incorrect use of union in undefined function check (no code ↵Denys Vlasenko2021-06-301-1/+1
| | | | | | | | changes) ...which reveals that it's buggy: it thinks "func f(){}" is an undefined function! Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: remove custom pool allocator for temporary awk variablesDenys Vlasenko2021-06-301-103/+61
| | | | | | | | | | | | | | | | | | | | | | It seems to be designed to reduce overhead of malloc's auxiliary data, by allocating at least 64 variables as a block. With "struct var" being about 20-32 bytes long (32/64 bits), malloc overhead for one temporary indeed is high, ~33% more memory used than needed. function old new delta evaluate 3137 3145 +8 modprobe_main 798 803 +5 exec_builtin 1414 1419 +5 awk_printf 476 481 +5 as_regex 132 137 +5 EMSG_INTERNAL_ERROR 15 - -15 nvfree 169 116 -53 nvalloc 145 - -145 ------------------------------------------------------------------------------ (add/remove: 0/2 grow/shrink: 5/1 up/down: 28/-213) Total: -185 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: assorted optimizationsDenys Vlasenko2021-06-291-9/+17
| | | | | | | | | | | | | | | | | | | | | hash_find(): do not caclculate hash twice. Do not divide - can use cheap multiply-by-8 shift. nextword(): do not repeatedly increment in-memory value, do it in register, then store final result. hashwalk_init(): do not strlen() twice. function old new delta hash_search3 - 49 +49 hash_find 259 281 +22 nextword 19 16 -3 evaluate 3141 3137 -4 hash_search 54 28 -26 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/3 up/down: 71/-33) Total: 38 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: free unused parsing structures after parse is doneDenys Vlasenko2021-06-291-27/+47
| | | | | | | | | | | function old new delta hash_clear - 90 +90 awk_main 827 849 +22 clear_array 90 - -90 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 1/0 up/down: 112/-90) Total: 22 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: document which hashes are used at what state (parse/execute)Denys Vlasenko2021-06-291-10/+20
| | | | | | | | | | | We can free them after they are no longer needed. (Currently, being a NOEXEC applet is much larger waste of memory for the case of long-running awk script). function old new delta awk_main 831 827 -4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: fix parsing of expressions such as "v (a)"Denys Vlasenko2021-06-291-4/+18
| | | | | | | function old new delta next_token 812 825 +13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: deindent a block, no code changesDenys Vlasenko2021-06-291-84/+83
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: code shrinkDenys Vlasenko2021-06-291-7/+11
| | | | | | | | | | | | | function old new delta parse_expr 948 945 -3 chain_expr 65 62 -3 chain_group 655 649 -6 parse_program 310 303 -7 rollback_token 10 - -10 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 0/4 up/down: 0/-29) Total: -29 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: get rid of "move name one char back" trick in next_token()Denys Vlasenko2021-06-291-27/+27
| | | | | | | | | | function old new delta next_token 791 812 +21 awk_main 886 831 -55 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 21/-55) Total: -34 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: when parsing TC_FUNCTION token, eat its opening '('Denys Vlasenko2021-06-291-15/+15
| | | | | | | | | | | | | ...like we do for array references. function old new delta parse_expr 938 948 +10 next_token 788 791 +3 parse_program 313 310 -3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 13/-3) Total: 10 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: g_buf[] does not need a separate allocationDenys Vlasenko2021-06-291-5/+3
| | | | | | | | | | | | function old new delta exec_builtin 1400 1414 +14 evaluate 3132 3141 +9 getvar_s 121 125 +4 awk_main 902 886 -16 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/1 up/down: 27/-16) Total: 11 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: simplify parsing of function declarationDenys Vlasenko2021-06-291-16/+10
| | | | | | | function old new delta parse_program 328 313 -15 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: rename TC_SEQSTART/END to L/RPAREN, no code changesDenys Vlasenko2021-06-291-47/+47
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: deindent code block, no code changesDenys Vlasenko2021-06-291-87/+90
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: use TS_foo for combined token classes. No code changesDenys Vlasenko2021-06-291-64/+64
| | | | | | Confusion with "simple" classes was the cause of a bug fixed by previous commit Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: make ltclass ("last token class") local to next_token()Denys Vlasenko2021-06-291-14/+10
| | | | | | | | | | function old new delta next_token 784 790 +6 next_input_file 219 216 -3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 6/-3) Total: 3 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: remove redundant checkDenys Vlasenko2021-06-291-14/+18
| | | | | | | | | | function old new delta next_token 785 784 -1 parse_program 337 328 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-10) Total: -10 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: move locals deeper into scopes where they are used, no logic changesDenys Vlasenko2021-06-251-30/+32
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: more efficient -f FILE, document what "some trick in next_token" isDenys Vlasenko2021-06-251-9/+24
| | | | | | | function old new delta awk_main 890 898 +8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* qwk: make code clearer, no actual code changesDenys Vlasenko2021-06-201-2/+3
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: after preinc/dec, only allow variable, field ref, array ref, or another ↵Denys Vlasenko2021-06-181-18/+69
| | | | | | | | | | | preinc/dec Accepting nonsense like "--4", and even "-- -4" is confusing. function old new delta parse_expr 917 938 +21 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: fix use-after-free in "$BIGNUM1 $BIGGERNUM2" concat opDenys Vlasenko2021-06-161-14/+71
| | | | | | | | | | Second reference to a field reallocs/moves Fields[] array, but first ref still tries to use the element where it was before move. function old new delta fsrealloc 94 106 +12 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: allow printf('%c') to output NUL, closes 13486Ron Yorston2021-02-021-3/+15
| | | | | | | | | | | | | | | | | Treat the output of printf as binary rather than a null-terminated string so that NUL characters can be output. This is considered to be a GNU extension, though it's also available in mawk and FreeBSD's awk. function old new delta evaluate 3487 3504 +17 awk_printf 504 519 +15 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 32/0) Total: 32 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: FS regex matches only non-empty separators (gawk compat)Denys Vlasenko2020-12-021-8/+25
| | | | | | | function old new delta awk_split 484 553 +69 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* decrease paddign: gcc-9.3.1 slaps 32-byte alignment on arrays willy-nillyDenys Vlasenko2020-11-301-1/+1
| | | | | | | | text data bss dec hex filename 1021988 559 5052 1027599 fae0f busybox_old 1021236 559 5052 1026847 fab1f busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: fix dodgy multi-char separators splitting logicDenys Vlasenko2020-11-161-9/+16
| | | | | | | function old new delta awk_split 521 484 -37 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: disallow "str"++, closes bug 12981Denys Vlasenko2020-06-091-1/+3
| | | | | | | function old new delta parse_expr 887 896 +9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: fix more "length" cases, closes 12486Denys Vlasenko2020-02-021-4/+18
| | | | | | | function old new delta next_token 808 831 +23 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* libbb: reduce the overhead of single parameter bb_error_msg() callsJames Byrne2019-07-021-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Back in 2007, commit 0c97c9d43707 ("'simple' error message functions by Loic Grenie") introduced bb_simple_perror_msg() to allow for a lower overhead call to bb_perror_msg() when only a string was being printed with no parameters. This saves space for some CPU architectures because it avoids the overhead of a call to a variadic function. However there has never been a simple version of bb_error_msg(), and since 2007 many new calls to bb_perror_msg() have been added that only take a single parameter and so could have been using bb_simple_perror_message(). This changeset introduces 'simple' versions of bb_info_msg(), bb_error_msg(), bb_error_msg_and_die(), bb_herror_msg() and bb_herror_msg_and_die(), and replaces all calls that only take a single parameter, or use something like ("%s", arg), with calls to the corresponding 'simple' version. Since it is likely that single parameter calls to the variadic functions may be accidentally reintroduced in the future a new debugging config option WARN_SIMPLE_MSG has been introduced. This uses some macro magic which will cause any such calls to generate a warning, but this is turned off by default to avoid use of the unpleasant macros in normal circumstances. This is a large changeset due to the number of calls that have been replaced. The only files that contain changes other than simple substitution of function calls are libbb.h, libbb/herror_msg.c, libbb/verror_msg.c and libbb/xfuncs_printf.c. In miscutils/devfsd.c, networking/udhcp/common.h and util-linux/mdev.c additonal macros have been added for logging so that single parameter and multiple parameter logging variants exist. The amount of space saved varies considerably by architecture, and was found to be as follows (for 'defconfig' using GCC 7.4): Arm: -92 bytes MIPS: -52 bytes PPC: -1836 bytes x86_64: -938 bytes Note that for the MIPS architecture only an exception had to be made disabling the 'simple' calls for 'udhcp' (in networking/udhcp/common.h) because it made these files larger on MIPS. Signed-off-by: James Byrne <james.byrne@origamienergy.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: Fix overly permissive func arg list parsingBrian Foley2019-01-211-1/+14
| | | | | | | | | | | | | | | It allows things like 'func f(a b)' and 'func f(a,)' which GNU awk forbids. function old new delta parse_program 327 367 +40 chain_expr 40 67 +27 parse_expr 891 915 +24 EMSG_TOO_FEW_ARGS 30 18 -12 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/1 up/down: 91/-12) Total: 79 bytes Signed-off-by: Brian Foley <bpfoley@google.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* awk: Syntax error if delete isn't given an arg.Brian Foley2019-01-211-8/+15
| | | | | | | | Unlike exit and return, delete strictly requires an arg, and derefs a null pointer if executed without one. Signed-off-by: Brian Foley <bpfoley@google.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>