diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2022-03-27 08:07:51 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2022-03-27 08:07:51 +0300 |
commit | c2f6af30f602aa1a28e59491cbbfcf9145350f78 (patch) | |
tree | 0ce9863bebfb4e8b925f16b741a6d793dee1395f | |
parent | 0cdb4a0e28663cde0937601d26789ba5a6697848 (diff) | |
parent | 656b5bbec59a3094ae13f3bdac7ae2ef1e2fb5e9 (diff) | |
download | egawk-c2f6af30f602aa1a28e59491cbbfcf9145350f78.tar.gz egawk-c2f6af30f602aa1a28e59491cbbfcf9145350f78.tar.bz2 egawk-c2f6af30f602aa1a28e59491cbbfcf9145350f78.zip |
Merge branch 'gawk-5.1-stable'
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | awkgram.c | 14 | ||||
-rw-r--r-- | awkgram.y | 14 | ||||
-rw-r--r-- | pc/ChangeLog | 4 | ||||
-rw-r--r-- | pc/Makefile.tst | 7 | ||||
-rw-r--r-- | test/ChangeLog | 5 | ||||
-rw-r--r-- | test/Makefile.am | 4 | ||||
-rw-r--r-- | test/Makefile.in | 9 | ||||
-rw-r--r-- | test/Maketests | 5 | ||||
-rw-r--r-- | test/indirectcall3.awk | 16 | ||||
-rw-r--r-- | test/indirectcall3.ok | 0 |
11 files changed, 69 insertions, 17 deletions
@@ -1,3 +1,11 @@ +2022-03-27 Arnold D. Robbins <arnold@skeeve.com> + + Allow nested indirect function calls. Thanks to + Kaz Kylheku <kaz@kylheku.com> for the report. + + * awkgram.y (at_seen): Turn into an int that is incremented + and decremented as appropriate. + 2022-03-22 Arnold D. Robbins <arnold@skeeve.com> Make lint checks for builtin functions smarter. Initial @@ -156,7 +156,7 @@ static void merge_comments(INSTRUCTION *c1, INSTRUCTION *c2); static INSTRUCTION *make_braced_statements(INSTRUCTION *lbrace, INSTRUCTION *stmts, INSTRUCTION *rbrace); static void add_sign_to_num(NODE *n, char sign); -static bool at_seen = false; +static int at_seen = 0; static bool want_source = false; static bool want_namespace = false; static bool want_regexp = false; /* lexical scanning kludge */ @@ -2056,7 +2056,7 @@ yyreduce: #line 301 "awkgram.y" { want_source = false; - at_seen = false; + at_seen--; if (yyvsp[-1] != NULL && yyvsp[0] != NULL) { SRCFILE *s = (SRCFILE *) yyvsp[-1]; s->comment = yyvsp[0]; @@ -2070,7 +2070,7 @@ yyreduce: #line 311 "awkgram.y" { want_source = false; - at_seen = false; + at_seen--; if (yyvsp[-1] != NULL && yyvsp[0] != NULL) { SRCFILE *s = (SRCFILE *) yyvsp[-1]; s->comment = yyvsp[0]; @@ -2097,7 +2097,7 @@ yyreduce: want_source = false; want_namespace = false; - at_seen = false; + at_seen--; // this frees $3 storage in all cases set_namespace(yyvsp[-1], yyvsp[0]); @@ -2328,7 +2328,7 @@ yyreduce: #line 505 "awkgram.y" { yyval = yyvsp[0]; - at_seen = false; + at_seen--; } #line 2334 "awkgram.c" break; @@ -4297,7 +4297,7 @@ regular_print: */ yyval = list_prepend(yyvsp[0], t); - at_seen = false; + at_seen--; } #line 4303 "awkgram.c" break; @@ -6299,7 +6299,7 @@ retry: goto collect_regexp; } pushback(); - at_seen = true; + at_seen++; return lasttok = '@'; case '\\': @@ -111,7 +111,7 @@ static void merge_comments(INSTRUCTION *c1, INSTRUCTION *c2); static INSTRUCTION *make_braced_statements(INSTRUCTION *lbrace, INSTRUCTION *stmts, INSTRUCTION *rbrace); static void add_sign_to_num(NODE *n, char sign); -static bool at_seen = false; +static int at_seen = 0; static bool want_source = false; static bool want_namespace = false; static bool want_regexp = false; /* lexical scanning kludge */ @@ -300,7 +300,7 @@ rule | '@' LEX_INCLUDE source statement_term { want_source = false; - at_seen = false; + at_seen--; if ($3 != NULL && $4 != NULL) { SRCFILE *s = (SRCFILE *) $3; s->comment = $4; @@ -310,7 +310,7 @@ rule | '@' LEX_LOAD library statement_term { want_source = false; - at_seen = false; + at_seen--; if ($3 != NULL && $4 != NULL) { SRCFILE *s = (SRCFILE *) $3; s->comment = $4; @@ -333,7 +333,7 @@ rule want_source = false; want_namespace = false; - at_seen = false; + at_seen--; // this frees $3 storage in all cases set_namespace($3, $4); @@ -504,7 +504,7 @@ func_name | '@' LEX_EVAL { $$ = $2; - at_seen = false; + at_seen--; } ; @@ -2041,7 +2041,7 @@ func_call */ $$ = list_prepend($2, t); - at_seen = false; + at_seen--; } ; @@ -3791,7 +3791,7 @@ retry: goto collect_regexp; } pushback(); - at_seen = true; + at_seen++; return lasttok = '@'; case '\\': diff --git a/pc/ChangeLog b/pc/ChangeLog index 342ae067..ab61b56c 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2022-03-27 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.tst: Regenerated. + 2022-12-10 Andrew J. Schorr <aschorr@telemetry-investments.com> * Makefile.tst: Regenerated. diff --git a/pc/Makefile.tst b/pc/Makefile.tst index d74172d1..98ec2853 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -198,7 +198,7 @@ GAWK_EXT_TESTS = \ icasefs icasers id igncdym igncfs ignrcas2 ignrcas4 ignrcase \ incdupe incdupe2 incdupe3 incdupe4 incdupe5 incdupe6 incdupe7 \ include include2 indirectbuiltin indirectcall indirectcall2 \ - indirectbuiltin2 \ + indirectcall3 indirectbuiltin2 \ inf-nan-torture intarray iolint isarrayunset lint lintexp \ lintindex lintint lintlength lintold lintplus lintset lintwarn \ manyfiles match1 match2 match3 mbstr1 mbstr2 mixed1 mktime \ @@ -2928,6 +2928,11 @@ indirectcall2: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +indirectcall3: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + inf-nan-torture: @echo $@ $(ZOS_FAIL) @echo Expect $@ to fail with MinGW. diff --git a/test/ChangeLog b/test/ChangeLog index 44a0e951..51aad696 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2022-03-27 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (EXTRA_DIST): indirectcall3, new test. + * indirectcall3.awk, indirectcall3.ok: New files. + 2022-02-27 Arnold D. Robbins <arnold@skeeve.com> * badargs.ok: Updated after code change. diff --git a/test/Makefile.am b/test/Makefile.am index ddca3f59..e6652965 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -575,6 +575,8 @@ EXTRA_DIST = \ indirectbuiltin2.ok \ indirectcall2.awk \ indirectcall2.ok \ + indirectcall3.awk \ + indirectcall3.ok \ indirectcall.awk \ indirectcall.in \ indirectcall.ok \ @@ -1460,7 +1462,7 @@ GAWK_EXT_TESTS = \ icasefs icasers id igncdym igncfs ignrcas2 ignrcas4 ignrcase \ incdupe incdupe2 incdupe3 incdupe4 incdupe5 incdupe6 incdupe7 \ include include2 indirectbuiltin indirectcall indirectcall2 \ - indirectbuiltin2 \ + indirectcall3 indirectbuiltin2 \ inf-nan-torture intarray iolint isarrayunset lint lintexp \ lintindex lintint lintlength lintold lintplus lintset lintwarn \ manyfiles match1 match2 match3 mbstr1 mbstr2 mixed1 mktime \ diff --git a/test/Makefile.in b/test/Makefile.in index d974a98c..ed60771d 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -841,6 +841,8 @@ EXTRA_DIST = \ indirectbuiltin2.ok \ indirectcall2.awk \ indirectcall2.ok \ + indirectcall3.awk \ + indirectcall3.ok \ indirectcall.awk \ indirectcall.in \ indirectcall.ok \ @@ -1726,7 +1728,7 @@ GAWK_EXT_TESTS = \ icasefs icasers id igncdym igncfs ignrcas2 ignrcas4 ignrcase \ incdupe incdupe2 incdupe3 incdupe4 incdupe5 incdupe6 incdupe7 \ include include2 indirectbuiltin indirectcall indirectcall2 \ - indirectbuiltin2 \ + indirectcall3 indirectbuiltin2 \ inf-nan-torture intarray iolint isarrayunset lint lintexp \ lintindex lintint lintlength lintold lintplus lintset lintwarn \ manyfiles match1 match2 match3 mbstr1 mbstr2 mixed1 mktime \ @@ -4620,6 +4622,11 @@ indirectcall2: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +indirectcall3: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + inf-nan-torture: @echo $@ $(ZOS_FAIL) @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index 10ef252f..d21d4c6c 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1653,6 +1653,11 @@ indirectcall2: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +indirectcall3: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + inf-nan-torture: @echo $@ $(ZOS_FAIL) @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/indirectcall3.awk b/test/indirectcall3.awk new file mode 100644 index 00000000..67181112 --- /dev/null +++ b/test/indirectcall3.awk @@ -0,0 +1,16 @@ +function okay(f1, f2, arg) +{ + return @f1(arg) +} + +function not_so_hot(f1, f2, arg) +{ + return @f1(arg, @f2(arg)) # line 8: error here +} + +function workaround(f1, f2, arg, + tmp) +{ + tmp = @f2(arg) + return @f1(arg, tmp) +} diff --git a/test/indirectcall3.ok b/test/indirectcall3.ok new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/indirectcall3.ok |