diff options
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | TODO | 4 | ||||
-rw-r--r-- | awk.h | 6 | ||||
-rw-r--r-- | awkgram.c | 4 | ||||
-rw-r--r-- | awkgram.y | 4 | ||||
-rw-r--r-- | build-aux/ChangeLog | 4 | ||||
-rwxr-xr-x | build-aux/install-sh | 115 | ||||
-rw-r--r-- | debug.c | 2 | ||||
-rw-r--r-- | doc/ChangeLog | 5 | ||||
-rw-r--r-- | doc/gawk.info | 283 | ||||
-rw-r--r-- | doc/gawk.texi | 2 | ||||
-rw-r--r-- | doc/gawktexi.in | 2 | ||||
-rw-r--r-- | eval.c | 2 |
13 files changed, 226 insertions, 218 deletions
@@ -1,3 +1,14 @@ +2020-07-28 Arnold D. Robbins <arnold@skeeve.com> + + Eliminate 'iszero: redefined' warning from tcc. + + * awk.h (is_zero): Renamed from `iszero'. + (boolval): Update usage. + * awkgram.y [GRAMMAR]: Ditto. + (negate_num): Ditto. + * debug.c (condition_triggered): Ditto. + * eval.c (set_LINT): Ditto. + 2020-07-26 Arnold D. Robbins <arnold@skeeve.com> * awkgram.c, command.c: Regenerated with Bison 3.7. @@ -1,4 +1,4 @@ -Mon Jun 29 11:16:12 IDT 2020 +Tue Jul 28 20:45:09 IDT 2020 ============================ There were too many files tracking different thoughts and ideas for @@ -33,6 +33,8 @@ Minor Cleanups and Code Improvements Message cleanup: * Messages are inconsistent about final punctuation (periods etc.) + Go through the FIXMEs in the manual and fix as many as possible. + Minor New Features ------------------ @@ -1307,7 +1307,7 @@ DEREF(NODE *r) #define get_number_uj(n) numtype_choose((n), mpfr_get_uj((n)->mpg_numbr, ROUND_MODE), (uintmax_t) mpz_get_d((n)->mpg_i), (uintmax_t) (n)->numbr) -#define iszero(n) numtype_choose((n), mpfr_zero_p((n)->mpg_numbr), (mpz_sgn((n)->mpg_i) == 0), ((n)->numbr == 0.0)) +#define is_zero(n) numtype_choose((n), mpfr_zero_p((n)->mpg_numbr), (mpz_sgn((n)->mpg_i) == 0), ((n)->numbr == 0.0)) #define IEEE_FMT(r, t) (void) (do_ieee_fmt && format_ieee(r, t)) @@ -1325,7 +1325,7 @@ DEREF(NODE *r) #define is_mpg_number(n) 0 #define is_mpg_float(n) 0 #define is_mpg_integer(n) 0 -#define iszero(n) ((n)->numbr == 0.0) +#define is_zero(n) ((n)->numbr == 0.0) #endif #define var_uninitialized(n) ((n)->var_value == Nnull_string) @@ -1983,7 +1983,7 @@ boolval(NODE *t) { (void) fixtype(t); if ((t->flags & NUMBER) != 0) - return ! iszero(t); + return ! is_zero(t); return (t->stlen > 0); } @@ -3059,7 +3059,7 @@ regular_loop: if (yyvsp[-1] != NULL) { NODE *n = yyvsp[-1]->nexti->nexti->memory; - if ((n->flags & (STRING|STRCUR)) != 0 || ! iszero(n)) + if ((n->flags & (STRING|STRCUR)) != 0 || ! is_zero(n)) goto regular_print; bcfree(yyvsp[-1]->lasti); /* Op_field_spec */ @@ -4901,7 +4901,7 @@ negate_num(NODE *n) #ifdef HAVE_MPFR if (is_mpg_integer(n)) { - if (! iszero(n)) { + if (! is_zero(n)) { mpz_neg(n->mpg_i, n->mpg_i); return; } @@ -1154,7 +1154,7 @@ simple_stmt if ($3 != NULL) { NODE *n = $3->nexti->nexti->memory; - if ((n->flags & (STRING|STRCUR)) != 0 || ! iszero(n)) + if ((n->flags & (STRING|STRCUR)) != 0 || ! is_zero(n)) goto regular_print; bcfree($3->lasti); /* Op_field_spec */ @@ -2399,7 +2399,7 @@ negate_num(NODE *n) #ifdef HAVE_MPFR if (is_mpg_integer(n)) { - if (! iszero(n)) { + if (! is_zero(n)) { mpz_neg(n->mpg_i, n->mpg_i); return; } diff --git a/build-aux/ChangeLog b/build-aux/ChangeLog index 935c733b..553b1a78 100644 --- a/build-aux/ChangeLog +++ b/build-aux/ChangeLog @@ -1,3 +1,7 @@ +2020-07-28 Arnold D. Robbins <arnold@skeeve.com> + + * install-sh: Updated from GNULIB. + 2020-07-22 Arnold D. Robbins <arnold@skeeve.com> * ltmain.sh: New file, from extension/build-aux. diff --git a/build-aux/install-sh b/build-aux/install-sh index 20d8b2ea..b34a8fc5 100755 --- a/build-aux/install-sh +++ b/build-aux/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2018-03-11.20; # UTC +scriptversion=2020-07-26.22; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -69,6 +69,10 @@ posix_mkdir= # Desired mode of installed file. mode=0755 +# Create dirs (including intermediate dirs) using mode 755. +# This is like GNU 'install' as of coreutils 8.32 (2020). +mkdir_umask=22 + chgrpcmd= chmodcmd=$chmodprog chowncmd= @@ -301,22 +305,6 @@ do if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then @@ -326,52 +314,49 @@ do fi posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - # Note that $RANDOM variable is not portable (e.g. dash); Use it - # here however when possible just to lower collision chance. - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - - trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 - - # Because "mkdir -p" follows existing symlinks and we likely work - # directly in world-writeable /tmp, make sure that the '$tmpdir' - # directory is successfully created first before we actually test - # 'mkdir -p' feature. - if (umask $mkdir_umask && - $mkdirprog $mkdir_mode "$tmpdir" && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - test_tmpdir="$tmpdir/a" - ls_ld_tmpdir=`ls -ld "$test_tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null - fi - trap '' 0;; - esac;; + # The $RANDOM variable is not portable (e.g., dash). Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + + trap ' + ret=$? + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null + exit $ret + ' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p'. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; esac if @@ -382,7 +367,7 @@ do then : else - # The umask is ridiculous, or mkdir does not conform to POSIX, + # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. @@ -411,7 +396,7 @@ do prefixes= else if $posix_mkdir; then - (umask=$mkdir_umask && + (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 @@ -1616,7 +1616,7 @@ condition_triggered(struct condition *cndn) return false; /* not triggered */ force_number(r); - di = ! iszero(r); + di = ! is_zero(r); DEREF(r); return di; } diff --git a/doc/ChangeLog b/doc/ChangeLog index f40c6b8b..a2ce4805 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2020-07-28 Arnold D. Robbins <arnold@skeeve.com> + + * gawktexi.in: Change a FIXME into a real cross reference. Thanks + to Antonio Columbo for the report. + 2020-07-26 Arnold D. Robbins <arnold@skeeve.com> * gawktexi.in: Document that get_mpfr and get_mpz are obsolete diff --git a/doc/gawk.info b/doc/gawk.info index 49825017..31e209c7 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -24750,7 +24750,8 @@ operations: treated as read-only. However, unlike strings, memory for MPFR/GMP values allocated by an extension and passed into 'gawk' is _copied_ by 'gawk'; the extension should then free the values itself to - avoid memory leaks. This is discussed further in *FIXME*. + avoid memory leaks. This is discussed further in *API Ownership of + MPFR and GMP Values*. * The API defines several simple 'struct's that map values as seen from 'awk'. A value can be a 'double', a string, or an array (as @@ -37847,146 +37848,146 @@ Ref: figure-call-new-function996119 Node: Extension API Description998181 Node: Extension API Functions Introduction999894 Ref: table-api-std-headers1001730 -Node: General Data Types1005943 -Ref: General Data Types-Footnote-11014573 -Node: Memory Allocation Functions1014872 -Ref: Memory Allocation Functions-Footnote-11019373 -Node: Constructor Functions1019472 -Node: API Ownership of MPFR and GMP Values1022938 -Node: Registration Functions1024251 -Node: Extension Functions1024951 -Node: Exit Callback Functions1030273 -Node: Extension Version String1031523 -Node: Input Parsers1032186 -Node: Output Wrappers1044907 -Node: Two-way processors1049419 -Node: Printing Messages1051684 -Ref: Printing Messages-Footnote-11052855 -Node: Updating ERRNO1053008 -Node: Requesting Values1053747 -Ref: table-value-types-returned1054484 -Node: Accessing Parameters1055420 -Node: Symbol Table Access1056657 -Node: Symbol table by name1057169 -Ref: Symbol table by name-Footnote-11060193 -Node: Symbol table by cookie1060321 -Ref: Symbol table by cookie-Footnote-11064506 -Node: Cached values1064570 -Ref: Cached values-Footnote-11068106 -Node: Array Manipulation1068259 -Ref: Array Manipulation-Footnote-11069350 -Node: Array Data Types1069387 -Ref: Array Data Types-Footnote-11072045 -Node: Array Functions1072137 -Node: Flattening Arrays1076635 -Node: Creating Arrays1083611 -Node: Redirection API1088378 -Node: Extension API Variables1091211 -Node: Extension Versioning1091922 -Ref: gawk-api-version1092351 -Node: Extension GMP/MPFR Versioning1094082 -Node: Extension API Informational Variables1095710 -Node: Extension API Boilerplate1096783 -Node: Changes from API V11100757 -Node: Finding Extensions1102329 -Node: Extension Example1102888 -Node: Internal File Description1103686 -Node: Internal File Ops1107766 -Ref: Internal File Ops-Footnote-11119116 -Node: Using Internal File Ops1119256 -Ref: Using Internal File Ops-Footnote-11121639 -Node: Extension Samples1121913 -Node: Extension Sample File Functions1123442 -Node: Extension Sample Fnmatch1131091 -Node: Extension Sample Fork1132578 -Node: Extension Sample Inplace1133796 -Node: Extension Sample Ord1137421 -Node: Extension Sample Readdir1138257 -Ref: table-readdir-file-types1139146 -Node: Extension Sample Revout1140213 -Node: Extension Sample Rev2way1140802 -Node: Extension Sample Read write array1141542 -Node: Extension Sample Readfile1143484 -Node: Extension Sample Time1144579 -Node: Extension Sample API Tests1146331 -Node: gawkextlib1146823 -Node: Extension summary1149741 -Node: Extension Exercises1153443 -Node: Language History1154685 -Node: V7/SVR3.11156341 -Node: SVR41158493 -Node: POSIX1159927 -Node: BTL1161308 -Node: POSIX/GNU1162037 -Node: Feature History1167815 -Node: Common Extensions1184134 -Node: Ranges and Locales1185417 -Ref: Ranges and Locales-Footnote-11190033 -Ref: Ranges and Locales-Footnote-21190060 -Ref: Ranges and Locales-Footnote-31190295 -Node: Contributors1190518 -Node: History summary1196515 -Node: Installation1197895 -Node: Gawk Distribution1198839 -Node: Getting1199323 -Node: Extracting1200286 -Node: Distribution contents1201924 -Node: Unix Installation1208404 -Node: Quick Installation1209086 -Node: Shell Startup Files1211500 -Node: Additional Configuration Options1212589 -Node: Configuration Philosophy1214904 -Node: Non-Unix Installation1217273 -Node: PC Installation1217733 -Node: PC Binary Installation1218571 -Node: PC Compiling1219006 -Node: PC Using1220123 -Node: Cygwin1223676 -Node: MSYS1224900 -Node: VMS Installation1225502 -Node: VMS Compilation1226293 -Ref: VMS Compilation-Footnote-11227522 -Node: VMS Dynamic Extensions1227580 -Node: VMS Installation Details1229265 -Node: VMS Running1231518 -Node: VMS GNV1235797 -Node: VMS Old Gawk1236532 -Node: Bugs1237003 -Node: Bug address1237666 -Node: Usenet1240648 -Node: Maintainers1241652 -Node: Other Versions1242837 -Node: Installation summary1249925 -Node: Notes1251134 -Node: Compatibility Mode1251928 -Node: Additions1252710 -Node: Accessing The Source1253635 -Node: Adding Code1255072 -Node: New Ports1261291 -Node: Derived Files1265666 -Ref: Derived Files-Footnote-11271326 -Ref: Derived Files-Footnote-21271361 -Ref: Derived Files-Footnote-31271959 -Node: Future Extensions1272073 -Node: Implementation Limitations1272731 -Node: Extension Design1273941 -Node: Old Extension Problems1275085 -Ref: Old Extension Problems-Footnote-11276603 -Node: Extension New Mechanism Goals1276660 -Ref: Extension New Mechanism Goals-Footnote-11280024 -Node: Extension Other Design Decisions1280213 -Node: Extension Future Growth1282326 -Node: Notes summary1282932 -Node: Basic Concepts1284090 -Node: Basic High Level1284771 -Ref: figure-general-flow1285053 -Ref: figure-process-flow1285738 -Ref: Basic High Level-Footnote-11289039 -Node: Basic Data Typing1289224 -Node: Glossary1292552 -Node: Copying1324437 -Node: GNU Free Documentation License1361980 -Node: Index1387100 +Node: General Data Types1005979 +Ref: General Data Types-Footnote-11014609 +Node: Memory Allocation Functions1014908 +Ref: Memory Allocation Functions-Footnote-11019409 +Node: Constructor Functions1019508 +Node: API Ownership of MPFR and GMP Values1022974 +Node: Registration Functions1024287 +Node: Extension Functions1024987 +Node: Exit Callback Functions1030309 +Node: Extension Version String1031559 +Node: Input Parsers1032222 +Node: Output Wrappers1044943 +Node: Two-way processors1049455 +Node: Printing Messages1051720 +Ref: Printing Messages-Footnote-11052891 +Node: Updating ERRNO1053044 +Node: Requesting Values1053783 +Ref: table-value-types-returned1054520 +Node: Accessing Parameters1055456 +Node: Symbol Table Access1056693 +Node: Symbol table by name1057205 +Ref: Symbol table by name-Footnote-11060229 +Node: Symbol table by cookie1060357 +Ref: Symbol table by cookie-Footnote-11064542 +Node: Cached values1064606 +Ref: Cached values-Footnote-11068142 +Node: Array Manipulation1068295 +Ref: Array Manipulation-Footnote-11069386 +Node: Array Data Types1069423 +Ref: Array Data Types-Footnote-11072081 +Node: Array Functions1072173 +Node: Flattening Arrays1076671 +Node: Creating Arrays1083647 +Node: Redirection API1088414 +Node: Extension API Variables1091247 +Node: Extension Versioning1091958 +Ref: gawk-api-version1092387 +Node: Extension GMP/MPFR Versioning1094118 +Node: Extension API Informational Variables1095746 +Node: Extension API Boilerplate1096819 +Node: Changes from API V11100793 +Node: Finding Extensions1102365 +Node: Extension Example1102924 +Node: Internal File Description1103722 +Node: Internal File Ops1107802 +Ref: Internal File Ops-Footnote-11119152 +Node: Using Internal File Ops1119292 +Ref: Using Internal File Ops-Footnote-11121675 +Node: Extension Samples1121949 +Node: Extension Sample File Functions1123478 +Node: Extension Sample Fnmatch1131127 +Node: Extension Sample Fork1132614 +Node: Extension Sample Inplace1133832 +Node: Extension Sample Ord1137457 +Node: Extension Sample Readdir1138293 +Ref: table-readdir-file-types1139182 +Node: Extension Sample Revout1140249 +Node: Extension Sample Rev2way1140838 +Node: Extension Sample Read write array1141578 +Node: Extension Sample Readfile1143520 +Node: Extension Sample Time1144615 +Node: Extension Sample API Tests1146367 +Node: gawkextlib1146859 +Node: Extension summary1149777 +Node: Extension Exercises1153479 +Node: Language History1154721 +Node: V7/SVR3.11156377 +Node: SVR41158529 +Node: POSIX1159963 +Node: BTL1161344 +Node: POSIX/GNU1162073 +Node: Feature History1167851 +Node: Common Extensions1184170 +Node: Ranges and Locales1185453 +Ref: Ranges and Locales-Footnote-11190069 +Ref: Ranges and Locales-Footnote-21190096 +Ref: Ranges and Locales-Footnote-31190331 +Node: Contributors1190554 +Node: History summary1196551 +Node: Installation1197931 +Node: Gawk Distribution1198875 +Node: Getting1199359 +Node: Extracting1200322 +Node: Distribution contents1201960 +Node: Unix Installation1208440 +Node: Quick Installation1209122 +Node: Shell Startup Files1211536 +Node: Additional Configuration Options1212625 +Node: Configuration Philosophy1214940 +Node: Non-Unix Installation1217309 +Node: PC Installation1217769 +Node: PC Binary Installation1218607 +Node: PC Compiling1219042 +Node: PC Using1220159 +Node: Cygwin1223712 +Node: MSYS1224936 +Node: VMS Installation1225538 +Node: VMS Compilation1226329 +Ref: VMS Compilation-Footnote-11227558 +Node: VMS Dynamic Extensions1227616 +Node: VMS Installation Details1229301 +Node: VMS Running1231554 +Node: VMS GNV1235833 +Node: VMS Old Gawk1236568 +Node: Bugs1237039 +Node: Bug address1237702 +Node: Usenet1240684 +Node: Maintainers1241688 +Node: Other Versions1242873 +Node: Installation summary1249961 +Node: Notes1251170 +Node: Compatibility Mode1251964 +Node: Additions1252746 +Node: Accessing The Source1253671 +Node: Adding Code1255108 +Node: New Ports1261327 +Node: Derived Files1265702 +Ref: Derived Files-Footnote-11271362 +Ref: Derived Files-Footnote-21271397 +Ref: Derived Files-Footnote-31271995 +Node: Future Extensions1272109 +Node: Implementation Limitations1272767 +Node: Extension Design1273977 +Node: Old Extension Problems1275121 +Ref: Old Extension Problems-Footnote-11276639 +Node: Extension New Mechanism Goals1276696 +Ref: Extension New Mechanism Goals-Footnote-11280060 +Node: Extension Other Design Decisions1280249 +Node: Extension Future Growth1282362 +Node: Notes summary1282968 +Node: Basic Concepts1284126 +Node: Basic High Level1284807 +Ref: figure-general-flow1285089 +Ref: figure-process-flow1285774 +Ref: Basic High Level-Footnote-11289075 +Node: Basic Data Typing1289260 +Node: Glossary1292588 +Node: Copying1324473 +Node: GNU Free Documentation License1362016 +Node: Index1387136 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 6d7694a2..874a4646 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -34402,7 +34402,7 @@ should also be treated as read-only. However, unlike strings, memory for MPFR/GMP values allocated by an extension and passed into @command{gawk} is @emph{copied} by @command{gawk}; the extension should then free the values itself to avoid memory leaks. This is -discussed further in @strong{FIXME}. +discussed further in @strong{API Ownership of MPFR and GMP Values}. @item The API defines several simple @code{struct}s that map values as seen diff --git a/doc/gawktexi.in b/doc/gawktexi.in index e41fe930..9057e91d 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -33373,7 +33373,7 @@ should also be treated as read-only. However, unlike strings, memory for MPFR/GMP values allocated by an extension and passed into @command{gawk} is @emph{copied} by @command{gawk}; the extension should then free the values itself to avoid memory leaks. This is -discussed further in @strong{FIXME}. +discussed further in @strong{API Ownership of MPFR and GMP Values}. @item The API defines several simple @code{struct}s that map values as seen @@ -976,7 +976,7 @@ set_LINT() } } } else { - if (! iszero(n)) + if (! is_zero(n)) do_flags |= DO_LINT_ALL; } |