diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | interpret.h | 28 | ||||
-rw-r--r-- | test/ChangeLog | 9 | ||||
-rw-r--r-- | test/Makefile.am | 91 | ||||
-rw-r--r-- | test/Makefile.in | 132 | ||||
-rw-r--r-- | test/Maketests | 40 | ||||
-rw-r--r-- | test/functab1.awk | 3 | ||||
-rw-r--r-- | test/functab1.ok | 2 | ||||
-rw-r--r-- | test/functab2.awk | 8 | ||||
-rw-r--r-- | test/functab2.ok | 2 | ||||
-rw-r--r-- | test/functab3.awk | 10 | ||||
-rw-r--r-- | test/functab3.ok | 2 | ||||
-rw-r--r-- | test/functab4.awk | 14 | ||||
-rw-r--r-- | test/functab4.ok | 3 | ||||
-rw-r--r-- | test/id.awk | 11 | ||||
-rw-r--r-- | test/id.ok | 32 | ||||
-rw-r--r-- | test/symtab1.awk | 18 | ||||
-rw-r--r-- | test/symtab1.ok | 31 | ||||
-rw-r--r-- | test/symtab2.awk | 6 | ||||
-rw-r--r-- | test/symtab2.ok | 2 | ||||
-rw-r--r-- | test/symtab3.awk | 1 | ||||
-rw-r--r-- | test/symtab3.ok | 2 |
22 files changed, 374 insertions, 78 deletions
@@ -1,3 +1,8 @@ +2012-10-04 Arnold D. Robbins <arnold@skeeve.com> + + * interpret.h (Op_Subscript): Added lint warnings for FUNCTAB + and SYMTAB. + 2012-10-02 Arnold D. Robbins <arnold@skeeve.com> * awk.h (func_table): Declare. diff --git a/interpret.h b/interpret.h index 5bd3e3a6..ab6c9b33 100644 --- a/interpret.h +++ b/interpret.h @@ -212,6 +212,12 @@ top: /* for FUNCTAB, get the name as the element value */ if (t1 == func_table) { + static bool warned = false; + + if (do_lint && ! warned) { + warned = true; + lintwarn(_("FUNCTAB is a gawk extension")); + } r = t2; } else { r = *assoc_lookup(t1, t2); @@ -219,8 +225,16 @@ top: DEREF(t2); /* for SYMTAB, step through to the actual variable */ - if (t1 == symbol_table && r->type == Node_var) - r = r->var_value; + if (t1 == symbol_table) { + static bool warned = false; + + if (do_lint && ! warned) { + warned = true; + lintwarn(_("SYMTAB is a gawk extension")); + } + if (r->type == Node_var) + r = r->var_value; + } if (r->type == Node_val) UPREF(r); @@ -909,9 +923,13 @@ match_re: f = lookup(t1->stptr); } - if (f == NULL || f->type != Node_func) - fatal(_("function called indirectly through `%s' does not exist"), - pc->func_name); + if (f == NULL || f->type != Node_func) { + if (f->type == Node_ext_func) + fatal(_("cannot (yet) call extension functions indirectly")); + else + fatal(_("function called indirectly through `%s' does not exist"), + pc->func_name); + } pc->func_body = f; /* save for next call */ ni = setup_frame(pc); diff --git a/test/ChangeLog b/test/ChangeLog index b8e55945..ff38cdcd 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,12 @@ +2012-10-04 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (functab1, functab2, functab3, functab4, id, symtab1, + symtab2, symtab3): New tests. + * functab1.awk, functab1.ok, functab2.awk, functab2.ok, functab3.awk, + functab3.ok, functab4.awk, functab4.ok, id.awk, id.ok, symtab1.awk, + symtab1.ok, symtab2.awk, symtab2.ok, symtab3.awk, symtab3.ok: + New files. + 2012-09-23 Arnold D. Robbins <arnold@skeeve.com> * lintwarn.ok: Updated. diff --git a/test/Makefile.am b/test/Makefile.am index 962ab6b2..1f20b923 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -47,8 +47,6 @@ EXTRA_DIST = \ anchgsub.awk \ anchgsub.in \ anchgsub.ok \ - arraysort.awk \ - arraysort.ok \ argarray.awk \ argarray.in \ argarray.ok \ @@ -62,6 +60,8 @@ EXTRA_DIST = \ arrayprm3.ok \ arrayref.awk \ arrayref.ok \ + arraysort.awk \ + arraysort.ok \ arrymem1.awk \ arrymem1.ok \ arryref2.awk \ @@ -160,10 +160,10 @@ EXTRA_DIST = \ defref.ok \ delargv.awk \ delargv.ok \ - delarprm.awk \ - delarprm.ok \ delarpm2.awk \ delarpm2.ok \ + delarprm.awk \ + delarprm.ok \ delfunc.awk \ delfunc.ok \ delsub.awk \ @@ -199,8 +199,8 @@ EXTRA_DIST = \ fcall_exit.awk \ fcall_exit.ok \ fcall_exit2.awk \ - fcall_exit2.ok \ fcall_exit2.in \ + fcall_exit2.ok \ fflush.ok \ fflush.sh \ fieldwdth.awk \ @@ -214,9 +214,9 @@ EXTRA_DIST = \ fldchgnf.awk \ fldchgnf.in \ fldchgnf.ok \ + fmtspcl-mpfr.ok \ fmtspcl.awk \ fmtspcl.tok \ - fmtspcl-mpfr.ok \ fmttest.awk \ fmttest.ok \ fnamedat.awk \ @@ -227,9 +227,9 @@ EXTRA_DIST = \ fnarray2.awk \ fnarray2.in \ fnarray2.ok \ + fnarydel-mpfr.ok \ fnarydel.awk \ fnarydel.ok \ - fnarydel-mpfr.ok \ fnaryscl.awk \ fnaryscl.ok \ fnasgnm.awk \ @@ -239,13 +239,19 @@ EXTRA_DIST = \ fnmatch.ok \ fnmisc.awk \ fnmisc.ok \ + fnparydl-mpfr.ok \ fnparydl.awk \ fnparydl.ok \ - fnparydl-mpfr.ok \ + fordel.awk \ + fordel.ok \ fork.awk \ fork.ok \ fork2.awk \ fork2.ok \ + forref.awk \ + forref.ok \ + forsimp.awk \ + forsimp.ok \ fpat1.awk \ fpat1.in \ fpat1.ok \ @@ -257,12 +263,6 @@ EXTRA_DIST = \ fpatnull.awk \ fpatnull.in \ fpatnull.ok \ - fordel.awk \ - fordel.ok \ - forref.awk \ - forref.ok \ - forsimp.awk \ - forsimp.ok \ fsbs.awk \ fsbs.in \ fsbs.ok \ @@ -279,6 +279,14 @@ EXTRA_DIST = \ fstabplus.in \ fstabplus.ok \ fts.awk \ + functab1.awk \ + functab1.ok \ + functab2.awk \ + functab2.ok \ + functab3.awk \ + functab3.ok \ + functab4.awk \ + functab4.ok \ funlen.awk \ funlen.in \ funlen.ok \ @@ -367,29 +375,31 @@ EXTRA_DIST = \ icasers.awk \ icasers.in \ icasers.ok \ + id.awk \ + id.ok \ igncdym.awk \ igncdym.in \ igncdym.ok \ igncfs.awk \ igncfs.in \ igncfs.ok \ + ignrcas2.awk \ + ignrcas2.ok \ ignrcase.awk \ ignrcase.in \ ignrcase.ok \ - ignrcas2.awk \ - ignrcas2.ok \ - inclib.awk \ - include.awk \ - include.ok \ - include2.ok \ incdupe.ok \ incdupe2.ok \ incdupe3.ok \ - inchello.awk \ incdupe4.ok \ incdupe5.ok \ incdupe6.ok \ incdupe7.ok \ + inchello.awk \ + inclib.awk \ + include.awk \ + include.ok \ + include2.ok \ indirectcall.awk \ indirectcall.in \ indirectcall.ok \ @@ -434,8 +444,8 @@ EXTRA_DIST = \ longsub.in \ longsub.ok \ longwrds.awk \ - longwrds.ok \ longwrds.in \ + longwrds.ok \ manglprm.awk \ manglprm.in \ manglprm.ok \ @@ -602,9 +612,6 @@ EXTRA_DIST = \ prdupval.awk \ prdupval.in \ prdupval.ok \ - profile2.ok \ - profile3.awk \ - profile3.ok \ prec.awk \ prec.ok \ printf0.awk \ @@ -626,24 +633,30 @@ EXTRA_DIST = \ prmreuse.ok \ procinfs.awk \ procinfs.ok \ + profile2.ok \ + profile3.awk \ + profile3.ok \ prt1eval.awk \ prt1eval.ok \ prtoeval.awk \ prtoeval.ok \ pty1.awk \ pty1.ok \ + rand-mpfr.ok \ rand.awk \ rand.ok \ - rand-mpfr.ok \ range1.awk \ range1.in \ range1.ok \ - readdir0.awk \ readdir.awk \ + readdir0.awk \ rebt8b1.awk \ rebt8b1.ok \ rebt8b2.awk \ rebt8b2.ok \ + rebuf.awk \ + rebuf.in \ + rebuf.ok \ redfilnm.awk \ redfilnm.in \ redfilnm.ok \ @@ -657,9 +670,6 @@ EXTRA_DIST = \ regtest.sh \ regx8bit.awk \ regx8bit.ok \ - rebuf.awk \ - rebuf.in \ - rebuf.ok \ reindops.awk \ reindops.in \ reindops.ok \ @@ -757,16 +767,16 @@ EXTRA_DIST = \ sprintfc.ok \ strcat1.awk \ strcat1.ok \ + strftime.awk \ + strftlng.awk \ + strftlng.ok \ + strnum1.awk \ + strnum1.ok \ strtod.awk \ strtod.in \ strtod.ok \ - strnum1.awk \ - strnum1.ok \ strtonum.awk \ strtonum.ok \ - strftime.awk \ - strftlng.awk \ - strftlng.ok \ subamp.awk \ subamp.in \ subamp.ok \ @@ -783,6 +793,12 @@ EXTRA_DIST = \ swaplns.ok \ switch2.awk \ switch2.ok \ + symtab1.awk \ + symtab1.ok \ + symtab2.awk \ + symtab2.ok \ + symtab3.awk \ + symtab3.ok \ synerr1.awk \ synerr1.ok \ synerr2.awk \ @@ -837,6 +853,7 @@ EXTRA_DIST = \ zeroflag.awk \ zeroflag.ok + TESTS_WE_ARE_NOT_DOING_YET_FIXME_ONE_DAY = longdbl # Get rid of core files when cleaning and generated .ok file @@ -890,9 +907,10 @@ GAWK_EXT_TESTS = \ backw badargs beginfile1 beginfile2 binmode1 charasbytes \ clos1way delsub devfd devfd1 devfd2 dumpvars exit \ fieldwdth fpat1 fpat2 fpat3 fpatnull fsfwfs funlen \ + functab1 functab2 functab3 functab4 \ fwtest fwtest2 fwtest3 \ gensub gensub2 getlndir gnuops2 gnuops3 gnureops \ - icasefs icasers igncdym igncfs ignrcas2 ignrcase indirectcall \ + icasefs icasers id igncdym igncfs ignrcas2 ignrcase indirectcall \ lint lintold lintwarn \ manyfiles match1 match2 match3 mbstr1 \ nastyparm next nondec nondec2 \ @@ -901,6 +919,7 @@ GAWK_EXT_TESTS = \ rebuf regx8bit reint reint2 rsstart1 \ rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \ strtonum switch2 \ + symtab1 symtab2 symtab3 \ include include2 incdupe incdupe2 incdupe3 \ incdupe4 incdupe5 incdupe6 incdupe7 diff --git a/test/Makefile.in b/test/Makefile.in index cc8091a0..5bb75637 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.3 from Makefile.am. +# Makefile.in generated by automake 1.12.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. @@ -259,8 +259,6 @@ EXTRA_DIST = \ anchgsub.awk \ anchgsub.in \ anchgsub.ok \ - arraysort.awk \ - arraysort.ok \ argarray.awk \ argarray.in \ argarray.ok \ @@ -274,6 +272,8 @@ EXTRA_DIST = \ arrayprm3.ok \ arrayref.awk \ arrayref.ok \ + arraysort.awk \ + arraysort.ok \ arrymem1.awk \ arrymem1.ok \ arryref2.awk \ @@ -372,10 +372,10 @@ EXTRA_DIST = \ defref.ok \ delargv.awk \ delargv.ok \ - delarprm.awk \ - delarprm.ok \ delarpm2.awk \ delarpm2.ok \ + delarprm.awk \ + delarprm.ok \ delfunc.awk \ delfunc.ok \ delsub.awk \ @@ -411,8 +411,8 @@ EXTRA_DIST = \ fcall_exit.awk \ fcall_exit.ok \ fcall_exit2.awk \ - fcall_exit2.ok \ fcall_exit2.in \ + fcall_exit2.ok \ fflush.ok \ fflush.sh \ fieldwdth.awk \ @@ -426,9 +426,9 @@ EXTRA_DIST = \ fldchgnf.awk \ fldchgnf.in \ fldchgnf.ok \ + fmtspcl-mpfr.ok \ fmtspcl.awk \ fmtspcl.tok \ - fmtspcl-mpfr.ok \ fmttest.awk \ fmttest.ok \ fnamedat.awk \ @@ -439,9 +439,9 @@ EXTRA_DIST = \ fnarray2.awk \ fnarray2.in \ fnarray2.ok \ + fnarydel-mpfr.ok \ fnarydel.awk \ fnarydel.ok \ - fnarydel-mpfr.ok \ fnaryscl.awk \ fnaryscl.ok \ fnasgnm.awk \ @@ -451,13 +451,19 @@ EXTRA_DIST = \ fnmatch.ok \ fnmisc.awk \ fnmisc.ok \ + fnparydl-mpfr.ok \ fnparydl.awk \ fnparydl.ok \ - fnparydl-mpfr.ok \ + fordel.awk \ + fordel.ok \ fork.awk \ fork.ok \ fork2.awk \ fork2.ok \ + forref.awk \ + forref.ok \ + forsimp.awk \ + forsimp.ok \ fpat1.awk \ fpat1.in \ fpat1.ok \ @@ -469,12 +475,6 @@ EXTRA_DIST = \ fpatnull.awk \ fpatnull.in \ fpatnull.ok \ - fordel.awk \ - fordel.ok \ - forref.awk \ - forref.ok \ - forsimp.awk \ - forsimp.ok \ fsbs.awk \ fsbs.in \ fsbs.ok \ @@ -491,6 +491,14 @@ EXTRA_DIST = \ fstabplus.in \ fstabplus.ok \ fts.awk \ + functab1.awk \ + functab1.ok \ + functab2.awk \ + functab2.ok \ + functab3.awk \ + functab3.ok \ + functab4.awk \ + functab4.ok \ funlen.awk \ funlen.in \ funlen.ok \ @@ -579,29 +587,31 @@ EXTRA_DIST = \ icasers.awk \ icasers.in \ icasers.ok \ + id.awk \ + id.ok \ igncdym.awk \ igncdym.in \ igncdym.ok \ igncfs.awk \ igncfs.in \ igncfs.ok \ + ignrcas2.awk \ + ignrcas2.ok \ ignrcase.awk \ ignrcase.in \ ignrcase.ok \ - ignrcas2.awk \ - ignrcas2.ok \ - inclib.awk \ - include.awk \ - include.ok \ - include2.ok \ incdupe.ok \ incdupe2.ok \ incdupe3.ok \ - inchello.awk \ incdupe4.ok \ incdupe5.ok \ incdupe6.ok \ incdupe7.ok \ + inchello.awk \ + inclib.awk \ + include.awk \ + include.ok \ + include2.ok \ indirectcall.awk \ indirectcall.in \ indirectcall.ok \ @@ -646,8 +656,8 @@ EXTRA_DIST = \ longsub.in \ longsub.ok \ longwrds.awk \ - longwrds.ok \ longwrds.in \ + longwrds.ok \ manglprm.awk \ manglprm.in \ manglprm.ok \ @@ -814,9 +824,6 @@ EXTRA_DIST = \ prdupval.awk \ prdupval.in \ prdupval.ok \ - profile2.ok \ - profile3.awk \ - profile3.ok \ prec.awk \ prec.ok \ printf0.awk \ @@ -838,24 +845,30 @@ EXTRA_DIST = \ prmreuse.ok \ procinfs.awk \ procinfs.ok \ + profile2.ok \ + profile3.awk \ + profile3.ok \ prt1eval.awk \ prt1eval.ok \ prtoeval.awk \ prtoeval.ok \ pty1.awk \ pty1.ok \ + rand-mpfr.ok \ rand.awk \ rand.ok \ - rand-mpfr.ok \ range1.awk \ range1.in \ range1.ok \ - readdir0.awk \ readdir.awk \ + readdir0.awk \ rebt8b1.awk \ rebt8b1.ok \ rebt8b2.awk \ rebt8b2.ok \ + rebuf.awk \ + rebuf.in \ + rebuf.ok \ redfilnm.awk \ redfilnm.in \ redfilnm.ok \ @@ -869,9 +882,6 @@ EXTRA_DIST = \ regtest.sh \ regx8bit.awk \ regx8bit.ok \ - rebuf.awk \ - rebuf.in \ - rebuf.ok \ reindops.awk \ reindops.in \ reindops.ok \ @@ -969,16 +979,16 @@ EXTRA_DIST = \ sprintfc.ok \ strcat1.awk \ strcat1.ok \ + strftime.awk \ + strftlng.awk \ + strftlng.ok \ + strnum1.awk \ + strnum1.ok \ strtod.awk \ strtod.in \ strtod.ok \ - strnum1.awk \ - strnum1.ok \ strtonum.awk \ strtonum.ok \ - strftime.awk \ - strftlng.awk \ - strftlng.ok \ subamp.awk \ subamp.in \ subamp.ok \ @@ -995,6 +1005,12 @@ EXTRA_DIST = \ swaplns.ok \ switch2.awk \ switch2.ok \ + symtab1.awk \ + symtab1.ok \ + symtab2.awk \ + symtab2.ok \ + symtab3.awk \ + symtab3.ok \ synerr1.awk \ synerr1.ok \ synerr2.awk \ @@ -1102,9 +1118,10 @@ GAWK_EXT_TESTS = \ backw badargs beginfile1 beginfile2 binmode1 charasbytes \ clos1way delsub devfd devfd1 devfd2 dumpvars exit \ fieldwdth fpat1 fpat2 fpat3 fpatnull fsfwfs funlen \ + functab1 functab2 functab3 functab4 \ fwtest fwtest2 fwtest3 \ gensub gensub2 getlndir gnuops2 gnuops3 gnureops \ - icasefs icasers igncdym igncfs ignrcas2 ignrcase indirectcall \ + icasefs icasers id igncdym igncfs ignrcas2 ignrcase indirectcall \ lint lintold lintwarn \ manyfiles match1 match2 match3 mbstr1 \ nastyparm next nondec nondec2 \ @@ -1113,6 +1130,7 @@ GAWK_EXT_TESTS = \ rebuf regx8bit reint reint2 rsstart1 \ rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \ strtonum switch2 \ + symtab1 symtab2 symtab3 \ include include2 incdupe incdupe2 incdupe3 \ incdupe4 incdupe5 incdupe6 incdupe7 @@ -3014,6 +3032,26 @@ funlen: @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +functab1: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +functab2: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +functab3: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +functab4: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + fwtest: @echo $@ @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @@ -3069,6 +3107,11 @@ icasers: @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +id: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + igncdym: @echo $@ @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @@ -3204,6 +3247,21 @@ switch2: @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +symtab1: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +symtab2: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +symtab3: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + include: @echo $@ @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index 3951c3ff..6490410c 100644 --- a/test/Maketests +++ b/test/Maketests @@ -960,6 +960,26 @@ funlen: @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +functab1: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +functab2: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +functab3: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +functab4: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + fwtest: @echo $@ @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @@ -1015,6 +1035,11 @@ icasers: @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +id: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + igncdym: @echo $@ @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @@ -1150,6 +1175,21 @@ switch2: @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +symtab1: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +symtab2: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +symtab3: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + include: @echo $@ @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/functab1.awk b/test/functab1.awk new file mode 100644 index 00000000..05692684 --- /dev/null +++ b/test/functab1.awk @@ -0,0 +1,3 @@ +BEGIN { + delete FUNCTAB +} diff --git a/test/functab1.ok b/test/functab1.ok new file mode 100644 index 00000000..2a60a4cb --- /dev/null +++ b/test/functab1.ok @@ -0,0 +1,2 @@ +gawk: functab1.awk:3: fatal: `delete' is not allowed with FUNCTAB +EXIT CODE: 2 diff --git a/test/functab2.awk b/test/functab2.awk new file mode 100644 index 00000000..9a07dfc3 --- /dev/null +++ b/test/functab2.awk @@ -0,0 +1,8 @@ +function foo() +{ + print "foo!" +} + +BEGIN { + FUNCTAB["a"] = "something" +} diff --git a/test/functab2.ok b/test/functab2.ok new file mode 100644 index 00000000..32b07ad3 --- /dev/null +++ b/test/functab2.ok @@ -0,0 +1,2 @@ +gawk: functab2.awk:7: fatal: cannot assign to elements of FUNCTAB +EXIT CODE: 2 diff --git a/test/functab3.awk b/test/functab3.awk new file mode 100644 index 00000000..98fa49b1 --- /dev/null +++ b/test/functab3.awk @@ -0,0 +1,10 @@ +function foo() +{ + print "foo!" +} + +BEGIN { + x = FUNCTAB["foo"] + print "x =", x + @x() +} diff --git a/test/functab3.ok b/test/functab3.ok new file mode 100644 index 00000000..66f53d72 --- /dev/null +++ b/test/functab3.ok @@ -0,0 +1,2 @@ +x = foo +foo! diff --git a/test/functab4.awk b/test/functab4.awk new file mode 100644 index 00000000..0d9d4267 --- /dev/null +++ b/test/functab4.awk @@ -0,0 +1,14 @@ +@load "filefuncs" + +function foo() +{ + print "foo!" +} + +BEGIN { + x = FUNCTAB["chdir"] + print "x =", x + @x("/tmp") + printf "we are now in --> " + system("/bin/pwd || /usr/bin/pwd") +} diff --git a/test/functab4.ok b/test/functab4.ok new file mode 100644 index 00000000..70a520b7 --- /dev/null +++ b/test/functab4.ok @@ -0,0 +1,3 @@ +x = chdir +gawk: functab4.awk:11: fatal: cannot (yet) call extension functions indirectly +EXIT CODE: 2 diff --git a/test/id.awk b/test/id.awk new file mode 100644 index 00000000..2a35e42c --- /dev/null +++ b/test/id.awk @@ -0,0 +1,11 @@ +function function1() +{ + print "function1" +} + +BEGIN { + an_array[1] = 1 + + for (i in PROCINFO["identifiers"]) + printf("%s -> %s\n", i, PROCINFO["identifiers"][i]) +} diff --git a/test/id.ok b/test/id.ok new file mode 100644 index 00000000..d31573de --- /dev/null +++ b/test/id.ok @@ -0,0 +1,32 @@ +FUNCTAB -> array +ARGV -> array +SYMTAB -> array +ORS -> scalar +ROUNDMODE -> scalar +i -> untyped +OFS -> scalar +ERRNO -> scalar +FNR -> scalar +LINT -> scalar +IGNORECASE -> scalar +NR -> scalar +function1 -> user +ARGIND -> scalar +NF -> scalar +TEXTDOMAIN -> scalar +CONVFMT -> scalar +FIELDWIDTHS -> scalar +ARGC -> scalar +an_array -> untyped +PROCINFO -> array +PREC -> scalar +SUBSEP -> scalar +FPAT -> scalar +RS -> scalar +FS -> scalar +OFMT -> scalar +RLENGTH -> scalar +RT -> scalar +BINMODE -> scalar +FILENAME -> scalar +RSTART -> scalar diff --git a/test/symtab1.awk b/test/symtab1.awk new file mode 100644 index 00000000..6ca7d632 --- /dev/null +++ b/test/symtab1.awk @@ -0,0 +1,18 @@ +function dumparray(name, array, i) +{ + for (i in array) + if (isarray(array[i])) + dumparray(name "[" i "]", array[i]) + else + printf("%s[%s] = %s\n", name, i, array[i]) +} + +BEGIN { + a[1] = 1 + a[2][1] = 21 + for (i in SYMTAB) + if (isarray(SYMTAB[i])) + dumparray(i, SYMTAB[i]) + else + printf("SYMTAB[\"%s\"] = \"%s\"\n", i, SYMTAB[i]) +} diff --git a/test/symtab1.ok b/test/symtab1.ok new file mode 100644 index 00000000..3e435dd2 --- /dev/null +++ b/test/symtab1.ok @@ -0,0 +1,31 @@ +ARGV[0] = gawk +SYMTAB["i"] = "i" +SYMTAB["ROUNDMODE"] = "N" +SYMTAB["ORS"] = " +" +SYMTAB["OFS"] = " " +SYMTAB["LINT"] = "0" +SYMTAB["FNR"] = "0" +SYMTAB["ERRNO"] = "" +SYMTAB["NR"] = "0" +SYMTAB["IGNORECASE"] = "0" +SYMTAB["TEXTDOMAIN"] = "messages" +SYMTAB["NF"] = "-1" +SYMTAB["ARGIND"] = "0" +a[1] = 1 +a[2][1] = 21 +SYMTAB["ARGC"] = "1" +SYMTAB["FIELDWIDTHS"] = "" +SYMTAB["CONVFMT"] = "%.6g" +SYMTAB["SUBSEP"] = "" +SYMTAB["PREC"] = "53" +SYMTAB["RS"] = " +" +SYMTAB["FPAT"] = "[^[:space:]]+" +SYMTAB["RT"] = "" +SYMTAB["RLENGTH"] = "0" +SYMTAB["OFMT"] = "%.6g" +SYMTAB["FS"] = " " +SYMTAB["RSTART"] = "0" +SYMTAB["FILENAME"] = "" +SYMTAB["BINMODE"] = "0" diff --git a/test/symtab2.awk b/test/symtab2.awk new file mode 100644 index 00000000..bb26f75d --- /dev/null +++ b/test/symtab2.awk @@ -0,0 +1,6 @@ +BEGIN { + a = 5 + printf "a = %d, SYMTAB[\"a\"] = %d\n", a, SYMTAB["a"] + SYMTAB["a"] = 4 + printf "a = %d, SYMTAB[\"a\"] = %d\n", a, SYMTAB["a"] +} diff --git a/test/symtab2.ok b/test/symtab2.ok new file mode 100644 index 00000000..23d2bf69 --- /dev/null +++ b/test/symtab2.ok @@ -0,0 +1,2 @@ +a = 5, SYMTAB["a"] = 5 +a = 4, SYMTAB["a"] = 4 diff --git a/test/symtab3.awk b/test/symtab3.awk new file mode 100644 index 00000000..4c2026dc --- /dev/null +++ b/test/symtab3.awk @@ -0,0 +1 @@ +BEGIN { a = 5 ; delete SYMTAB["a"] } diff --git a/test/symtab3.ok b/test/symtab3.ok new file mode 100644 index 00000000..5b283583 --- /dev/null +++ b/test/symtab3.ok @@ -0,0 +1,2 @@ +gawk: symtab3.awk:1: fatal: `delete' is not allowed with SYMTAB +EXIT CODE: 2 |