diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2020-07-08 19:24:12 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2020-07-08 19:24:12 +0300 |
commit | c372dc85effd4fa1a5f955ae88a9f0d003c92b5a (patch) | |
tree | 49a5f62bcea87fd80f7284c905370a0c2f37c8b3 | |
parent | b1400a29ad5776b2e0c867a171b466a05605461e (diff) | |
parent | 2a3d876938d39d03cf563d1bd8382c316839c08d (diff) | |
download | egawk-c372dc85effd4fa1a5f955ae88a9f0d003c92b5a.tar.gz egawk-c372dc85effd4fa1a5f955ae88a9f0d003c92b5a.tar.bz2 egawk-c372dc85effd4fa1a5f955ae88a9f0d003c92b5a.zip |
Merge branch 'gawk-5.1-stable'
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | awk.h | 1 | ||||
-rw-r--r-- | mpfr.c | 20 | ||||
-rw-r--r-- | node.c | 5 | ||||
-rw-r--r-- | pc/Makefile.tst | 31 | ||||
-rw-r--r-- | str_array.c | 4 | ||||
-rw-r--r-- | test/ChangeLog | 7 | ||||
-rw-r--r-- | test/Makefile.am | 11 | ||||
-rw-r--r-- | test/Makefile.in | 28 | ||||
-rw-r--r-- | test/Maketests | 18 | ||||
-rw-r--r-- | test/arraytype-mpfr.ok | 16 | ||||
-rw-r--r-- | test/arrdbg-mpfr.ok | 12 | ||||
-rw-r--r-- | test/forcenum-mpfr.ok | 9 | ||||
-rw-r--r-- | test/numrange-mpfr.ok | 2 |
14 files changed, 148 insertions, 29 deletions
@@ -1,3 +1,16 @@ +2020-07-08 Arnold D. Robbins <arnold@skeeve.com> + + * str_array.c (str_lookup): If a pure number, copy to a string. Fixes + at printfchar test for MPFR. + + Fix typeregex2 and typedregex3 tests for MPFR: + + * mpfr.c (mpg_zero): No longer static inline. + (force_mpnum): Handle the case of a strongly typed regex. + (mpg_interpret): Add tracing for do_itrace. + * awk.h (mpg_zero): Add declaration. + * node.c (make_typed_regex): Init to zero for MPFR via mpg_zero. + 2020-07-07 Arnold D. Robbins <arnold@skeeve.com> * awk.h: Turn all the flag defines into enums. GDB can then show @@ -1673,6 +1673,7 @@ extern void cleanup_mpfr(void); extern NODE *mpg_node(unsigned int); extern const char *mpg_fmt(const char *, ...); extern int mpg_strtoui(mpz_ptr, char *, size_t, char **, int); +extern void mpg_zero(NODE *n); #endif /* msg.c */ extern void gawk_exit(int status); @@ -247,7 +247,7 @@ mpg_maybe_float(const char *str, int use_locale) /* mpg_zero --- initialize with arbitrary-precision integer(GMP) and set value to zero */ -static inline void +void mpg_zero(NODE *n) { if (is_mpg_float(n)) { @@ -271,7 +271,7 @@ force_mpnum(NODE *n, int do_nondec, int use_locale) char save; int tval, base = 10; - if (n->stlen == 0) { + if (n->stlen == 0 || (n->flags & REGEX) != 0) { mpg_zero(n); return false; } @@ -1525,7 +1525,13 @@ mpg_interpret(INSTRUCTION **cp) NODE **lhs; int tval; /* the ternary value returned by a MPFR function */ - switch ((op = pc->opcode)) { + op = pc->opcode; + if (do_itrace) { + fprintf(stderr, "+ mpg_interpret: %s: ", opcode2str(op)); + fflush(stderr); + } + + switch (op) { case Op_plus_i: t2 = force_number(pc->memory); goto plus; @@ -1750,10 +1756,18 @@ mod: break; default: + if (do_itrace) { + fprintf(stderr, "unhandled\n", opcode2str(op)); + fflush(stderr); + } return true; /* unhandled */ } *cp = pc->nexti; /* next instruction to execute */ + if (do_itrace) { + fprintf(stderr, "handled\n", opcode2str(op)); + fflush(stderr); + } return false; } @@ -479,6 +479,11 @@ make_typed_regex(const char *re, size_t len) n2 = make_string(re, len); n2->typed_re = n; +#if HAVE_MPFR + if (do_mpfr) + mpg_zero(n2); + else +#endif n2->numbr = 0; n2->flags |= NUMCUR|STRCUR|REGEX; n2->flags &= ~(STRING|NUMBER); diff --git a/pc/Makefile.tst b/pc/Makefile.tst index e998e421..6a1d917a 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -258,7 +258,7 @@ NEED_LINT = \ NEED_LINT_OLD = lintold # List of tests that must be run with -M -NEED_MPFR = mpfrbigint mpfrbigint2 mpfrcase mpfrexprange mpfrfield mpfrieee mpfrmemok1 \ +NEED_MPFR = mpfrbigint mpfrbigint2 mpfrcase mpfrcase2 mpfrexprange mpfrfield mpfrieee mpfrmemok1 \ mpfrnegzero mpfrnonum mpfrnr mpfrrem mpfrrnd mpfrrndeval mpfrsort mpfrsqrt \ mpfrstrtonum mpgforcenum mpfruplus mpfranswer42 @@ -296,7 +296,7 @@ FAIL_CODE1 = \ # List of files which have .ok versions for MPFR CHECK_MPFR = \ - rand fnarydel fnparydl + arraytype arrdbg fnarydel fnparydl forcenum numrange rand # Lists of tests that need particular locales @@ -1177,7 +1177,9 @@ ignrcas3:: arrdbg: @echo $@ @$(AWK) -v "okfile=./$@.ok" -f "$(srcdir)"/$@.awk | grep array_f >_$@ || echo EXIT CODE: $$? >> _$@ - @-$(CMP) ./$@.ok _$@ && rm -f _$@ ./$@.ok + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi sourcesplit: @echo $@ @@ -1910,8 +1912,10 @@ numindex: numrange: @echo $@ $(ZOS_FAIL) - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + @AWKPATH="$(srcdir)" $(AWK) $(AWKFLAGS) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi numstr1: @echo $@ @@ -2550,8 +2554,10 @@ arraysort2: arraytype: @echo $@ - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + @AWKPATH="$(srcdir)" $(AWK) $(AWKFLAGS) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi backw: @echo $@ @@ -2643,8 +2649,10 @@ fieldwdth: forcenum: @echo $@ $(ZOS_FAIL) - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk --non-decimal-data >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + @AWKPATH="$(srcdir)" $(AWK) $(AWKFLAGS) -f $@.awk --non-decimal-data >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi fpat1: @echo $@ @@ -3502,6 +3510,11 @@ mpfrcase: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk -M < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +mpfrcase2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk -M < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + mpfrfield: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk -M < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/str_array.c b/str_array.c index c90f7861..84bd2f02 100644 --- a/str_array.c +++ b/str_array.c @@ -168,9 +168,11 @@ str_lookup(NODE *symbol, NODE *subs) // Special cases: // 1. The string was generated using CONVFMT. // 2. The string was from an unassigned variable. - // 3. The string was from an unassigned field. + // 3. The string was from a straight number, perniciously, from MPFR + // 4. The string was from an unassigned field. if ( subs->stfmt != STFMT_UNUSED || subs == Nnull_string + || (subs->flags & STRING) == 0 || (subs->flags & NULL_FIELD) != 0) { NODE *tmp; diff --git a/test/ChangeLog b/test/ChangeLog index b741651e..6e786e8e 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,10 @@ +2020-07-08 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (EXTRADIST): Add additional ok files for MPFR. + (CHECK_MPFR): Add arraytype, arrdbg, forcenum and numrange + (arrdbg): Update to check -mpfr.ok file also. + * arraytype-mpfr.ok, arrdbg-mpfr.ok, forcenum-mpfr.ok, numrange-mpfr.ok: New files. + 2020-07-07 Arnold D. Robbins <arnold@skeeve.com> * Makefile.am (EXTRA_DIST): New test, mpfrcase2. diff --git a/test/Makefile.am b/test/Makefile.am index 76634925..6d953533 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -79,7 +79,9 @@ EXTRA_DIST = \ arraysort2.ok \ arraytype.awk \ arraytype.ok \ + arraytype-mpfr.ok \ arrdbg.awk \ + arrdbg-mpfr.ok \ arrymem1.awk \ arrymem1.ok \ arryref2.awk \ @@ -340,6 +342,7 @@ EXTRA_DIST = \ fnparydl.ok \ forcenum.awk \ forcenum.ok \ + forcenum-mpfr.ok \ fordel.awk \ fordel.ok \ fork.awk \ @@ -843,6 +846,7 @@ EXTRA_DIST = \ numindex.ok \ numrange.awk \ numrange.ok \ + numrange-mpfr.ok \ numstr1.awk \ numstr1.ok \ numsubstr.awk \ @@ -1505,7 +1509,7 @@ FAIL_CODE1 = \ # List of files which have .ok versions for MPFR CHECK_MPFR = \ - rand fnarydel fnparydl + arraytype arrdbg fnarydel fnparydl forcenum numrange rand # Lists of tests that need particular locales NEED_LOCALE_C = \ @@ -2384,7 +2388,10 @@ ignrcas3:: arrdbg: @echo $@ @$(AWK) -v "okfile=./$@.ok" -f "$(srcdir)"/$@.awk | grep array_f >_$@ || echo EXIT CODE: $$? >> _$@ - @-$(CMP) ./$@.ok _$@ && rm -f _$@ ./$@.ok + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi + sourcesplit: @echo $@ diff --git a/test/Makefile.in b/test/Makefile.in index 4af1a7ba..5a6215db 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -342,7 +342,9 @@ EXTRA_DIST = \ arraysort2.ok \ arraytype.awk \ arraytype.ok \ + arraytype-mpfr.ok \ arrdbg.awk \ + arrdbg-mpfr.ok \ arrymem1.awk \ arrymem1.ok \ arryref2.awk \ @@ -603,6 +605,7 @@ EXTRA_DIST = \ fnparydl.ok \ forcenum.awk \ forcenum.ok \ + forcenum-mpfr.ok \ fordel.awk \ fordel.ok \ fork.awk \ @@ -1106,6 +1109,7 @@ EXTRA_DIST = \ numindex.ok \ numrange.awk \ numrange.ok \ + numrange-mpfr.ok \ numstr1.awk \ numstr1.ok \ numsubstr.awk \ @@ -1769,7 +1773,7 @@ FAIL_CODE1 = \ # List of files which have .ok versions for MPFR CHECK_MPFR = \ - rand fnarydel fnparydl + arraytype arrdbg fnarydel fnparydl forcenum numrange rand # Lists of tests that need particular locales @@ -2835,7 +2839,9 @@ ignrcas3:: arrdbg: @echo $@ @$(AWK) -v "okfile=./$@.ok" -f "$(srcdir)"/$@.awk | grep array_f >_$@ || echo EXIT CODE: $$? >> _$@ - @-$(CMP) ./$@.ok _$@ && rm -f _$@ ./$@.ok + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi sourcesplit: @echo $@ @@ -3566,8 +3572,10 @@ numindex: numrange: @echo $@ $(ZOS_FAIL) - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + @AWKPATH="$(srcdir)" $(AWK) $(AWKFLAGS) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi numstr1: @echo $@ @@ -4199,8 +4207,10 @@ arraysort2: arraytype: @echo $@ - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + @AWKPATH="$(srcdir)" $(AWK) $(AWKFLAGS) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi backw: @echo $@ @@ -4285,8 +4295,10 @@ fieldwdth: forcenum: @echo $@ $(ZOS_FAIL) - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk --non-decimal-data >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + @AWKPATH="$(srcdir)" $(AWK) $(AWKFLAGS) -f $@.awk --non-decimal-data >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi fpat1: @echo $@ diff --git a/test/Maketests b/test/Maketests index 0b98f784..2ef37caf 100644 --- a/test/Maketests +++ b/test/Maketests @@ -680,8 +680,10 @@ numindex: numrange: @echo $@ $(ZOS_FAIL) - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + @AWKPATH="$(srcdir)" $(AWK) $(AWKFLAGS) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi numstr1: @echo $@ @@ -1313,8 +1315,10 @@ arraysort2: arraytype: @echo $@ - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + @AWKPATH="$(srcdir)" $(AWK) $(AWKFLAGS) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi backw: @echo $@ @@ -1399,8 +1403,10 @@ fieldwdth: forcenum: @echo $@ $(ZOS_FAIL) - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk --non-decimal-data >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + @AWKPATH="$(srcdir)" $(AWK) $(AWKFLAGS) -f $@.awk --non-decimal-data >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-if test -z "$$AWKFLAGS" ; then $(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ; else \ + $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ + fi fpat1: @echo $@ diff --git a/test/arraytype-mpfr.ok b/test/arraytype-mpfr.ok new file mode 100644 index 00000000..36e8f99b --- /dev/null +++ b/test/arraytype-mpfr.ok @@ -0,0 +1,16 @@ +array +str +array +null +array +str +array +null +array +str +array +null +array +str +array +null diff --git a/test/arrdbg-mpfr.ok b/test/arrdbg-mpfr.ok new file mode 100644 index 00000000..010801cb --- /dev/null +++ b/test/arrdbg-mpfr.ok @@ -0,0 +1,12 @@ +array_f subscript [3] + array_func: str_array_func +array_f subscript [-3] + array_func: str_array_func +array_f subscript [3.0] + array_func: str_array_func +array_f subscript [ 3] + array_func: str_array_func +array_f subscript [0] + array_func: str_array_func +array_f subscript [-1] + array_func: str_array_func diff --git a/test/forcenum-mpfr.ok b/test/forcenum-mpfr.ok new file mode 100644 index 00000000..6e5853fa --- /dev/null +++ b/test/forcenum-mpfr.ok @@ -0,0 +1,9 @@ +[] -> 0 (type string) +[5apple] -> 5 (type string) +[NaN] -> nan (type strnum) +[-NaN] -> nan (type strnum) +[+NaN] -> nan (type strnum) +[ 6] -> 6 (type strnum) +[0x1az] -> 26 (type string) +[011Q] -> 9 (type string) +[027] -> 23 (type strnum) diff --git a/test/numrange-mpfr.ok b/test/numrange-mpfr.ok new file mode 100644 index 00000000..2f084e39 --- /dev/null +++ b/test/numrange-mpfr.ok @@ -0,0 +1,2 @@ +-1.2e+931 -12000000000000000023869272521829212151376224284038826410491631072247223930898697894494751122199611031696331881198430123310788883489723019223000573640259371063714952207062438085168771640470751425809639568206897248922718204650691199569214339149443994838825335479571578957075566316988609963847861723327109992246837205567235607773890309471137488800374383009068687547118036715452301954858700836601124580336340038617883134449214092245802588446405229331386515660677585038235109701545271243902330575714021315127223571588764628179725351186585908351382110051143587405409927546018060172307656019659275511658624125158517807640363832094340920801581446507863850186984663749124902382044782795512644763497122330988233279646807817789403972164002561612114866682762706548477524115596786591512372612296461584970713050884678735893942581035124339179550774662878726741328519231942448856426396556949721845110345583968012206662741485777689522285472492027904 12000000000000000023869272521829212151376224284038826410491631072247223930898697894494751122199611031696331881198430123310788883489723019223000573640259371063714952207062438085168771640470751425809639568206897248922718204650691199569214339149443994838825335479571578957075566316988609963847861723327109992246837205567235607773890309471137488800374383009068687547118036715452301954858700836601124580336340038617883134449214092245802588446405229331386515660677585038235109701545271243902330575714021315127223571588764628179725351186585908351382110051143587405409927546018060172307656019659275511658624125158517807640363832094340920801581446507863850186984663749124902382044782795512644763497122330988233279646807817789403972164002561612114866682762706548477524115596786591512372612296461584970713050884678735893942581035124339179550774662878726741328519231942448856426396556949721845110345583968012206662741485777689522285472492027904 +1.2e+931 12000000000000000023869272521829212151376224284038826410491631072247223930898697894494751122199611031696331881198430123310788883489723019223000573640259371063714952207062438085168771640470751425809639568206897248922718204650691199569214339149443994838825335479571578957075566316988609963847861723327109992246837205567235607773890309471137488800374383009068687547118036715452301954858700836601124580336340038617883134449214092245802588446405229331386515660677585038235109701545271243902330575714021315127223571588764628179725351186585908351382110051143587405409927546018060172307656019659275511658624125158517807640363832094340920801581446507863850186984663749124902382044782795512644763497122330988233279646807817789403972164002561612114866682762706548477524115596786591512372612296461584970713050884678735893942581035124339179550774662878726741328519231942448856426396556949721845110345583968012206662741485777689522285472492027904 -12000000000000000023869272521829212151376224284038826410491631072247223930898697894494751122199611031696331881198430123310788883489723019223000573640259371063714952207062438085168771640470751425809639568206897248922718204650691199569214339149443994838825335479571578957075566316988609963847861723327109992246837205567235607773890309471137488800374383009068687547118036715452301954858700836601124580336340038617883134449214092245802588446405229331386515660677585038235109701545271243902330575714021315127223571588764628179725351186585908351382110051143587405409927546018060172307656019659275511658624125158517807640363832094340920801581446507863850186984663749124902382044782795512644763497122330988233279646807817789403972164002561612114866682762706548477524115596786591512372612296461584970713050884678735893942581035124339179550774662878726741328519231942448856426396556949721845110345583968012206662741485777689522285472492027904 |