summaryrefslogtreecommitdiffhomepage
path: root/editors/awk.c
AgeCommit message (Collapse)Author
2021-07-03awk: support %F %a %A in printfDenys Vlasenko
function old new delta .rodata 104111 104120 +9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03awk: open-code TS_OPTERM, no logic changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03awk: tighten rules in action parsingDenys Vlasenko
Disallow: BEGIN { action } - must start on the same line Disallow: func f() print "hello" - must be in {...} function old new delta chain_until_rbrace - 41 +41 parse_program 307 336 +29 chain_group 649 616 -33 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/1 up/down: 70/-33) Total: 37 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03awk: rename GRPSTART/END to L/RBRACE, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02awk: move match() code out-of-lineDenys Vlasenko
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>
2021-07-02awk: use smaller regmatch_t arrays, they had 2 elements for no apparent reasonDenys Vlasenko
function old new delta exec_builtin 1479 1434 -45 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02awk: fix detection of VAR=VAL argumentsDenys Vlasenko
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>
2021-07-02awk: fix beavior of "exit" without parameterDenys Vlasenko
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>
2021-07-02awk: rand() could return 1.0, fix this - should be in [0,1)Denys Vlasenko
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>
2021-07-02awk: beautify builtins table, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02awk: enforce simple builtins' argument numberDenys Vlasenko
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>
2021-07-02awk: make builtin definitions more understandable, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02awk: do not special-case "delete"Denys Vlasenko
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>
2021-07-02awk: shuffle globals for smaller offsetsDenys Vlasenko
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>
2021-07-02awk: use "static" tmpvars in main and exitDenys Vlasenko
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>
2021-07-02awk: when parsing length(), simplify eating of LPARENDenys Vlasenko
function old new delta parse_expr 945 948 +3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02awk: shuffle functions to reduce forward declarations, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-01awk: use static tmpvars instead of nvalloc(1)ed onesDenys Vlasenko
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>
2021-07-01awk: rename temp variables, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30awk: evaluate all, even superfluous function argsDenys Vlasenko
function old new delta evaluate 3128 3135 +7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30awk: rewrite "print" logic a bit to make it clearerDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30awk: allow empty fuinctions with no arguments, disallow function redefinitionsDenys Vlasenko
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>
2021-06-30awk: replace incorrect use of union in undefined function check (no code ↵Denys Vlasenko
changes) ...which reveals that it's buggy: it thinks "func f(){}" is an undefined function! Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30awk: remove custom pool allocator for temporary awk variablesDenys Vlasenko
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>
2021-06-29awk: assorted optimizationsDenys Vlasenko
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>
2021-06-29awk: free unused parsing structures after parse is doneDenys Vlasenko
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>
2021-06-29awk: document which hashes are used at what state (parse/execute)Denys Vlasenko
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>
2021-06-29awk: fix parsing of expressions such as "v (a)"Denys Vlasenko
function old new delta next_token 812 825 +13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29awk: deindent a block, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29awk: code shrinkDenys Vlasenko
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>
2021-06-29awk: get rid of "move name one char back" trick in next_token()Denys Vlasenko
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>
2021-06-29awk: when parsing TC_FUNCTION token, eat its opening '('Denys Vlasenko
...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>
2021-06-29awk: g_buf[] does not need a separate allocationDenys Vlasenko
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>
2021-06-29awk: simplify parsing of function declarationDenys Vlasenko
function old new delta parse_program 328 313 -15 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29awk: rename TC_SEQSTART/END to L/RPAREN, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29awk: deindent code block, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29awk: use TS_foo for combined token classes. No code changesDenys Vlasenko
Confusion with "simple" classes was the cause of a bug fixed by previous commit Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29awk: make ltclass ("last token class") local to next_token()Denys Vlasenko
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>
2021-06-29awk: remove redundant checkDenys Vlasenko
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>
2021-06-25awk: move locals deeper into scopes where they are used, no logic changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-25awk: more efficient -f FILE, document what "some trick in next_token" isDenys Vlasenko
function old new delta awk_main 890 898 +8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-20qwk: make code clearer, no actual code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-18awk: after preinc/dec, only allow variable, field ref, array ref, or another ↵Denys Vlasenko
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>
2021-06-16awk: fix use-after-free in "$BIGNUM1 $BIGGERNUM2" concat opDenys Vlasenko
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>
2021-02-02awk: allow printf('%c') to output NUL, closes 13486Ron Yorston
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>
2020-12-02awk: FS regex matches only non-empty separators (gawk compat)Denys Vlasenko
function old new delta awk_split 484 553 +69 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-11-30decrease paddign: gcc-9.3.1 slaps 32-byte alignment on arrays willy-nillyDenys Vlasenko
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>
2020-11-16awk: fix dodgy multi-char separators splitting logicDenys Vlasenko
function old new delta awk_split 521 484 -37 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-06-09awk: disallow "str"++, closes bug 12981Denys Vlasenko
function old new delta parse_expr 887 896 +9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-02-02awk: fix more "length" cases, closes 12486Denys Vlasenko
function old new delta next_token 808 831 +23 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>