aboutsummaryrefslogtreecommitdiff
path: root/editors/awk.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
| * awk: fix corner case in awk_printfDenys Vlasenko2021-07-111-4/+4
| | | | | | | | | | | | | | | | | | | | | | Example where it wasn't working: awk 'BEGIN { printf "qwe %s rty %c uio\n", "a", 0, "c" }' - the NUL printing in %c caused premature stop of printing. function old new delta awk_printf 593 596 +3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: unbreak "cmd" | getlineDenys Vlasenko2021-07-111-1/+2
| | | | | | | | | | | | | | function old new delta evaluate 3337 3343 +6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: unbreak "printf('%c') can output NUL" testcaseDenys Vlasenko2021-07-111-17/+26
| | | | | | | | | | | | | | function old new delta awk_printf 546 593 +47 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: undo TI_PRINT, it introduced a bug (print with any redirect acting as ↵Denys Vlasenko2021-07-111-3/+5
| | | | | | | | | | | | | | | | | | | | | | printf) function old new delta evaluate 3329 3337 +8 Patch by Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: rollback_token() + chain_group() == chain_until_rbrace()Denys Vlasenko2021-07-111-2/+1
| | | | | | | | | | | | | | function old new delta parse_program 336 332 -4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: fix printf buffer overflowDenys Vlasenko2021-07-041-39/+55
| | | | | | | | | | | | | | | | | | | | | | | | function old new delta awk_printf 468 546 +78 fmt_num 239 247 +8 getvar_s 125 111 -14 evaluate 3343 3329 -14 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/2 up/down: 86/-28) Total: 58 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | awk: WIN32 compilation fixesRon Yorston2021-07-051-1/+7
| |
* | Merge branch 'busybox' into mergeRon Yorston2021-07-051-771/+923
|\|
| * awk: simplify tests for operation classDenys Vlasenko2021-07-031-28/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Usually, an operation class has only one possible value of "info" word. In this case, just compare the entire info word, do not bother to mask OPCLSMASK bits. (Example where this is not the case: OC_REPLACE for "<op>=") function old new delta mk_splitter 106 100 -6 chain_group 616 610 -6 nextarg 40 32 -8 exec_builtin 1157 1149 -8 as_regex 111 103 -8 awk_split 553 543 -10 parse_expr 948 936 -12 awk_getline 656 642 -14 evaluate 3387 3343 -44 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/9 up/down: 0/-116) Total: -116 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: restore strdup elision optimization in assignmentDenys Vlasenko2021-07-031-8/+17
| | | | | | | | | | | | | | function old new delta evaluate 3339 3387 +48 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: match(): code shrinkDenys Vlasenko2021-07-031-13/+11
| | | | | | | | | | | | | | | | | | | | function old new delta do_match - 165 +165 exec_builtin_match 202 - -202 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/0 up/down: 165/-202) Total: -37 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: rand(): 64-bit constants should be ULLDenys Vlasenko2021-07-031-2/+2
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: do not use a copy of g_progname for node->l.new_prognameDenys Vlasenko2021-07-031-2/+2
| | | | | | | | | | | | | | | | | | We never destroy g_progname's, the strings still exist, no need to copy function old new delta chain_node 104 97 -7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: support %F %a %A in printfDenys Vlasenko2021-07-031-1/+1
| | | | | | | | | | | | | | function old new delta .rodata 104111 104120 +9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: open-code TS_OPTERM, no logic changesDenys Vlasenko2021-07-031-16/+17
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: tighten rules in action parsingDenys Vlasenko2021-07-031-42/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * 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>