awk: Fix handling of functions with empty body
No binary (build failed)
—
(log yok)
| @@ -2661,7 +2661,8 @@ static var *evaluate(node *op, var *res) | |
| var *vbeg, *v; | |
| const char *sv_progname; | |
| - | if (!op->r.f->body.first) |
| + | /* The body might be empty, still has to eval the args */ |
| + | if (!op->r.n->info) |
| syntax_error(EMSG_UNDEF_FUNC); | |
| vbeg = v = nvalloc(op->r.f->nargs + 1); | |
| @@ -25,6 +25,25 @@ testing "awk if string == " "awk 'BEGIN{if(\"a\"==\"ab\") print \"bar\"}'" "" | |
| # 4294967295 = 0xffffffff | |
| testing "awk bitwise op" "awk '{ print or(4294967295,1) }'" "4.29497e+09\n" "" "\n" | |
| + | |
| + | # we were testing for a non-empty body when deciding if a function was |
| + | # defined or not. The testcase below caused: |
| + | # awk: cmd. line:8: Call to undefined function |
| + | prg=' |
| + | function empty_fun(count) { |
| + | # empty |
| + | } |
| + | END { |
| + | i=1 |
| + | print "L" i "\n" |
| + | empty_fun(i + i + ++i) |
| + | print "L" i "\n" |
| + | }' |
| + | testing "awk handles empty function f(arg){}" \ |
| + | "awk '$prg'" \ |
| + | "L1\n\nL2\n\n" \ |
| + | "" "" |
| + | |
| optional DESKTOP | |
| testing "awk hex const 1" "awk '{ print or(0xffffffff,1) }'" "4.29497e+09\n" "" "\n" | |
| testing "awk hex const 2" "awk '{ print or(0x80000000,1) }'" "2.14748e+09\n" "" "\n" | |