diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | builtin.c | 3 | ||||
-rw-r--r-- | doc/ChangeLog | 4 | ||||
-rw-r--r-- | doc/gawk.info | 707 | ||||
-rw-r--r-- | doc/gawk.texi | 10 | ||||
-rw-r--r-- | doc/gawktexi.in | 10 | ||||
-rw-r--r-- | mpfr.c | 9 |
7 files changed, 390 insertions, 360 deletions
@@ -1,3 +1,10 @@ +2017-04-16 Arnold D. Robbins <arnold@skeeve.com> + + * builtin.c (do_intdiv): Use DEREF on the arguments. + Thanks to Andrew Schorr for finding the problem. + * mpfr.c (do_mpfr_intdiv): Return -1 if numerator or denominator + are not valid numbers. Unref various bits first. + 2017-04-13 Arnold D. Robbins <arnold@skeeve.com> * awk.h (make_number_node): Simplify. @@ -4034,6 +4034,9 @@ do_intdiv(int nargs) unref(*lhs); *lhs = make_number((AWKNUM) remainder); + DEREF(denominator); + DEREF(numerator); + return make_number((AWKNUM) 0.0); } diff --git a/doc/ChangeLog b/doc/ChangeLog index 4da39fe9..39fc8021 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2017-04-16 Arnold D. Robbins <arnold@skeeve.com> + + * gawktexi.in: Improve documentation of the intdiv() function. + 2017-04-12 Arnold D. Robbins <arnold@skeeve.com> * it: New directory with Italian translation of the manual. diff --git a/doc/gawk.info b/doc/gawk.info index d3ae5639..238df1dc 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -12268,16 +12268,19 @@ brackets ([ ]): 3, 'int(-3.9)' is -3, and 'int(-3)' is -3 as well. 'intdiv(NUMERATOR, DENOMINATOR, RESULT)' - Perform integer division, similar to the standard C function of the - same name. First, truncate 'numerator' and 'denominator' towards + Perform integer division, similar to the standard C 'div()' + function. First, truncate 'numerator' and 'denominator' towards zero, creating integer values. Clear the 'result' array, and then set 'result["quotient"]' to the result of 'numerator / denominator', truncated towards zero to an integer, and set 'result["remainder"]' to the result of 'numerator % denominator', - truncated towards zero to an integer. This function is primarily - intended for use with arbitrary length integers; it avoids creating - MPFR arbitrary precision floating-point values (*note Arbitrary - Precision Integers::). + truncated towards zero to an integer. Attempting division by zero + causes a fatal error. The function returns zero upon success, and + -1 upon error. + + This function is primarily intended for use with arbitrary length + integers; it avoids creating MPFR arbitrary precision + floating-point values (*note Arbitrary Precision Integers::). This function is a 'gawk' extension. It is not available in compatibility mode (*note Options::). @@ -34422,9 +34425,9 @@ Index * localization: I18N and L10N. (line 6) * localization, See internationalization, localization: I18N and L10N. (line 6) -* log: Numeric Functions. (line 44) +* log: Numeric Functions. (line 47) * log files, timestamps in: Time Functions. (line 6) -* logarithm: Numeric Functions. (line 44) +* logarithm: Numeric Functions. (line 47) * logical false/true: Truth Values. (line 6) * logical operators, See Boolean expressions: Boolean Ops. (line 6) * login information: Passwd Functions. (line 16) @@ -34887,12 +34890,12 @@ Index * Rakitzis, Byron: History Sorting. (line 25) * Ramey, Chet: Acknowledgments. (line 60) * Ramey, Chet <1>: General Data Types. (line 6) -* rand: Numeric Functions. (line 49) +* rand: Numeric Functions. (line 52) * random numbers, Cliff: Cliff Random Function. (line 6) * random numbers, rand()/srand() functions: Numeric Functions. - (line 49) -* random numbers, seed of: Numeric Functions. (line 79) + (line 52) +* random numbers, seed of: Numeric Functions. (line 82) * range expressions (regexps): Bracket Expressions. (line 6) * range patterns: Ranges. (line 6) * range patterns, line continuation and: Ranges. (line 64) @@ -35070,7 +35073,7 @@ Index * sed utility: Full Line Fields. (line 22) * sed utility <1>: Simple Sed. (line 6) * sed utility <2>: Glossary. (line 16) -* seeding random number generator: Numeric Functions. (line 79) +* seeding random number generator: Numeric Functions. (line 82) * semicolon (;), AWKPATH variable and: PC Using. (line 9) * semicolon (;), separating statements in actions: Statements/Lines. (line 90) @@ -35174,8 +35177,8 @@ Index * SIGUSR1 signal, for dynamic profiling: Profiling. (line 186) * silent debugger command: Debugger Execution Control. (line 10) -* sin: Numeric Functions. (line 90) -* sine: Numeric Functions. (line 90) +* sin: Numeric Functions. (line 93) +* sine: Numeric Functions. (line 93) * single quote ('): One-shot. (line 15) * single quote (') in gawk command lines: Long. (line 35) * single quote ('), in shell commands: Quoting. (line 48) @@ -35225,10 +35228,10 @@ Index * sprintf() function, OFMT variable and: User-modified. (line 116) * sprintf() function, print/printf statements and: Round Function. (line 6) -* sqrt: Numeric Functions. (line 93) +* sqrt: Numeric Functions. (line 96) * square brackets ([]), regexp operator: Regexp Operators. (line 56) -* square root: Numeric Functions. (line 93) -* srand: Numeric Functions. (line 97) +* square root: Numeric Functions. (line 96) +* srand: Numeric Functions. (line 100) * stack frame: Debugging Terms. (line 10) * Stallman, Richard: Manual History. (line 6) * Stallman, Richard <1>: Acknowledgments. (line 18) @@ -35788,340 +35791,340 @@ Node: Functions516532 Node: Built-in517570 Node: Calling Built-in518651 Node: Numeric Functions520647 -Ref: Numeric Functions-Footnote-1525480 -Ref: Numeric Functions-Footnote-2525837 -Ref: Numeric Functions-Footnote-3525885 -Node: String Functions526157 -Ref: String Functions-Footnote-1549815 -Ref: String Functions-Footnote-2549943 -Ref: String Functions-Footnote-3550191 -Node: Gory Details550278 -Ref: table-sub-escapes552069 -Ref: table-sub-proposed553588 -Ref: table-posix-sub554951 -Ref: table-gensub-escapes556492 -Ref: Gory Details-Footnote-1557315 -Node: I/O Functions557469 -Ref: table-system-return-values564051 -Ref: I/O Functions-Footnote-1566031 -Ref: I/O Functions-Footnote-2566179 -Node: Time Functions566299 -Ref: Time Functions-Footnote-1576966 -Ref: Time Functions-Footnote-2577034 -Ref: Time Functions-Footnote-3577192 -Ref: Time Functions-Footnote-4577303 -Ref: Time Functions-Footnote-5577415 -Ref: Time Functions-Footnote-6577642 -Node: Bitwise Functions577908 -Ref: table-bitwise-ops578502 -Ref: Bitwise Functions-Footnote-1584535 -Ref: Bitwise Functions-Footnote-2584708 -Node: Type Functions584899 -Node: I18N Functions587574 -Node: User-defined589225 -Node: Definition Syntax590030 -Ref: Definition Syntax-Footnote-1595717 -Node: Function Example595788 -Ref: Function Example-Footnote-1598710 -Node: Function Caveats598732 -Node: Calling A Function599250 -Node: Variable Scope600208 -Node: Pass By Value/Reference603202 -Node: Return Statement606701 -Node: Dynamic Typing609680 -Node: Indirect Calls610610 -Ref: Indirect Calls-Footnote-1620861 -Node: Functions Summary620989 -Node: Library Functions623694 -Ref: Library Functions-Footnote-1627301 -Ref: Library Functions-Footnote-2627444 -Node: Library Names627615 -Ref: Library Names-Footnote-1631075 -Ref: Library Names-Footnote-2631298 -Node: General Functions631384 -Node: Strtonum Function632487 -Node: Assert Function635509 -Node: Round Function638835 -Node: Cliff Random Function640376 -Node: Ordinal Functions641392 -Ref: Ordinal Functions-Footnote-1644455 -Ref: Ordinal Functions-Footnote-2644707 -Node: Join Function644917 -Ref: Join Function-Footnote-1646687 -Node: Getlocaltime Function646887 -Node: Readfile Function650629 -Node: Shell Quoting652601 -Node: Data File Management654002 -Node: Filetrans Function654634 -Node: Rewind Function658730 -Node: File Checking660636 -Ref: File Checking-Footnote-1661970 -Node: Empty Files662171 -Node: Ignoring Assigns664150 -Node: Getopt Function665700 -Ref: Getopt Function-Footnote-1677169 -Node: Passwd Functions677369 -Ref: Passwd Functions-Footnote-1686208 -Node: Group Functions686296 -Ref: Group Functions-Footnote-1694194 -Node: Walking Arrays694401 -Node: Library Functions Summary697409 -Node: Library Exercises698815 -Node: Sample Programs699280 -Node: Running Examples700050 -Node: Clones700778 -Node: Cut Program702002 -Node: Egrep Program711931 -Ref: Egrep Program-Footnote-1719443 -Node: Id Program719553 -Node: Split Program723233 -Ref: Split Program-Footnote-1726692 -Node: Tee Program726821 -Node: Uniq Program729611 -Node: Wc Program737037 -Ref: Wc Program-Footnote-1741292 -Node: Miscellaneous Programs741386 -Node: Dupword Program742599 -Node: Alarm Program744629 -Node: Translate Program749484 -Ref: Translate Program-Footnote-1754049 -Node: Labels Program754319 -Ref: Labels Program-Footnote-1757670 -Node: Word Sorting757754 -Node: History Sorting761826 -Node: Extract Program763661 -Node: Simple Sed771190 -Node: Igawk Program774264 -Ref: Igawk Program-Footnote-1788595 -Ref: Igawk Program-Footnote-2788797 -Ref: Igawk Program-Footnote-3788919 -Node: Anagram Program789034 -Node: Signature Program792096 -Node: Programs Summary793343 -Node: Programs Exercises794557 -Ref: Programs Exercises-Footnote-1798686 -Node: Advanced Features798777 -Node: Nondecimal Data800767 -Node: Array Sorting802358 -Node: Controlling Array Traversal803058 -Ref: Controlling Array Traversal-Footnote-1811425 -Node: Array Sorting Functions811543 -Ref: Array Sorting Functions-Footnote-1816634 -Node: Two-way I/O816830 -Ref: Two-way I/O-Footnote-1823381 -Ref: Two-way I/O-Footnote-2823568 -Node: TCP/IP Networking823650 -Node: Profiling826768 -Ref: Profiling-Footnote-1835440 -Node: Advanced Features Summary835763 -Node: Internationalization837607 -Node: I18N and L10N839087 -Node: Explaining gettext839774 -Ref: Explaining gettext-Footnote-1845666 -Ref: Explaining gettext-Footnote-2845851 -Node: Programmer i18n846016 -Ref: Programmer i18n-Footnote-1850965 -Node: Translator i18n851014 -Node: String Extraction851808 -Ref: String Extraction-Footnote-1852940 -Node: Printf Ordering853026 -Ref: Printf Ordering-Footnote-1855812 -Node: I18N Portability855876 -Ref: I18N Portability-Footnote-1858332 -Node: I18N Example858395 -Ref: I18N Example-Footnote-1861201 -Node: Gawk I18N861274 -Node: I18N Summary861919 -Node: Debugger863260 -Node: Debugging864282 -Node: Debugging Concepts864723 -Node: Debugging Terms866532 -Node: Awk Debugging869107 -Node: Sample Debugging Session870013 -Node: Debugger Invocation870547 -Node: Finding The Bug871933 -Node: List of Debugger Commands878411 -Node: Breakpoint Control879744 -Node: Debugger Execution Control883438 -Node: Viewing And Changing Data886800 -Node: Execution Stack890174 -Node: Debugger Info891811 -Node: Miscellaneous Debugger Commands895882 -Node: Readline Support900970 -Node: Limitations901866 -Node: Debugging Summary903975 -Node: Arbitrary Precision Arithmetic905254 -Node: Computer Arithmetic906670 -Ref: table-numeric-ranges910261 -Ref: Computer Arithmetic-Footnote-1910983 -Node: Math Definitions911040 -Ref: table-ieee-formats914354 -Ref: Math Definitions-Footnote-1914957 -Node: MPFR features915062 -Node: FP Math Caution916779 -Ref: FP Math Caution-Footnote-1917851 -Node: Inexactness of computations918220 -Node: Inexact representation919180 -Node: Comparing FP Values920540 -Node: Errors accumulate921622 -Node: Getting Accuracy923055 -Node: Try To Round925765 -Node: Setting precision926664 -Ref: table-predefined-precision-strings927361 -Node: Setting the rounding mode929191 -Ref: table-gawk-rounding-modes929565 -Ref: Setting the rounding mode-Footnote-1932973 -Node: Arbitrary Precision Integers933152 -Ref: Arbitrary Precision Integers-Footnote-1938069 -Node: POSIX Floating Point Problems938218 -Ref: POSIX Floating Point Problems-Footnote-1942100 -Node: Floating point summary942138 -Node: Dynamic Extensions944328 -Node: Extension Intro945881 -Node: Plugin License947147 -Node: Extension Mechanism Outline947944 -Ref: figure-load-extension948383 -Ref: figure-register-new-function949948 -Ref: figure-call-new-function951040 -Node: Extension API Description953102 -Node: Extension API Functions Introduction954744 -Node: General Data Types960078 -Ref: General Data Types-Footnote-1967283 -Node: Memory Allocation Functions967582 -Ref: Memory Allocation Functions-Footnote-1970427 -Node: Constructor Functions970526 -Node: Registration Functions973525 -Node: Extension Functions974210 -Node: Exit Callback Functions979423 -Node: Extension Version String980673 -Node: Input Parsers981336 -Node: Output Wrappers994043 -Node: Two-way processors998555 -Node: Printing Messages1000820 -Ref: Printing Messages-Footnote-11001991 -Node: Updating ERRNO1002144 -Node: Requesting Values1002883 -Ref: table-value-types-returned1003620 -Node: Accessing Parameters1004556 -Node: Symbol Table Access1005791 -Node: Symbol table by name1006303 -Node: Symbol table by cookie1008092 -Ref: Symbol table by cookie-Footnote-11012277 -Node: Cached values1012341 -Ref: Cached values-Footnote-11015877 -Node: Array Manipulation1015968 -Ref: Array Manipulation-Footnote-11017059 -Node: Array Data Types1017096 -Ref: Array Data Types-Footnote-11019754 -Node: Array Functions1019846 -Node: Flattening Arrays1024245 -Node: Creating Arrays1031186 -Node: Redirection API1035955 -Node: Extension API Variables1038797 -Node: Extension Versioning1039430 -Ref: gawk-api-version1039867 -Node: Extension API Informational Variables1041595 -Node: Extension API Boilerplate1042659 -Node: Changes from API V11046521 -Node: Finding Extensions1047181 -Node: Extension Example1047740 -Node: Internal File Description1048538 -Node: Internal File Ops1052618 -Ref: Internal File Ops-Footnote-11064018 -Node: Using Internal File Ops1064158 -Ref: Using Internal File Ops-Footnote-11066541 -Node: Extension Samples1066815 -Node: Extension Sample File Functions1068344 -Node: Extension Sample Fnmatch1075993 -Node: Extension Sample Fork1077480 -Node: Extension Sample Inplace1078698 -Node: Extension Sample Ord1081908 -Node: Extension Sample Readdir1082744 -Ref: table-readdir-file-types1083633 -Node: Extension Sample Revout1084438 -Node: Extension Sample Rev2way1085027 -Node: Extension Sample Read write array1085767 -Node: Extension Sample Readfile1087709 -Node: Extension Sample Time1088804 -Node: Extension Sample API Tests1090152 -Node: gawkextlib1090644 -Node: Extension summary1093091 -Node: Extension Exercises1096793 -Node: Language History1098291 -Node: V7/SVR3.11099947 -Node: SVR41102099 -Node: POSIX1103533 -Node: BTL1104912 -Node: POSIX/GNU1105641 -Node: Feature History1111533 -Node: Common Extensions1125903 -Node: Ranges and Locales1127186 -Ref: Ranges and Locales-Footnote-11131802 -Ref: Ranges and Locales-Footnote-21131829 -Ref: Ranges and Locales-Footnote-31132064 -Node: Contributors1132285 -Node: History summary1137845 -Node: Installation1139225 -Node: Gawk Distribution1140169 -Node: Getting1140653 -Node: Extracting1141614 -Node: Distribution contents1143252 -Node: Unix Installation1149594 -Node: Quick Installation1150276 -Node: Shell Startup Files1152690 -Node: Additional Configuration Options1153779 -Node: Configuration Philosophy1155584 -Node: Non-Unix Installation1157953 -Node: PC Installation1158413 -Node: PC Binary Installation1159251 -Node: PC Compiling1159686 -Node: PC Using1160803 -Node: Cygwin1163848 -Node: MSYS1164618 -Node: VMS Installation1165119 -Node: VMS Compilation1165910 -Ref: VMS Compilation-Footnote-11167139 -Node: VMS Dynamic Extensions1167197 -Node: VMS Installation Details1168882 -Node: VMS Running1171135 -Node: VMS GNV1175414 -Node: VMS Old Gawk1176149 -Node: Bugs1176620 -Node: Bug address1177283 -Node: Usenet1179680 -Node: Maintainers1180457 -Node: Other Versions1181833 -Node: Installation summary1188417 -Node: Notes1189452 -Node: Compatibility Mode1190317 -Node: Additions1191099 -Node: Accessing The Source1192024 -Node: Adding Code1193459 -Node: New Ports1199677 -Node: Derived Files1204165 -Ref: Derived Files-Footnote-11209650 -Ref: Derived Files-Footnote-21209685 -Ref: Derived Files-Footnote-31210283 -Node: Future Extensions1210397 -Node: Implementation Limitations1211055 -Node: Extension Design1212238 -Node: Old Extension Problems1213392 -Ref: Old Extension Problems-Footnote-11214910 -Node: Extension New Mechanism Goals1214967 -Ref: Extension New Mechanism Goals-Footnote-11218331 -Node: Extension Other Design Decisions1218520 -Node: Extension Future Growth1220633 -Node: Old Extension Mechanism1221469 -Node: Notes summary1223232 -Node: Basic Concepts1224414 -Node: Basic High Level1225095 -Ref: figure-general-flow1225377 -Ref: figure-process-flow1226062 -Ref: Basic High Level-Footnote-11229363 -Node: Basic Data Typing1229548 -Node: Glossary1232876 -Node: Copying1264823 -Node: GNU Free Documentation License1302362 -Node: Index1327480 +Ref: Numeric Functions-Footnote-1525592 +Ref: Numeric Functions-Footnote-2525949 +Ref: Numeric Functions-Footnote-3525997 +Node: String Functions526269 +Ref: String Functions-Footnote-1549927 +Ref: String Functions-Footnote-2550055 +Ref: String Functions-Footnote-3550303 +Node: Gory Details550390 +Ref: table-sub-escapes552181 +Ref: table-sub-proposed553700 +Ref: table-posix-sub555063 +Ref: table-gensub-escapes556604 +Ref: Gory Details-Footnote-1557427 +Node: I/O Functions557581 +Ref: table-system-return-values564163 +Ref: I/O Functions-Footnote-1566143 +Ref: I/O Functions-Footnote-2566291 +Node: Time Functions566411 +Ref: Time Functions-Footnote-1577078 +Ref: Time Functions-Footnote-2577146 +Ref: Time Functions-Footnote-3577304 +Ref: Time Functions-Footnote-4577415 +Ref: Time Functions-Footnote-5577527 +Ref: Time Functions-Footnote-6577754 +Node: Bitwise Functions578020 +Ref: table-bitwise-ops578614 +Ref: Bitwise Functions-Footnote-1584647 +Ref: Bitwise Functions-Footnote-2584820 +Node: Type Functions585011 +Node: I18N Functions587686 +Node: User-defined589337 +Node: Definition Syntax590142 +Ref: Definition Syntax-Footnote-1595829 +Node: Function Example595900 +Ref: Function Example-Footnote-1598822 +Node: Function Caveats598844 +Node: Calling A Function599362 +Node: Variable Scope600320 +Node: Pass By Value/Reference603314 +Node: Return Statement606813 +Node: Dynamic Typing609792 +Node: Indirect Calls610722 +Ref: Indirect Calls-Footnote-1620973 +Node: Functions Summary621101 +Node: Library Functions623806 +Ref: Library Functions-Footnote-1627413 +Ref: Library Functions-Footnote-2627556 +Node: Library Names627727 +Ref: Library Names-Footnote-1631187 +Ref: Library Names-Footnote-2631410 +Node: General Functions631496 +Node: Strtonum Function632599 +Node: Assert Function635621 +Node: Round Function638947 +Node: Cliff Random Function640488 +Node: Ordinal Functions641504 +Ref: Ordinal Functions-Footnote-1644567 +Ref: Ordinal Functions-Footnote-2644819 +Node: Join Function645029 +Ref: Join Function-Footnote-1646799 +Node: Getlocaltime Function646999 +Node: Readfile Function650741 +Node: Shell Quoting652713 +Node: Data File Management654114 +Node: Filetrans Function654746 +Node: Rewind Function658842 +Node: File Checking660748 +Ref: File Checking-Footnote-1662082 +Node: Empty Files662283 +Node: Ignoring Assigns664262 +Node: Getopt Function665812 +Ref: Getopt Function-Footnote-1677281 +Node: Passwd Functions677481 +Ref: Passwd Functions-Footnote-1686320 +Node: Group Functions686408 +Ref: Group Functions-Footnote-1694306 +Node: Walking Arrays694513 +Node: Library Functions Summary697521 +Node: Library Exercises698927 +Node: Sample Programs699392 +Node: Running Examples700162 +Node: Clones700890 +Node: Cut Program702114 +Node: Egrep Program712043 +Ref: Egrep Program-Footnote-1719555 +Node: Id Program719665 +Node: Split Program723345 +Ref: Split Program-Footnote-1726804 +Node: Tee Program726933 +Node: Uniq Program729723 +Node: Wc Program737149 +Ref: Wc Program-Footnote-1741404 +Node: Miscellaneous Programs741498 +Node: Dupword Program742711 +Node: Alarm Program744741 +Node: Translate Program749596 +Ref: Translate Program-Footnote-1754161 +Node: Labels Program754431 +Ref: Labels Program-Footnote-1757782 +Node: Word Sorting757866 +Node: History Sorting761938 +Node: Extract Program763773 +Node: Simple Sed771302 +Node: Igawk Program774376 +Ref: Igawk Program-Footnote-1788707 +Ref: Igawk Program-Footnote-2788909 +Ref: Igawk Program-Footnote-3789031 +Node: Anagram Program789146 +Node: Signature Program792208 +Node: Programs Summary793455 +Node: Programs Exercises794669 +Ref: Programs Exercises-Footnote-1798798 +Node: Advanced Features798889 +Node: Nondecimal Data800879 +Node: Array Sorting802470 +Node: Controlling Array Traversal803170 +Ref: Controlling Array Traversal-Footnote-1811537 +Node: Array Sorting Functions811655 +Ref: Array Sorting Functions-Footnote-1816746 +Node: Two-way I/O816942 +Ref: Two-way I/O-Footnote-1823493 +Ref: Two-way I/O-Footnote-2823680 +Node: TCP/IP Networking823762 +Node: Profiling826880 +Ref: Profiling-Footnote-1835552 +Node: Advanced Features Summary835875 +Node: Internationalization837719 +Node: I18N and L10N839199 +Node: Explaining gettext839886 +Ref: Explaining gettext-Footnote-1845778 +Ref: Explaining gettext-Footnote-2845963 +Node: Programmer i18n846128 +Ref: Programmer i18n-Footnote-1851077 +Node: Translator i18n851126 +Node: String Extraction851920 +Ref: String Extraction-Footnote-1853052 +Node: Printf Ordering853138 +Ref: Printf Ordering-Footnote-1855924 +Node: I18N Portability855988 +Ref: I18N Portability-Footnote-1858444 +Node: I18N Example858507 +Ref: I18N Example-Footnote-1861313 +Node: Gawk I18N861386 +Node: I18N Summary862031 +Node: Debugger863372 +Node: Debugging864394 +Node: Debugging Concepts864835 +Node: Debugging Terms866644 +Node: Awk Debugging869219 +Node: Sample Debugging Session870125 +Node: Debugger Invocation870659 +Node: Finding The Bug872045 +Node: List of Debugger Commands878523 +Node: Breakpoint Control879856 +Node: Debugger Execution Control883550 +Node: Viewing And Changing Data886912 +Node: Execution Stack890286 +Node: Debugger Info891923 +Node: Miscellaneous Debugger Commands895994 +Node: Readline Support901082 +Node: Limitations901978 +Node: Debugging Summary904087 +Node: Arbitrary Precision Arithmetic905366 +Node: Computer Arithmetic906782 +Ref: table-numeric-ranges910373 +Ref: Computer Arithmetic-Footnote-1911095 +Node: Math Definitions911152 +Ref: table-ieee-formats914466 +Ref: Math Definitions-Footnote-1915069 +Node: MPFR features915174 +Node: FP Math Caution916891 +Ref: FP Math Caution-Footnote-1917963 +Node: Inexactness of computations918332 +Node: Inexact representation919292 +Node: Comparing FP Values920652 +Node: Errors accumulate921734 +Node: Getting Accuracy923167 +Node: Try To Round925877 +Node: Setting precision926776 +Ref: table-predefined-precision-strings927473 +Node: Setting the rounding mode929303 +Ref: table-gawk-rounding-modes929677 +Ref: Setting the rounding mode-Footnote-1933085 +Node: Arbitrary Precision Integers933264 +Ref: Arbitrary Precision Integers-Footnote-1938181 +Node: POSIX Floating Point Problems938330 +Ref: POSIX Floating Point Problems-Footnote-1942212 +Node: Floating point summary942250 +Node: Dynamic Extensions944440 +Node: Extension Intro945993 +Node: Plugin License947259 +Node: Extension Mechanism Outline948056 +Ref: figure-load-extension948495 +Ref: figure-register-new-function950060 +Ref: figure-call-new-function951152 +Node: Extension API Description953214 +Node: Extension API Functions Introduction954856 +Node: General Data Types960190 +Ref: General Data Types-Footnote-1967395 +Node: Memory Allocation Functions967694 +Ref: Memory Allocation Functions-Footnote-1970539 +Node: Constructor Functions970638 +Node: Registration Functions973637 +Node: Extension Functions974322 +Node: Exit Callback Functions979535 +Node: Extension Version String980785 +Node: Input Parsers981448 +Node: Output Wrappers994155 +Node: Two-way processors998667 +Node: Printing Messages1000932 +Ref: Printing Messages-Footnote-11002103 +Node: Updating ERRNO1002256 +Node: Requesting Values1002995 +Ref: table-value-types-returned1003732 +Node: Accessing Parameters1004668 +Node: Symbol Table Access1005903 +Node: Symbol table by name1006415 +Node: Symbol table by cookie1008204 +Ref: Symbol table by cookie-Footnote-11012389 +Node: Cached values1012453 +Ref: Cached values-Footnote-11015989 +Node: Array Manipulation1016080 +Ref: Array Manipulation-Footnote-11017171 +Node: Array Data Types1017208 +Ref: Array Data Types-Footnote-11019866 +Node: Array Functions1019958 +Node: Flattening Arrays1024357 +Node: Creating Arrays1031298 +Node: Redirection API1036067 +Node: Extension API Variables1038909 +Node: Extension Versioning1039542 +Ref: gawk-api-version1039979 +Node: Extension API Informational Variables1041707 +Node: Extension API Boilerplate1042771 +Node: Changes from API V11046633 +Node: Finding Extensions1047293 +Node: Extension Example1047852 +Node: Internal File Description1048650 +Node: Internal File Ops1052730 +Ref: Internal File Ops-Footnote-11064130 +Node: Using Internal File Ops1064270 +Ref: Using Internal File Ops-Footnote-11066653 +Node: Extension Samples1066927 +Node: Extension Sample File Functions1068456 +Node: Extension Sample Fnmatch1076105 +Node: Extension Sample Fork1077592 +Node: Extension Sample Inplace1078810 +Node: Extension Sample Ord1082020 +Node: Extension Sample Readdir1082856 +Ref: table-readdir-file-types1083745 +Node: Extension Sample Revout1084550 +Node: Extension Sample Rev2way1085139 +Node: Extension Sample Read write array1085879 +Node: Extension Sample Readfile1087821 +Node: Extension Sample Time1088916 +Node: Extension Sample API Tests1090264 +Node: gawkextlib1090756 +Node: Extension summary1093203 +Node: Extension Exercises1096905 +Node: Language History1098403 +Node: V7/SVR3.11100059 +Node: SVR41102211 +Node: POSIX1103645 +Node: BTL1105024 +Node: POSIX/GNU1105753 +Node: Feature History1111645 +Node: Common Extensions1126015 +Node: Ranges and Locales1127298 +Ref: Ranges and Locales-Footnote-11131914 +Ref: Ranges and Locales-Footnote-21131941 +Ref: Ranges and Locales-Footnote-31132176 +Node: Contributors1132397 +Node: History summary1137957 +Node: Installation1139337 +Node: Gawk Distribution1140281 +Node: Getting1140765 +Node: Extracting1141726 +Node: Distribution contents1143364 +Node: Unix Installation1149706 +Node: Quick Installation1150388 +Node: Shell Startup Files1152802 +Node: Additional Configuration Options1153891 +Node: Configuration Philosophy1155696 +Node: Non-Unix Installation1158065 +Node: PC Installation1158525 +Node: PC Binary Installation1159363 +Node: PC Compiling1159798 +Node: PC Using1160915 +Node: Cygwin1163960 +Node: MSYS1164730 +Node: VMS Installation1165231 +Node: VMS Compilation1166022 +Ref: VMS Compilation-Footnote-11167251 +Node: VMS Dynamic Extensions1167309 +Node: VMS Installation Details1168994 +Node: VMS Running1171247 +Node: VMS GNV1175526 +Node: VMS Old Gawk1176261 +Node: Bugs1176732 +Node: Bug address1177395 +Node: Usenet1179792 +Node: Maintainers1180569 +Node: Other Versions1181945 +Node: Installation summary1188529 +Node: Notes1189564 +Node: Compatibility Mode1190429 +Node: Additions1191211 +Node: Accessing The Source1192136 +Node: Adding Code1193571 +Node: New Ports1199789 +Node: Derived Files1204277 +Ref: Derived Files-Footnote-11209762 +Ref: Derived Files-Footnote-21209797 +Ref: Derived Files-Footnote-31210395 +Node: Future Extensions1210509 +Node: Implementation Limitations1211167 +Node: Extension Design1212350 +Node: Old Extension Problems1213504 +Ref: Old Extension Problems-Footnote-11215022 +Node: Extension New Mechanism Goals1215079 +Ref: Extension New Mechanism Goals-Footnote-11218443 +Node: Extension Other Design Decisions1218632 +Node: Extension Future Growth1220745 +Node: Old Extension Mechanism1221581 +Node: Notes summary1223344 +Node: Basic Concepts1224526 +Node: Basic High Level1225207 +Ref: figure-general-flow1225489 +Ref: figure-process-flow1226174 +Ref: Basic High Level-Footnote-11229475 +Node: Basic Data Typing1229660 +Node: Glossary1232988 +Node: Copying1264935 +Node: GNU Free Documentation License1302474 +Node: Index1327592 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 8b872e9d..fa8c6664 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -17461,13 +17461,17 @@ is @minus{}3, and @code{int(-3)} is @minus{}3 as well. @item @code{intdiv(@var{numerator}, @var{denominator}, @var{result})} @cindexawkfunc{intdiv} @cindex intdiv -Perform integer division, similar to the standard C function of the -same name. First, truncate @code{numerator} and @code{denominator} +Perform integer division, similar to the standard C @code{div()} function. +First, truncate @code{numerator} and @code{denominator} towards zero, creating integer values. Clear the @code{result} array, and then set @code{result["quotient"]} to the result of @samp{numerator / denominator}, truncated towards zero to an integer, and set @code{result["remainder"]} to the result of @samp{numerator % -denominator}, truncated towards zero to an integer. This function is +denominator}, truncated towards zero to an integer. +Attempting division by zero causes a fatal error. +The function returns zero upon success, and @minus{}1 upon error. + +This function is primarily intended for use with arbitrary length integers; it avoids creating MPFR arbitrary precision floating-point values (@pxref{Arbitrary Precision Integers}). diff --git a/doc/gawktexi.in b/doc/gawktexi.in index f991432c..21c6e506 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -16734,13 +16734,17 @@ is @minus{}3, and @code{int(-3)} is @minus{}3 as well. @item @code{intdiv(@var{numerator}, @var{denominator}, @var{result})} @cindexawkfunc{intdiv} @cindex intdiv -Perform integer division, similar to the standard C function of the -same name. First, truncate @code{numerator} and @code{denominator} +Perform integer division, similar to the standard C @code{div()} function. +First, truncate @code{numerator} and @code{denominator} towards zero, creating integer values. Clear the @code{result} array, and then set @code{result["quotient"]} to the result of @samp{numerator / denominator}, truncated towards zero to an integer, and set @code{result["remainder"]} to the result of @samp{numerator % -denominator}, truncated towards zero to an integer. This function is +denominator}, truncated towards zero to an integer. +Attempting division by zero causes a fatal error. +The function returns zero upon success, and @minus{}1 upon error. + +This function is primarily intended for use with arbitrary length integers; it avoids creating MPFR arbitrary precision floating-point values (@pxref{Arbitrary Precision Integers}). @@ -1212,7 +1212,9 @@ do_mpfr_intdiv(int nargs) } else { if (! mpfr_number_p(numerator->mpg_numbr)) { /* [+-]inf or NaN */ - return numerator; + unref(numerator); + unref(denominator); + return make_number((AWKNUM) -1); } num = mpg_integer(); @@ -1225,7 +1227,10 @@ do_mpfr_intdiv(int nargs) } else { if (! mpfr_number_p(denominator->mpg_numbr)) { /* [+-]inf or NaN */ - return denominator; + unref(numerator); + unref(denominator); + unref(num); + return make_number((AWKNUM) -1); } denom = mpg_integer(); |