gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-3252-g68ba43


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-3252-g68ba43d
Date: Thu, 29 Nov 2018 14:40:36 -0500 (EST)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, master has been updated
       via  68ba43d9c7604d8544834dadc6f549af45d8992c (commit)
       via  7c759ec96a0e5f6fac405e67e2b7299c0ac0a867 (commit)
      from  334a4d623501739b794239add6fade23abbdb645 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=68ba43d9c7604d8544834dadc6f549af45d8992c

commit 68ba43d9c7604d8544834dadc6f549af45d8992c
Author: Arnold D. Robbins <address@hidden>
Date:   Thu Nov 29 21:40:23 2018 +0200

    And add doc.

diff --git a/doc/gawk.info b/doc/gawk.info
index 561a40f..60713f8 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -11190,15 +11190,14 @@ they are not special:
      test if an element in 'SYMTAB' is an array.  Also, you may not use
      the 'delete' statement with the 'SYMTAB' array.
 
-     You may use an index for 'SYMTAB' that is not a predefined
-     identifier:
+     Prior to version 5.0 of 'gawk', you could use an index for 'SYMTAB'
+     that was not a predefined identifier:
 
           SYMTAB["xxx"] = 5
           print SYMTAB["xxx"]
 
-     This works as expected: in this case 'SYMTAB' acts just like a
-     regular array.  The only difference is that you can't then delete
-     'SYMTAB["xxx"]'.
+     This no longer works, instead producing a fatal error, as it led to
+     rampant confusion.
 
      The 'SYMTAB' array is more interesting than it looks.  Andrew
      Schorr points out that it effectively gives 'awk' data pointers.
@@ -33916,7 +33915,7 @@ Index
 * dark corner, field separators:         Full Line Fields.    (line  22)
 * dark corner, FILENAME variable:        Getline Notes.       (line  19)
 * dark corner, FILENAME variable <1>:    Auto-set.            (line 108)
-* dark corner, FNR/NR variables:         Auto-set.            (line 410)
+* dark corner, FNR/NR variables:         Auto-set.            (line 409)
 * dark corner, format-control characters: Control Letters.    (line  33)
 * dark corner, format-control characters <1>: Control Letters.
                                                               (line 108)
@@ -34484,7 +34483,7 @@ Index
                                                               (line  12)
 * FNR variable:                          Records.             (line   6)
 * FNR variable <1>:                      Auto-set.            (line 118)
-* FNR variable, changing:                Auto-set.            (line 410)
+* FNR variable, changing:                Auto-set.            (line 409)
 * for statement:                         For Statement.       (line   6)
 * for statement, looping over arrays:    Scanning an Array.   (line  20)
 * fork() extension function:             Extension Sample Fork.
@@ -35142,7 +35141,7 @@ Index
 * not Boolean-logic operator:            Boolean Ops.         (line   6)
 * NR variable:                           Records.             (line   6)
 * NR variable <1>:                       Auto-set.            (line 143)
-* NR variable, changing:                 Auto-set.            (line 410)
+* NR variable, changing:                 Auto-set.            (line 409)
 * null strings:                          awk split records.   (line 121)
 * null strings <1>:                      Regexp Field Splitting.
                                                               (line  43)
@@ -35660,7 +35659,7 @@ Index
 * scanning arrays:                       Scanning an Array.   (line   6)
 * scanning multidimensional arrays:      Multiscanning.       (line  11)
 * Schorr, Andrew:                        Acknowledgments.     (line  60)
-* Schorr, Andrew <1>:                    Auto-set.            (line 380)
+* Schorr, Andrew <1>:                    Auto-set.            (line 379)
 * Schorr, Andrew <2>:                    Contributors.        (line 136)
 * Schreiber, Bert:                       Acknowledgments.     (line  38)
 * Schreiber, Rita:                       Acknowledgments.     (line  38)
@@ -35746,7 +35745,7 @@ Index
 * sidebar, Beware The Smoke and Mirrors!: Bitwise Functions.  (line 127)
 * sidebar, Changing FS Does Not Affect the Fields: Full Line Fields.
                                                               (line  14)
-* sidebar, Changing NR and FNR:          Auto-set.            (line 408)
+* sidebar, Changing NR and FNR:          Auto-set.            (line 407)
 * sidebar, Controlling Output Buffering with system(): I/O Functions.
                                                               (line 166)
 * sidebar, Escape Sequences for Metacharacters: Escape Sequences.
@@ -36380,369 +36379,369 @@ Node: Exit Statement454653
 Node: Built-in Variables457056
 Node: User-modified458189
 Node: Auto-set465956
-Ref: Auto-set-Footnote-1482792
-Ref: Auto-set-Footnote-2482998
-Node: ARGC and ARGV483054
-Node: Pattern Action Summary487267
-Node: Arrays489697
-Node: Array Basics491026
-Node: Array Intro491870
-Ref: figure-array-elements493845
-Ref: Array Intro-Footnote-1496549
-Node: Reference to Elements496677
-Node: Assigning Elements499141
-Node: Array Example499632
-Node: Scanning an Array501391
-Node: Controlling Scanning504413
-Ref: Controlling Scanning-Footnote-1509812
-Node: Numeric Array Subscripts510128
-Node: Uninitialized Subscripts512312
-Node: Delete513931
-Ref: Delete-Footnote-1516683
-Node: Multidimensional516740
-Node: Multiscanning519835
-Node: Arrays of Arrays521426
-Node: Arrays Summary526194
-Node: Functions528287
-Node: Built-in529325
-Node: Calling Built-in530406
-Node: Numeric Functions532402
-Ref: Numeric Functions-Footnote-1536430
-Ref: Numeric Functions-Footnote-2536787
-Ref: Numeric Functions-Footnote-3536835
-Node: String Functions537107
-Ref: String Functions-Footnote-1560965
-Ref: String Functions-Footnote-2561093
-Ref: String Functions-Footnote-3561341
-Node: Gory Details561428
-Ref: table-sub-escapes563219
-Ref: table-sub-proposed564738
-Ref: table-posix-sub566101
-Ref: table-gensub-escapes567642
-Ref: Gory Details-Footnote-1568465
-Node: I/O Functions568619
-Ref: table-system-return-values575087
-Ref: I/O Functions-Footnote-1577167
-Ref: I/O Functions-Footnote-2577315
-Node: Time Functions577435
-Ref: Time Functions-Footnote-1588106
-Ref: Time Functions-Footnote-2588174
-Ref: Time Functions-Footnote-3588332
-Ref: Time Functions-Footnote-4588443
-Ref: Time Functions-Footnote-5588555
-Ref: Time Functions-Footnote-6588782
-Node: Bitwise Functions589048
-Ref: table-bitwise-ops589642
-Ref: Bitwise Functions-Footnote-1595705
-Ref: Bitwise Functions-Footnote-2595878
-Node: Type Functions596069
-Node: I18N Functions598820
-Node: User-defined600471
-Node: Definition Syntax601276
-Ref: Definition Syntax-Footnote-1606963
-Node: Function Example607034
-Ref: Function Example-Footnote-1609956
-Node: Function Caveats609978
-Node: Calling A Function610496
-Node: Variable Scope611454
-Node: Pass By Value/Reference614448
-Node: Return Statement617947
-Node: Dynamic Typing620926
-Node: Indirect Calls621856
-Ref: Indirect Calls-Footnote-1632108
-Node: Functions Summary632236
-Node: Library Functions634941
-Ref: Library Functions-Footnote-1638548
-Ref: Library Functions-Footnote-2638691
-Node: Library Names638862
-Ref: Library Names-Footnote-1642322
-Ref: Library Names-Footnote-2642545
-Node: General Functions642631
-Node: Strtonum Function643734
-Node: Assert Function646756
-Node: Round Function650082
-Node: Cliff Random Function651622
-Node: Ordinal Functions652638
-Ref: Ordinal Functions-Footnote-1655701
-Ref: Ordinal Functions-Footnote-2655953
-Node: Join Function656163
-Ref: Join Function-Footnote-1657933
-Node: Getlocaltime Function658133
-Node: Readfile Function661875
-Node: Shell Quoting663852
-Node: Data File Management665253
-Node: Filetrans Function665885
-Node: Rewind Function669981
-Node: File Checking671891
-Ref: File Checking-Footnote-1673225
-Node: Empty Files673426
-Node: Ignoring Assigns675405
-Node: Getopt Function676955
-Ref: Getopt Function-Footnote-1688424
-Node: Passwd Functions688624
-Ref: Passwd Functions-Footnote-1697463
-Node: Group Functions697551
-Ref: Group Functions-Footnote-1705449
-Node: Walking Arrays705656
-Node: Library Functions Summary708664
-Node: Library Exercises710070
-Node: Sample Programs710535
-Node: Running Examples711305
-Node: Clones712033
-Node: Cut Program713257
-Node: Egrep Program723186
-Ref: Egrep Program-Footnote-1730698
-Node: Id Program730808
-Node: Split Program734488
-Ref: Split Program-Footnote-1737946
-Node: Tee Program738075
-Node: Uniq Program740865
-Node: Wc Program748291
-Ref: Wc Program-Footnote-1752546
-Node: Miscellaneous Programs752640
-Node: Dupword Program753853
-Node: Alarm Program755883
-Node: Translate Program760738
-Ref: Translate Program-Footnote-1765303
-Node: Labels Program765573
-Ref: Labels Program-Footnote-1768924
-Node: Word Sorting769008
-Node: History Sorting773080
-Node: Extract Program774915
-Node: Simple Sed782969
-Node: Igawk Program786043
-Ref: Igawk Program-Footnote-1800374
-Ref: Igawk Program-Footnote-2800576
-Ref: Igawk Program-Footnote-3800698
-Node: Anagram Program800813
-Node: Signature Program803875
-Node: Programs Summary805122
-Node: Programs Exercises806336
-Ref: Programs Exercises-Footnote-1810465
-Node: Advanced Features810556
-Node: Nondecimal Data812546
-Node: Array Sorting814137
-Node: Controlling Array Traversal814837
-Ref: Controlling Array Traversal-Footnote-1823205
-Node: Array Sorting Functions823323
-Ref: Array Sorting Functions-Footnote-1828414
-Node: Two-way I/O828610
-Ref: Two-way I/O-Footnote-1836330
-Ref: Two-way I/O-Footnote-2836517
-Node: TCP/IP Networking836599
-Node: Profiling839717
-Ref: Profiling-Footnote-1848389
-Node: Advanced Features Summary848712
-Node: Internationalization850556
-Node: I18N and L10N852036
-Node: Explaining gettext852723
-Ref: Explaining gettext-Footnote-1858615
-Ref: Explaining gettext-Footnote-2858800
-Node: Programmer i18n858965
-Ref: Programmer i18n-Footnote-1863914
-Node: Translator i18n863963
-Node: String Extraction864757
-Ref: String Extraction-Footnote-1865889
-Node: Printf Ordering865975
-Ref: Printf Ordering-Footnote-1868761
-Node: I18N Portability868825
-Ref: I18N Portability-Footnote-1871281
-Node: I18N Example871344
-Ref: I18N Example-Footnote-1874150
-Node: Gawk I18N874223
-Node: I18N Summary874868
-Node: Debugger876209
-Node: Debugging877232
-Node: Debugging Concepts877673
-Node: Debugging Terms879482
-Node: Awk Debugging882057
-Node: Sample Debugging Session882963
-Node: Debugger Invocation883497
-Node: Finding The Bug884883
-Node: List of Debugger Commands891361
-Node: Breakpoint Control892694
-Node: Debugger Execution Control896388
-Node: Viewing And Changing Data899750
-Node: Execution Stack903124
-Node: Debugger Info904761
-Node: Miscellaneous Debugger Commands908832
-Node: Readline Support913894
-Node: Limitations914790
-Node: Debugging Summary916899
-Node: Arbitrary Precision Arithmetic918178
-Node: Computer Arithmetic919663
-Ref: table-numeric-ranges923429
-Ref: table-floating-point-ranges923922
-Ref: Computer Arithmetic-Footnote-1924580
-Node: Math Definitions924637
-Ref: table-ieee-formats927953
-Ref: Math Definitions-Footnote-1928556
-Node: MPFR features928661
-Node: FP Math Caution930379
-Ref: FP Math Caution-Footnote-1931451
-Node: Inexactness of computations931820
-Node: Inexact representation932780
-Node: Comparing FP Values934140
-Node: Errors accumulate935381
-Node: Getting Accuracy936814
-Node: Try To Round939524
-Node: Setting precision940423
-Ref: table-predefined-precision-strings941120
-Node: Setting the rounding mode942950
-Ref: table-gawk-rounding-modes943324
-Ref: Setting the rounding mode-Footnote-1947255
-Node: Arbitrary Precision Integers947434
-Ref: Arbitrary Precision Integers-Footnote-1950609
-Node: Checking for MPFR950758
-Node: POSIX Floating Point Problems952232
-Ref: POSIX Floating Point Problems-Footnote-1956517
-Node: Floating point summary956555
-Node: Dynamic Extensions958745
-Node: Extension Intro960298
-Node: Plugin License961564
-Node: Extension Mechanism Outline962361
-Ref: figure-load-extension962800
-Ref: figure-register-new-function964365
-Ref: figure-call-new-function965457
-Node: Extension API Description967519
-Node: Extension API Functions Introduction969161
-Node: General Data Types974701
-Ref: General Data Types-Footnote-1983062
-Node: Memory Allocation Functions983361
-Ref: Memory Allocation Functions-Footnote-1987571
-Node: Constructor Functions987670
-Node: Registration Functions991256
-Node: Extension Functions991941
-Node: Exit Callback Functions997156
-Node: Extension Version String998406
-Node: Input Parsers999069
-Node: Output Wrappers1011790
-Node: Two-way processors1016302
-Node: Printing Messages1018567
-Ref: Printing Messages-Footnote-11019738
-Node: Updating ERRNO1019891
-Node: Requesting Values1020630
-Ref: table-value-types-returned1021367
-Node: Accessing Parameters1022303
-Node: Symbol Table Access1023538
-Node: Symbol table by name1024050
-Node: Symbol table by cookie1025839
-Ref: Symbol table by cookie-Footnote-11030024
-Node: Cached values1030088
-Ref: Cached values-Footnote-11033624
-Node: Array Manipulation1033777
-Ref: Array Manipulation-Footnote-11034868
-Node: Array Data Types1034905
-Ref: Array Data Types-Footnote-11037563
-Node: Array Functions1037655
-Node: Flattening Arrays1042153
-Node: Creating Arrays1049129
-Node: Redirection API1053896
-Node: Extension API Variables1056729
-Node: Extension Versioning1057440
-Ref: gawk-api-version1057869
-Node: Extension GMP/MPFR Versioning1059600
-Node: Extension API Informational Variables1061228
-Node: Extension API Boilerplate1062301
-Node: Changes from API V11066275
-Node: Finding Extensions1067847
-Node: Extension Example1068406
-Node: Internal File Description1069204
-Node: Internal File Ops1073284
-Ref: Internal File Ops-Footnote-11084634
-Node: Using Internal File Ops1084774
-Ref: Using Internal File Ops-Footnote-11087157
-Node: Extension Samples1087431
-Node: Extension Sample File Functions1088960
-Node: Extension Sample Fnmatch1096609
-Node: Extension Sample Fork1098096
-Node: Extension Sample Inplace1099314
-Node: Extension Sample Ord1102531
-Node: Extension Sample Readdir1103367
-Ref: table-readdir-file-types1104256
-Node: Extension Sample Revout1105061
-Node: Extension Sample Rev2way1105650
-Node: Extension Sample Read write array1106390
-Node: Extension Sample Readfile1108332
-Node: Extension Sample Time1109427
-Node: Extension Sample API Tests1110775
-Node: gawkextlib1111267
-Node: Extension summary1114185
-Node: Extension Exercises1117887
-Node: Language History1119385
-Node: V7/SVR3.11121041
-Node: SVR41123193
-Node: POSIX1124627
-Node: BTL1126007
-Node: POSIX/GNU1126736
-Node: Feature History1132514
-Node: Common Extensions1148560
-Node: Ranges and Locales1149843
-Ref: Ranges and Locales-Footnote-11154459
-Ref: Ranges and Locales-Footnote-21154486
-Ref: Ranges and Locales-Footnote-31154721
-Node: Contributors1154942
-Node: History summary1160887
-Node: Installation1162267
-Node: Gawk Distribution1163211
-Node: Getting1163695
-Node: Extracting1164658
-Node: Distribution contents1166296
-Node: Unix Installation1172776
-Node: Quick Installation1173458
-Node: Shell Startup Files1175872
-Node: Additional Configuration Options1176961
-Node: Configuration Philosophy1179126
-Node: Non-Unix Installation1181495
-Node: PC Installation1181955
-Node: PC Binary Installation1182793
-Node: PC Compiling1183228
-Node: PC Using1184345
-Node: Cygwin1187898
-Node: MSYS1188997
-Node: VMS Installation1189498
-Node: VMS Compilation1190289
-Ref: VMS Compilation-Footnote-11191518
-Node: VMS Dynamic Extensions1191576
-Node: VMS Installation Details1193261
-Node: VMS Running1195514
-Node: VMS GNV1199793
-Node: VMS Old Gawk1200528
-Node: Bugs1200999
-Node: Bug address1201662
-Node: Usenet1204644
-Node: Maintainers1205648
-Node: Other Versions1206909
-Node: Installation summary1213823
-Node: Notes1215025
-Node: Compatibility Mode1215819
-Node: Additions1216601
-Node: Accessing The Source1217526
-Node: Adding Code1218963
-Node: New Ports1225182
-Node: Derived Files1229670
-Ref: Derived Files-Footnote-11235316
-Ref: Derived Files-Footnote-21235351
-Ref: Derived Files-Footnote-31235949
-Node: Future Extensions1236063
-Node: Implementation Limitations1236721
-Node: Extension Design1237904
-Node: Old Extension Problems1239048
-Ref: Old Extension Problems-Footnote-11240566
-Node: Extension New Mechanism Goals1240623
-Ref: Extension New Mechanism Goals-Footnote-11243987
-Node: Extension Other Design Decisions1244176
-Node: Extension Future Growth1246289
-Node: Notes summary1247125
-Node: Basic Concepts1248300
-Node: Basic High Level1248981
-Ref: figure-general-flow1249263
-Ref: figure-process-flow1249948
-Ref: Basic High Level-Footnote-11253249
-Node: Basic Data Typing1253434
-Node: Glossary1256762
-Node: Copying1288600
-Node: GNU Free Documentation License1326143
-Node: Index1351263
+Ref: Auto-set-Footnote-1482763
+Ref: Auto-set-Footnote-2482969
+Node: ARGC and ARGV483025
+Node: Pattern Action Summary487238
+Node: Arrays489668
+Node: Array Basics490997
+Node: Array Intro491841
+Ref: figure-array-elements493816
+Ref: Array Intro-Footnote-1496520
+Node: Reference to Elements496648
+Node: Assigning Elements499112
+Node: Array Example499603
+Node: Scanning an Array501362
+Node: Controlling Scanning504384
+Ref: Controlling Scanning-Footnote-1509783
+Node: Numeric Array Subscripts510099
+Node: Uninitialized Subscripts512283
+Node: Delete513902
+Ref: Delete-Footnote-1516654
+Node: Multidimensional516711
+Node: Multiscanning519806
+Node: Arrays of Arrays521397
+Node: Arrays Summary526165
+Node: Functions528258
+Node: Built-in529296
+Node: Calling Built-in530377
+Node: Numeric Functions532373
+Ref: Numeric Functions-Footnote-1536401
+Ref: Numeric Functions-Footnote-2536758
+Ref: Numeric Functions-Footnote-3536806
+Node: String Functions537078
+Ref: String Functions-Footnote-1560936
+Ref: String Functions-Footnote-2561064
+Ref: String Functions-Footnote-3561312
+Node: Gory Details561399
+Ref: table-sub-escapes563190
+Ref: table-sub-proposed564709
+Ref: table-posix-sub566072
+Ref: table-gensub-escapes567613
+Ref: Gory Details-Footnote-1568436
+Node: I/O Functions568590
+Ref: table-system-return-values575058
+Ref: I/O Functions-Footnote-1577138
+Ref: I/O Functions-Footnote-2577286
+Node: Time Functions577406
+Ref: Time Functions-Footnote-1588077
+Ref: Time Functions-Footnote-2588145
+Ref: Time Functions-Footnote-3588303
+Ref: Time Functions-Footnote-4588414
+Ref: Time Functions-Footnote-5588526
+Ref: Time Functions-Footnote-6588753
+Node: Bitwise Functions589019
+Ref: table-bitwise-ops589613
+Ref: Bitwise Functions-Footnote-1595676
+Ref: Bitwise Functions-Footnote-2595849
+Node: Type Functions596040
+Node: I18N Functions598791
+Node: User-defined600442
+Node: Definition Syntax601247
+Ref: Definition Syntax-Footnote-1606934
+Node: Function Example607005
+Ref: Function Example-Footnote-1609927
+Node: Function Caveats609949
+Node: Calling A Function610467
+Node: Variable Scope611425
+Node: Pass By Value/Reference614419
+Node: Return Statement617918
+Node: Dynamic Typing620897
+Node: Indirect Calls621827
+Ref: Indirect Calls-Footnote-1632079
+Node: Functions Summary632207
+Node: Library Functions634912
+Ref: Library Functions-Footnote-1638519
+Ref: Library Functions-Footnote-2638662
+Node: Library Names638833
+Ref: Library Names-Footnote-1642293
+Ref: Library Names-Footnote-2642516
+Node: General Functions642602
+Node: Strtonum Function643705
+Node: Assert Function646727
+Node: Round Function650053
+Node: Cliff Random Function651593
+Node: Ordinal Functions652609
+Ref: Ordinal Functions-Footnote-1655672
+Ref: Ordinal Functions-Footnote-2655924
+Node: Join Function656134
+Ref: Join Function-Footnote-1657904
+Node: Getlocaltime Function658104
+Node: Readfile Function661846
+Node: Shell Quoting663823
+Node: Data File Management665224
+Node: Filetrans Function665856
+Node: Rewind Function669952
+Node: File Checking671862
+Ref: File Checking-Footnote-1673196
+Node: Empty Files673397
+Node: Ignoring Assigns675376
+Node: Getopt Function676926
+Ref: Getopt Function-Footnote-1688395
+Node: Passwd Functions688595
+Ref: Passwd Functions-Footnote-1697434
+Node: Group Functions697522
+Ref: Group Functions-Footnote-1705420
+Node: Walking Arrays705627
+Node: Library Functions Summary708635
+Node: Library Exercises710041
+Node: Sample Programs710506
+Node: Running Examples711276
+Node: Clones712004
+Node: Cut Program713228
+Node: Egrep Program723157
+Ref: Egrep Program-Footnote-1730669
+Node: Id Program730779
+Node: Split Program734459
+Ref: Split Program-Footnote-1737917
+Node: Tee Program738046
+Node: Uniq Program740836
+Node: Wc Program748262
+Ref: Wc Program-Footnote-1752517
+Node: Miscellaneous Programs752611
+Node: Dupword Program753824
+Node: Alarm Program755854
+Node: Translate Program760709
+Ref: Translate Program-Footnote-1765274
+Node: Labels Program765544
+Ref: Labels Program-Footnote-1768895
+Node: Word Sorting768979
+Node: History Sorting773051
+Node: Extract Program774886
+Node: Simple Sed782940
+Node: Igawk Program786014
+Ref: Igawk Program-Footnote-1800345
+Ref: Igawk Program-Footnote-2800547
+Ref: Igawk Program-Footnote-3800669
+Node: Anagram Program800784
+Node: Signature Program803846
+Node: Programs Summary805093
+Node: Programs Exercises806307
+Ref: Programs Exercises-Footnote-1810436
+Node: Advanced Features810527
+Node: Nondecimal Data812517
+Node: Array Sorting814108
+Node: Controlling Array Traversal814808
+Ref: Controlling Array Traversal-Footnote-1823176
+Node: Array Sorting Functions823294
+Ref: Array Sorting Functions-Footnote-1828385
+Node: Two-way I/O828581
+Ref: Two-way I/O-Footnote-1836301
+Ref: Two-way I/O-Footnote-2836488
+Node: TCP/IP Networking836570
+Node: Profiling839688
+Ref: Profiling-Footnote-1848360
+Node: Advanced Features Summary848683
+Node: Internationalization850527
+Node: I18N and L10N852007
+Node: Explaining gettext852694
+Ref: Explaining gettext-Footnote-1858586
+Ref: Explaining gettext-Footnote-2858771
+Node: Programmer i18n858936
+Ref: Programmer i18n-Footnote-1863885
+Node: Translator i18n863934
+Node: String Extraction864728
+Ref: String Extraction-Footnote-1865860
+Node: Printf Ordering865946
+Ref: Printf Ordering-Footnote-1868732
+Node: I18N Portability868796
+Ref: I18N Portability-Footnote-1871252
+Node: I18N Example871315
+Ref: I18N Example-Footnote-1874121
+Node: Gawk I18N874194
+Node: I18N Summary874839
+Node: Debugger876180
+Node: Debugging877203
+Node: Debugging Concepts877644
+Node: Debugging Terms879453
+Node: Awk Debugging882028
+Node: Sample Debugging Session882934
+Node: Debugger Invocation883468
+Node: Finding The Bug884854
+Node: List of Debugger Commands891332
+Node: Breakpoint Control892665
+Node: Debugger Execution Control896359
+Node: Viewing And Changing Data899721
+Node: Execution Stack903095
+Node: Debugger Info904732
+Node: Miscellaneous Debugger Commands908803
+Node: Readline Support913865
+Node: Limitations914761
+Node: Debugging Summary916870
+Node: Arbitrary Precision Arithmetic918149
+Node: Computer Arithmetic919634
+Ref: table-numeric-ranges923400
+Ref: table-floating-point-ranges923893
+Ref: Computer Arithmetic-Footnote-1924551
+Node: Math Definitions924608
+Ref: table-ieee-formats927924
+Ref: Math Definitions-Footnote-1928527
+Node: MPFR features928632
+Node: FP Math Caution930350
+Ref: FP Math Caution-Footnote-1931422
+Node: Inexactness of computations931791
+Node: Inexact representation932751
+Node: Comparing FP Values934111
+Node: Errors accumulate935352
+Node: Getting Accuracy936785
+Node: Try To Round939495
+Node: Setting precision940394
+Ref: table-predefined-precision-strings941091
+Node: Setting the rounding mode942921
+Ref: table-gawk-rounding-modes943295
+Ref: Setting the rounding mode-Footnote-1947226
+Node: Arbitrary Precision Integers947405
+Ref: Arbitrary Precision Integers-Footnote-1950580
+Node: Checking for MPFR950729
+Node: POSIX Floating Point Problems952203
+Ref: POSIX Floating Point Problems-Footnote-1956488
+Node: Floating point summary956526
+Node: Dynamic Extensions958716
+Node: Extension Intro960269
+Node: Plugin License961535
+Node: Extension Mechanism Outline962332
+Ref: figure-load-extension962771
+Ref: figure-register-new-function964336
+Ref: figure-call-new-function965428
+Node: Extension API Description967490
+Node: Extension API Functions Introduction969132
+Node: General Data Types974672
+Ref: General Data Types-Footnote-1983033
+Node: Memory Allocation Functions983332
+Ref: Memory Allocation Functions-Footnote-1987542
+Node: Constructor Functions987641
+Node: Registration Functions991227
+Node: Extension Functions991912
+Node: Exit Callback Functions997127
+Node: Extension Version String998377
+Node: Input Parsers999040
+Node: Output Wrappers1011761
+Node: Two-way processors1016273
+Node: Printing Messages1018538
+Ref: Printing Messages-Footnote-11019709
+Node: Updating ERRNO1019862
+Node: Requesting Values1020601
+Ref: table-value-types-returned1021338
+Node: Accessing Parameters1022274
+Node: Symbol Table Access1023509
+Node: Symbol table by name1024021
+Node: Symbol table by cookie1025810
+Ref: Symbol table by cookie-Footnote-11029995
+Node: Cached values1030059
+Ref: Cached values-Footnote-11033595
+Node: Array Manipulation1033748
+Ref: Array Manipulation-Footnote-11034839
+Node: Array Data Types1034876
+Ref: Array Data Types-Footnote-11037534
+Node: Array Functions1037626
+Node: Flattening Arrays1042124
+Node: Creating Arrays1049100
+Node: Redirection API1053867
+Node: Extension API Variables1056700
+Node: Extension Versioning1057411
+Ref: gawk-api-version1057840
+Node: Extension GMP/MPFR Versioning1059571
+Node: Extension API Informational Variables1061199
+Node: Extension API Boilerplate1062272
+Node: Changes from API V11066246
+Node: Finding Extensions1067818
+Node: Extension Example1068377
+Node: Internal File Description1069175
+Node: Internal File Ops1073255
+Ref: Internal File Ops-Footnote-11084605
+Node: Using Internal File Ops1084745
+Ref: Using Internal File Ops-Footnote-11087128
+Node: Extension Samples1087402
+Node: Extension Sample File Functions1088931
+Node: Extension Sample Fnmatch1096580
+Node: Extension Sample Fork1098067
+Node: Extension Sample Inplace1099285
+Node: Extension Sample Ord1102502
+Node: Extension Sample Readdir1103338
+Ref: table-readdir-file-types1104227
+Node: Extension Sample Revout1105032
+Node: Extension Sample Rev2way1105621
+Node: Extension Sample Read write array1106361
+Node: Extension Sample Readfile1108303
+Node: Extension Sample Time1109398
+Node: Extension Sample API Tests1110746
+Node: gawkextlib1111238
+Node: Extension summary1114156
+Node: Extension Exercises1117858
+Node: Language History1119356
+Node: V7/SVR3.11121012
+Node: SVR41123164
+Node: POSIX1124598
+Node: BTL1125978
+Node: POSIX/GNU1126707
+Node: Feature History1132485
+Node: Common Extensions1148531
+Node: Ranges and Locales1149814
+Ref: Ranges and Locales-Footnote-11154430
+Ref: Ranges and Locales-Footnote-21154457
+Ref: Ranges and Locales-Footnote-31154692
+Node: Contributors1154913
+Node: History summary1160858
+Node: Installation1162238
+Node: Gawk Distribution1163182
+Node: Getting1163666
+Node: Extracting1164629
+Node: Distribution contents1166267
+Node: Unix Installation1172747
+Node: Quick Installation1173429
+Node: Shell Startup Files1175843
+Node: Additional Configuration Options1176932
+Node: Configuration Philosophy1179097
+Node: Non-Unix Installation1181466
+Node: PC Installation1181926
+Node: PC Binary Installation1182764
+Node: PC Compiling1183199
+Node: PC Using1184316
+Node: Cygwin1187869
+Node: MSYS1188968
+Node: VMS Installation1189469
+Node: VMS Compilation1190260
+Ref: VMS Compilation-Footnote-11191489
+Node: VMS Dynamic Extensions1191547
+Node: VMS Installation Details1193232
+Node: VMS Running1195485
+Node: VMS GNV1199764
+Node: VMS Old Gawk1200499
+Node: Bugs1200970
+Node: Bug address1201633
+Node: Usenet1204615
+Node: Maintainers1205619
+Node: Other Versions1206880
+Node: Installation summary1213794
+Node: Notes1214996
+Node: Compatibility Mode1215790
+Node: Additions1216572
+Node: Accessing The Source1217497
+Node: Adding Code1218934
+Node: New Ports1225153
+Node: Derived Files1229641
+Ref: Derived Files-Footnote-11235287
+Ref: Derived Files-Footnote-21235322
+Ref: Derived Files-Footnote-31235920
+Node: Future Extensions1236034
+Node: Implementation Limitations1236692
+Node: Extension Design1237875
+Node: Old Extension Problems1239019
+Ref: Old Extension Problems-Footnote-11240537
+Node: Extension New Mechanism Goals1240594
+Ref: Extension New Mechanism Goals-Footnote-11243958
+Node: Extension Other Design Decisions1244147
+Node: Extension Future Growth1246260
+Node: Notes summary1247096
+Node: Basic Concepts1248271
+Node: Basic High Level1248952
+Ref: figure-general-flow1249234
+Ref: figure-process-flow1249919
+Ref: Basic High Level-Footnote-11253220
+Node: Basic Data Typing1253405
+Node: Glossary1256733
+Node: Copying1288571
+Node: GNU Free Documentation License1326114
+Node: Index1351234
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 6d0c731..3443aee 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -15935,7 +15935,8 @@ if an element in @code{SYMTAB} is an array.
 Also, you may not use the @code{delete} statement with the
 @code{SYMTAB} array.
 
-You may use an index for @code{SYMTAB} that is not a predefined identifier:
+Prior to @value{PVERSION} 5.0 of @command{gawk}, you could
+use an index for @code{SYMTAB} that was not a predefined identifier:
 
 @example
 SYMTAB["xxx"] = 5
@@ -15943,9 +15944,8 @@ print SYMTAB["xxx"]
 @end example
 
 @noindent
-This works as expected: in this case @code{SYMTAB} acts just like
-a regular array.  The only difference is that you can't then delete
address@hidden"xxx"]}.
+This no longer works, instead producing a fatal error, as it led
+to rampant confusion.
 
 @cindex Schorr, Andrew
 The @code{SYMTAB} array is more interesting than it looks. Andrew Schorr

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=7c759ec96a0e5f6fac405e67e2b7299c0ac0a867

commit 7c759ec96a0e5f6fac405e67e2b7299c0ac0a867
Author: Arnold D. Robbins <address@hidden>
Date:   Thu Nov 29 21:39:47 2018 +0200

    Disable writing to arbitrary elements of SYMTAB.

diff --git a/NEWS b/NEWS
index a25c30d..b543b0f 100644
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,9 @@ Changes from 4.2.x to 5.0.0
 4. PROCINFO["platform"] yields a string indicating the platform for
    which gawk was compiled.
 
+5. Writing to elements of SYMTAB that are not variable names now
+   causes a fatal error.
+
 Changes from 4.2.1 to 4.2.2
 ---------------------------
 
diff --git a/doc/ChangeLog b/doc/ChangeLog
index f31aae7..261388a 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-29         Arnold D. Robbins     <address@hidden>
+
+       * gawktexi.in (Auto-set): Document that you can no longer use
+       arbitrary indices in SYMTAB.
+       * gawk.1: Ditto.
+
 2018-11-27         Arnold D. Robbins     <address@hidden>
 
        * gawktexi.in (Other Versions): Document GoAWK, an awk interpreter
diff --git a/doc/gawk.1 b/doc/gawk.1
index 5caff79..4964cb3 100644
--- a/doc/gawk.1
+++ b/doc/gawk.1
@@ -13,7 +13,7 @@
 .              if \w'\(rq' .ds rq "\(rq
 .      \}
 .\}
-.TH GAWK 1 "Nov 26 2018" "Free Software Foundation" "Utility Commands"
+.TH GAWK 1 "Nov 29 2018" "Free Software Foundation" "Utility Commands"
 .SH NAME
 gawk \- pattern scanning and processing language
 .SH SYNOPSIS
@@ -1425,7 +1425,8 @@ You may not use the
 .B delete
 statement with the
 .B SYMTAB
-array.
+array, nor assign to elements with an index that is
+not a variable name.
 .TP
 .B TEXTDOMAIN
 The text domain of the \*(AK program; used to find the localized
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 9a21913..cc66753 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -15253,7 +15253,8 @@ if an element in @code{SYMTAB} is an array.
 Also, you may not use the @code{delete} statement with the
 @code{SYMTAB} array.
 
-You may use an index for @code{SYMTAB} that is not a predefined identifier:
+Prior to @value{PVERSION} 5.0 of @command{gawk}, you could
+use an index for @code{SYMTAB} that was not a predefined identifier:
 
 @example
 SYMTAB["xxx"] = 5
@@ -15261,9 +15262,8 @@ print SYMTAB["xxx"]
 @end example
 
 @noindent
-This works as expected: in this case @code{SYMTAB} acts just like
-a regular array.  The only difference is that you can't then delete
address@hidden"xxx"]}.
+This no longer works, instead producing a fatal error, as it led
+to rampant confusion.
 
 @cindex Schorr, Andrew
 The @code{SYMTAB} array is more interesting than it looks. Andrew Schorr
diff --git a/interpret.h b/interpret.h
index 4381a92..6a1a08b 100644
--- a/interpret.h
+++ b/interpret.h
@@ -348,16 +348,19 @@ uninitialized_scalar:
                         *      3. Values that awk code stuck into SYMTAB not 
related to variables (Node_value)
                         * For 1, since we are giving it a value, we have to 
change the type to Node_var.
                         * For 1 and 2, we have to step through the Node_var to 
get to the value.
-                        * For 3, we just us the value we got from 
assoc_lookup(), above.
+                        * For 3, we fatal out. This avoids confusion on things 
like
+                        * SYMTAB["a foo"] = 42 # variable with a space in its 
name?
                         */
                        if (t1 == func_table)
                                fatal(_("cannot assign to elements of 
FUNCTAB"));
-                       else if (   t1 == symbol_table
-                                && (   (*lhs)->type == Node_var
+                       else if (t1 == symbol_table) {
+                               if ((   (*lhs)->type == Node_var
                                     || (*lhs)->type == Node_var_new)) {
-                               update_global_values();         /* make sure 
stuff like NF, NR, are up to date */
-                               (*lhs)->type = Node_var;        /* in case was 
Node_var_new */
-                               lhs = & ((*lhs)->var_value);    /* extra level 
of indirection */
+                                       update_global_values();         /* make 
sure stuff like NF, NR, are up to date */
+                                       (*lhs)->type = Node_var;        /* in 
case was Node_var_new */
+                                       lhs = & ((*lhs)->var_value);    /* 
extra level of indirection */
+                               } else
+                                       fatal(_("cannot assign to arbitrary 
elements of SYMTAB"));
                        }
 
                        assert(set_idx == NULL);
@@ -658,22 +661,25 @@ mod:
                        /*
                         * Changing something in FUNCTAB is not allowed.
                         *
-                        * SYMTAB is a little more messy.  Three kinds of 
values may
-                        * be stored in SYMTAB:
+                        * SYMTAB is a little more messy.  Three possibilities 
for SYMTAB:
                         *      1. Variables that don"t yet have a value 
(Node_var_new)
                         *      2. Variables that have a value (Node_var)
                         *      3. Values that awk code stuck into SYMTAB not 
related to variables (Node_value)
                         * For 1, since we are giving it a value, we have to 
change the type to Node_var.
                         * For 1 and 2, we have to step through the Node_var to 
get to the value.
-                        * For 3, we just us the value we got from 
assoc_lookup(), above.
+                        * For 3, we fatal out. This avoids confusion on things 
like
+                        * SYMTAB["a foo"] = 42 # variable with a space in its 
name?
                         */
                        if (t1 == func_table)
                                fatal(_("cannot assign to elements of 
FUNCTAB"));
-                       else if (   t1 == symbol_table
-                                && (   (*lhs)->type == Node_var
+                       else if (t1 == symbol_table) {
+                               if ((   (*lhs)->type == Node_var
                                     || (*lhs)->type == Node_var_new)) {
-                               (*lhs)->type = Node_var;        /* in case was 
Node_var_new */
-                               lhs = & ((*lhs)->var_value);    /* extra level 
of indirection */
+                                       update_global_values();         /* make 
sure stuff like NF, NR, are up to date */
+                                       (*lhs)->type = Node_var;        /* in 
case was Node_var_new */
+                                       lhs = & ((*lhs)->var_value);    /* 
extra level of indirection */
+                               } else
+                                       fatal(_("cannot assign to arbitrary 
elements of SYMTAB"));
                        }
 
                        unref(*lhs);
diff --git a/test/Makefile.am b/test/Makefile.am
index e1ecc64..a44a194 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -2101,8 +2101,7 @@ charasbytes:
 
 symtab6:
        @echo $@
-       @$(AWK) -d__$@ -f "$(srcdir)"/address@hidden
-       @grep -v '^ENVIRON' __$@ | grep -v '^PROCINFO' > _$@ ; rm __$@
+       @$(AWK) -f "$(srcdir)"/address@hidden > _$@ 2>&1 || echo EXIT CODE: $$? 
>>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
 
 symtab8:
diff --git a/test/Makefile.in b/test/Makefile.in
index 1e3fe2e..4c19588 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -2549,8 +2549,7 @@ charasbytes:
 
 symtab6:
        @echo $@
-       @$(AWK) -d__$@ -f "$(srcdir)"/address@hidden
-       @grep -v '^ENVIRON' __$@ | grep -v '^PROCINFO' > _$@ ; rm __$@
+       @$(AWK) -f "$(srcdir)"/address@hidden > _$@ 2>&1 || echo EXIT CODE: $$? 
>>_$@
        @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
 
 symtab8:
diff --git a/test/symtab6.ok b/test/symtab6.ok
index 7de717a..23a1633 100644
--- a/test/symtab6.ok
+++ b/test/symtab6.ok
@@ -1,28 +1,2 @@
-ARGC: 1
-ARGIND: 0
-ARGV: array, 1 elements
-BINMODE: 0
-CONVFMT: "%.6g"
-ERRNO: ""
-FIELDWIDTHS: ""
-FILENAME: ""
-FNR: 0
-FPAT: "[^[:space:]]+"
-FS: " "
-FUNCTAB: array, 41 elements
-IGNORECASE: 0
-LINT: 0
-NF: 0
-NR: 0
-OFMT: "%.6g"
-OFS: " "
-ORS: "\n"
-PREC: 53
-RLENGTH: 0
-ROUNDMODE: "N"
-RS: "\n"
-RSTART: 0
-RT: ""
-SUBSEP: "\034"
-SYMTAB: array, 29 elements
-TEXTDOMAIN: "messages"
+gawk: ./symtab6.awk:1: fatal: cannot assign to arbitrary elements of SYMTAB
+EXIT CODE: 2
diff --git a/test/symtab7.ok b/test/symtab7.ok
index 2832883..37de1a4 100644
--- a/test/symtab7.ok
+++ b/test/symtab7.ok
@@ -1,2 +1,2 @@
-30
-40
+gawk: symtab7.awk:4: (FILENAME=- FNR=1) fatal: cannot assign to arbitrary 
elements of SYMTAB
+EXIT CODE: 2

-----------------------------------------------------------------------

Summary of changes:
 NEWS             |   3 +
 doc/ChangeLog    |   6 +
 doc/gawk.1       |   5 +-
 doc/gawk.info    | 747 +++++++++++++++++++++++++++----------------------------
 doc/gawk.texi    |   8 +-
 doc/gawktexi.in  |   8 +-
 interpret.h      |  32 ++-
 test/Makefile.am |   3 +-
 test/Makefile.in |   3 +-
 test/symtab6.ok  |  30 +--
 test/symtab7.ok  |   4 +-
 11 files changed, 418 insertions(+), 431 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]