awk: Fix handling of functions with empty body
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 31 Jul 2013 13:29:20 +0000 (15:29 +0200)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 31 Jul 2013 19:51:14 +0000 (21:51 +0200)
ammend b79a0fef99627c457548e804fcd6e162b116cbe8 to properly
handle functions defined in another scope.

Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
editors/awk.c
testsuite/awk.tests

index a2e2021..77784df 100644 (file)
@@ -2662,7 +2662,7 @@ static var *evaluate(node *op, var *res)
                        const char *sv_progname;
 
                        /* The body might be empty, still has to eval the args */
-                       if (!op->r.n->info)
+                       if (!op->r.n->info && !op->r.f->body.first)
                                syntax_error(EMSG_UNDEF_FUNC);
 
                        vbeg = v = nvalloc(op->r.f->nargs + 1);
index 160f460..6af6072 100755 (executable)
@@ -44,6 +44,34 @@ testing "awk handles empty function f(arg){}" \
        "L1\n\nL2\n\n" \
        "" ""
 
+prg='
+function outer_fun() {
+  return 1
+}
+END {
+  i=1
+  print "L" i "\n"
+  i += outer_fun()
+  print "L" i "\n"
+}'
+testing "awk properly handles function from other scope" \
+       "awk '$prg'" \
+       "L1\n\nL2\n\n" \
+       "" ""
+
+prg='
+END {
+  i=1
+  print "L" i "\n"
+  i + trigger_error_fun()
+  print "L" i "\n"
+}'
+testing "awk properly handles undefined function" \
+       "awk '$prg' 2>&1" \
+       "L1\n\nawk: cmd. line:5: Call to undefined function\n" \
+       "" ""
+
+
 optional DESKTOP
 testing "awk hex const 1" "awk '{ print or(0xffffffff,1) }'" "4294967295\n" "" "\n"
 testing "awk hex const 2" "awk '{ print or(0x80000000,1) }'" "2147483649\n" "" "\n"