summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2021-03-22 16:33:36 +0200
committerArnold D. Robbins <arnold@skeeve.com>2021-03-22 16:33:36 +0200
commit1fc3d1cbc5c31ecd7b232e8845530ce6a6760986 (patch)
treee971ac583d2b29de4371a0579720bf16ca142ebf
parentefc5713d00a0019eb33c8a61c8a5514da7fa303e (diff)
downloadgawk-1fc3d1cbc5c31ecd7b232e8845530ce6a6760986.tar.gz
Progress on extension support for boolean types.
-rw-r--r--ChangeLog7
-rw-r--r--doc/ChangeLog4
-rw-r--r--doc/gawk.info309
-rw-r--r--doc/gawk.texi100
-rw-r--r--doc/gawktexi.in100
-rw-r--r--extension/ChangeLog4
-rw-r--r--extension/testext.c7
-rw-r--r--gawkapi.c38
-rw-r--r--gawkapi.h20
9 files changed, 361 insertions, 228 deletions
diff --git a/ChangeLog b/ChangeLog
index 5f0bef19..36821238 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2021-03-22 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawkapi.h (make_bool): New inline function.
+ Update table of request/return types.
+ * gawkapi.c (awk_value_to_node): Add support for AWK_BOOL.
+ (node_to_awk_value): Start on same. Not yet complete.
+
2021-03-21 Arnold D. Robbins <arnold@skeeve.com>
* str_array.c (fnv1a_hash_string): New function.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 3dd82e08..748f24f4 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-22 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in (Constructor Functions): Add doc on `make_bool'.
+
2021-03-21 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in (Other Environment Variables): Document "fnv1a"
diff --git a/doc/gawk.info b/doc/gawk.info
index 445d06dd..1337e0e2 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -25483,7 +25483,8 @@ use them.
' AWK_STRNUM,'
' AWK_ARRAY,'
' AWK_SCALAR, /* opaque access to a variable */'
-' AWK_VALUE_COOKIE /* for updating a previously created value */'
+' AWK_VALUE_COOKIE, /* for updating a previously created value */'
+' AWK_BOOL'
'} awk_valtype_t;'
This 'enum' indicates the type of a value. It is used in the
following 'struct'.
@@ -25496,6 +25497,7 @@ use them.
' awk_array_t a;'
' awk_scalar_t scl;'
' awk_value_cookie_t vc;'
+' awk_bool_t b;'
' } u;'
'} awk_value_t;'
An "'awk' value." The 'val_type' member indicates what kind of
@@ -25511,6 +25513,7 @@ use them.
'#define array_cookie u.a'
'#define scalar_cookie u.scl'
'#define value_cookie u.vc'
+'#define bool_value u.b'
Using these macros makes accessing the fields of the 'awk_value_t'
more readable.
@@ -25821,6 +25824,11 @@ code would use them:
a 'char *' value pointing to data previously obtained from
'gawk_malloc()', 'gawk_calloc()', or 'gawk_realloc()'.
+'static inline awk_value_t *'
+'make_bool(awk_bool_t boolval, awk_value_t *result);'
+ This function creates a boolean value in the 'awk_value_t' variable
+ pointed to by 'result'.
+

File: gawk.info, Node: API Ownership of MPFR and GMP Values, Next: Registration Functions, Prev: Constructor Functions, Up: Extension API Description
@@ -26546,16 +26554,17 @@ summarized in *note Table 17.2: table-value-types-returned.
Type of Actual Value
--------------------------------------------------------------------------
- String Strnum Number Regex Array Undefined
--------------------------------------------------------------------------------
- String String String String String false false
- Strnum false Strnum Strnum false false false
- Number Number Number Number false false false
-Type Regex false false false Regex false false
-Requested Array false false false false Array false
- Scalar Scalar Scalar Scalar Scalar false false
- Undefined String Strnum Number Regex Array Undefined
- Value false false false false false false
+ String Strnum Number Regex Bool Array Undefined
+----------------------------------------------------------------------------------------
+ String String String String String String false false
+ Strnum false Strnum Strnum false false false false
+ Number Number Number Number false Number false false
+Type Regex false false false Regex false false false
+Requested Bool false false false false Bool false false
+ Array false false false false false Array false
+ Scalar Scalar Scalar Scalar Scalar Scalar false false
+ Undefined String Strnum Number Regex Bool Array Undefined
+ Value false false false false false false false
cookie
Table 17.2: API value types returned
@@ -38532,145 +38541,145 @@ Node: Extension API Description1022630
Node: Extension API Functions Introduction1024343
Ref: table-api-std-headers1026179
Node: General Data Types1030428
-Ref: General Data Types-Footnote-11039058
-Node: Memory Allocation Functions1039357
-Ref: Memory Allocation Functions-Footnote-11043858
-Node: Constructor Functions1043957
-Node: API Ownership of MPFR and GMP Values1047423
-Node: Registration Functions1048736
-Node: Extension Functions1049436
-Node: Exit Callback Functions1054758
-Node: Extension Version String1056008
-Node: Input Parsers1056671
-Node: Output Wrappers1069392
-Node: Two-way processors1073904
-Node: Printing Messages1076169
-Ref: Printing Messages-Footnote-11077340
-Node: Updating ERRNO1077493
-Node: Requesting Values1078232
-Ref: table-value-types-returned1078969
-Node: Accessing Parameters1079905
-Node: Symbol Table Access1081142
-Node: Symbol table by name1081654
-Ref: Symbol table by name-Footnote-11084678
-Node: Symbol table by cookie1084806
-Ref: Symbol table by cookie-Footnote-11088991
-Node: Cached values1089055
-Ref: Cached values-Footnote-11092591
-Node: Array Manipulation1092744
-Ref: Array Manipulation-Footnote-11093835
-Node: Array Data Types1093872
-Ref: Array Data Types-Footnote-11096530
-Node: Array Functions1096622
-Node: Flattening Arrays1101120
-Node: Creating Arrays1108096
-Node: Redirection API1112863
-Node: Extension API Variables1115696
-Node: Extension Versioning1116407
-Ref: gawk-api-version1116836
-Node: Extension GMP/MPFR Versioning1118567
-Node: Extension API Informational Variables1120195
-Node: Extension API Boilerplate1121268
-Node: Changes from API V11125242
-Node: Finding Extensions1126814
-Node: Extension Example1127373
-Node: Internal File Description1128171
-Node: Internal File Ops1132251
-Ref: Internal File Ops-Footnote-11143601
-Node: Using Internal File Ops1143741
-Ref: Using Internal File Ops-Footnote-11146124
-Node: Extension Samples1146398
-Node: Extension Sample File Functions1147927
-Node: Extension Sample Fnmatch1155576
-Node: Extension Sample Fork1157063
-Node: Extension Sample Inplace1158281
-Node: Extension Sample Ord1161907
-Node: Extension Sample Readdir1162743
-Ref: table-readdir-file-types1163632
-Node: Extension Sample Revout1164699
-Node: Extension Sample Rev2way1165288
-Node: Extension Sample Read write array1166028
-Node: Extension Sample Readfile1167970
-Node: Extension Sample Time1169065
-Node: Extension Sample API Tests1170817
-Node: gawkextlib1171309
-Node: Extension summary1174227
-Node: Extension Exercises1177929
-Node: Language History1179171
-Node: V7/SVR3.11180827
-Node: SVR41182979
-Node: POSIX1184413
-Node: BTL1185794
-Node: POSIX/GNU1186523
-Node: Feature History1192301
-Node: Common Extensions1208620
-Node: Ranges and Locales1209903
-Ref: Ranges and Locales-Footnote-11214519
-Ref: Ranges and Locales-Footnote-21214546
-Ref: Ranges and Locales-Footnote-31214781
-Node: Contributors1215004
-Node: History summary1221001
-Node: Installation1222381
-Node: Gawk Distribution1223325
-Node: Getting1223809
-Node: Extracting1224772
-Node: Distribution contents1226410
-Node: Unix Installation1232890
-Node: Quick Installation1233572
-Node: Shell Startup Files1235986
-Node: Additional Configuration Options1237075
-Node: Configuration Philosophy1239390
-Node: Non-Unix Installation1241759
-Node: PC Installation1242219
-Node: PC Binary Installation1243057
-Node: PC Compiling1243492
-Node: PC Using1244609
-Node: Cygwin1248162
-Node: MSYS1249386
-Node: VMS Installation1249988
-Node: VMS Compilation1250779
-Ref: VMS Compilation-Footnote-11252008
-Node: VMS Dynamic Extensions1252066
-Node: VMS Installation Details1253751
-Node: VMS Running1256004
-Node: VMS GNV1260283
-Node: VMS Old Gawk1261018
-Node: Bugs1261489
-Node: Bug address1262152
-Node: Usenet1265134
-Node: Maintainers1266138
-Node: Other Versions1267323
-Node: Installation summary1275188
-Node: Notes1276397
-Node: Compatibility Mode1277191
-Node: Additions1277973
-Node: Accessing The Source1278898
-Node: Adding Code1280335
-Node: New Ports1286554
-Node: Derived Files1290929
-Ref: Derived Files-Footnote-11296589
-Ref: Derived Files-Footnote-21296624
-Ref: Derived Files-Footnote-31297222
-Node: Future Extensions1297336
-Node: Implementation Limitations1297994
-Node: Extension Design1299204
-Node: Old Extension Problems1300348
-Ref: Old Extension Problems-Footnote-11301866
-Node: Extension New Mechanism Goals1301923
-Ref: Extension New Mechanism Goals-Footnote-11305287
-Node: Extension Other Design Decisions1305476
-Node: Extension Future Growth1307589
-Node: Notes summary1308195
-Node: Basic Concepts1309353
-Node: Basic High Level1310034
-Ref: figure-general-flow1310316
-Ref: figure-process-flow1311001
-Ref: Basic High Level-Footnote-11314302
-Node: Basic Data Typing1314487
-Node: Glossary1317815
-Node: Copying1349700
-Node: GNU Free Documentation License1387243
-Node: Index1412363
+Ref: General Data Types-Footnote-11039134
+Node: Memory Allocation Functions1039433
+Ref: Memory Allocation Functions-Footnote-11043934
+Node: Constructor Functions1044033
+Node: API Ownership of MPFR and GMP Values1047686
+Node: Registration Functions1048999
+Node: Extension Functions1049699
+Node: Exit Callback Functions1055021
+Node: Extension Version String1056271
+Node: Input Parsers1056934
+Node: Output Wrappers1069655
+Node: Two-way processors1074167
+Node: Printing Messages1076432
+Ref: Printing Messages-Footnote-11077603
+Node: Updating ERRNO1077756
+Node: Requesting Values1078495
+Ref: table-value-types-returned1079232
+Node: Accessing Parameters1080340
+Node: Symbol Table Access1081577
+Node: Symbol table by name1082089
+Ref: Symbol table by name-Footnote-11085113
+Node: Symbol table by cookie1085241
+Ref: Symbol table by cookie-Footnote-11089426
+Node: Cached values1089490
+Ref: Cached values-Footnote-11093026
+Node: Array Manipulation1093179
+Ref: Array Manipulation-Footnote-11094270
+Node: Array Data Types1094307
+Ref: Array Data Types-Footnote-11096965
+Node: Array Functions1097057
+Node: Flattening Arrays1101555
+Node: Creating Arrays1108531
+Node: Redirection API1113298
+Node: Extension API Variables1116131
+Node: Extension Versioning1116842
+Ref: gawk-api-version1117271
+Node: Extension GMP/MPFR Versioning1119002
+Node: Extension API Informational Variables1120630
+Node: Extension API Boilerplate1121703
+Node: Changes from API V11125677
+Node: Finding Extensions1127249
+Node: Extension Example1127808
+Node: Internal File Description1128606
+Node: Internal File Ops1132686
+Ref: Internal File Ops-Footnote-11144036
+Node: Using Internal File Ops1144176
+Ref: Using Internal File Ops-Footnote-11146559
+Node: Extension Samples1146833
+Node: Extension Sample File Functions1148362
+Node: Extension Sample Fnmatch1156011
+Node: Extension Sample Fork1157498
+Node: Extension Sample Inplace1158716
+Node: Extension Sample Ord1162342
+Node: Extension Sample Readdir1163178
+Ref: table-readdir-file-types1164067
+Node: Extension Sample Revout1165134
+Node: Extension Sample Rev2way1165723
+Node: Extension Sample Read write array1166463
+Node: Extension Sample Readfile1168405
+Node: Extension Sample Time1169500
+Node: Extension Sample API Tests1171252
+Node: gawkextlib1171744
+Node: Extension summary1174662
+Node: Extension Exercises1178364
+Node: Language History1179606
+Node: V7/SVR3.11181262
+Node: SVR41183414
+Node: POSIX1184848
+Node: BTL1186229
+Node: POSIX/GNU1186958
+Node: Feature History1192736
+Node: Common Extensions1209055
+Node: Ranges and Locales1210338
+Ref: Ranges and Locales-Footnote-11214954
+Ref: Ranges and Locales-Footnote-21214981
+Ref: Ranges and Locales-Footnote-31215216
+Node: Contributors1215439
+Node: History summary1221436
+Node: Installation1222816
+Node: Gawk Distribution1223760
+Node: Getting1224244
+Node: Extracting1225207
+Node: Distribution contents1226845
+Node: Unix Installation1233325
+Node: Quick Installation1234007
+Node: Shell Startup Files1236421
+Node: Additional Configuration Options1237510
+Node: Configuration Philosophy1239825
+Node: Non-Unix Installation1242194
+Node: PC Installation1242654
+Node: PC Binary Installation1243492
+Node: PC Compiling1243927
+Node: PC Using1245044
+Node: Cygwin1248597
+Node: MSYS1249821
+Node: VMS Installation1250423
+Node: VMS Compilation1251214
+Ref: VMS Compilation-Footnote-11252443
+Node: VMS Dynamic Extensions1252501
+Node: VMS Installation Details1254186
+Node: VMS Running1256439
+Node: VMS GNV1260718
+Node: VMS Old Gawk1261453
+Node: Bugs1261924
+Node: Bug address1262587
+Node: Usenet1265569
+Node: Maintainers1266573
+Node: Other Versions1267758
+Node: Installation summary1275623
+Node: Notes1276832
+Node: Compatibility Mode1277626
+Node: Additions1278408
+Node: Accessing The Source1279333
+Node: Adding Code1280770
+Node: New Ports1286989
+Node: Derived Files1291364
+Ref: Derived Files-Footnote-11297024
+Ref: Derived Files-Footnote-21297059
+Ref: Derived Files-Footnote-31297657
+Node: Future Extensions1297771
+Node: Implementation Limitations1298429
+Node: Extension Design1299639
+Node: Old Extension Problems1300783
+Ref: Old Extension Problems-Footnote-11302301
+Node: Extension New Mechanism Goals1302358
+Ref: Extension New Mechanism Goals-Footnote-11305722
+Node: Extension Other Design Decisions1305911
+Node: Extension Future Growth1308024
+Node: Notes summary1308630
+Node: Basic Concepts1309788
+Node: Basic High Level1310469
+Ref: figure-general-flow1310751
+Ref: figure-process-flow1311436
+Ref: Basic High Level-Footnote-11314737
+Node: Basic Data Typing1314922
+Node: Glossary1318250
+Node: Copying1350135
+Node: GNU Free Documentation License1387678
+Node: Index1412798

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index b472316b..7e0a7a99 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -35488,7 +35488,8 @@ multibyte encoding.
@itemx @ @ @ @ AWK_STRNUM,
@itemx @ @ @ @ AWK_ARRAY,
@itemx @ @ @ @ AWK_SCALAR,@ @ @ @ @ @ @ @ @ /* opaque access to a variable */
-@itemx @ @ @ @ AWK_VALUE_COOKIE@ @ @ @ /* for updating a previously created value */
+@itemx @ @ @ @ AWK_VALUE_COOKIE,@ @ @ /* for updating a previously created value */
+@itemx @ @ @ @ AWK_BOOL
@itemx @} awk_valtype_t;
This @code{enum} indicates the type of a value.
It is used in the following @code{struct}.
@@ -35501,6 +35502,7 @@ It is used in the following @code{struct}.
@itemx @ @ @ @ @ @ @ @ awk_array_t@ @ @ @ @ @ @ @ a;
@itemx @ @ @ @ @ @ @ @ awk_scalar_t@ @ @ @ @ @ @ scl;
@itemx @ @ @ @ @ @ @ @ awk_value_cookie_t@ vc;
+@itemx @ @ @ @ @ @ @ @ awk_bool_t@ @ @ @ @ @ @ @ @ b;
@itemx @ @ @ @ @} u;
@itemx @} awk_value_t;
An ``@command{awk} value.''
@@ -35516,6 +35518,7 @@ The @code{val_type} member indicates what kind of value the
@itemx #define array_cookie@ @ @ u.a
@itemx #define scalar_cookie@ @ u.scl
@itemx #define value_cookie@ @ @ u.vc
+@itemx #define bool_value@ @ @ @ @ u.b
Using these macros makes accessing the fields of the @code{awk_value_t} more
readable.
@@ -35843,6 +35846,11 @@ the regular expression of length @code{len}. It expects @code{string}
to be a @samp{char *} value pointing to data previously obtained from
@code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}.
+@item static inline awk_value_t *
+@itemx make_bool(awk_bool_t boolval, awk_value_t *result);
+This function creates a boolean value in the @code{awk_value_t} variable
+pointed to by @code{result}.
+
@end table
@node API Ownership of MPFR and GMP Values
@@ -36643,7 +36651,8 @@ value type, as appropriate. This behavior is summarized in
<colspec colname="c6"/>
<colspec colname="c7"/>
<colspec colname="c8"/>
- <spanspec spanname="hspan" namest="c3" nameend="c8" align="center"/>
+ <colspec colname="c9"/>
+ <spanspec spanname="hspan" namest="c3" nameend="c9" align="center"/>
<thead>
<row><entry></entry><entry spanname="hspan"><para>Type of Actual Value</para></entry></row>
<row>
@@ -36653,6 +36662,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>Strnum</para></entry>
<entry><para>Number</para></entry>
<entry><para>Regex</para></entry>
+ <entry><para>Bool</para></entry>
<entry><para>Array</para></entry>
<entry><para>Undefined</para></entry>
</row>
@@ -36665,6 +36675,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>String</para></entry>
<entry><para>String</para></entry>
<entry><para>String</para></entry>
+ <entry><para>String</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
</row>
@@ -36677,6 +36688,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
</row>
<row>
<entry></entry>
@@ -36685,6 +36697,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>Number</para></entry>
<entry><para>Number</para></entry>
<entry><para>false</para></entry>
+ <entry><para>Number</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
</row>
@@ -36693,6 +36706,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para><emphasis role="bold">Regex</emphasis></para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
<entry><para>Regex</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
@@ -36700,11 +36714,23 @@ value type, as appropriate. This behavior is summarized in
</row>
<row>
<entry><para><emphasis role="bold">Requested</emphasis></para></entry>
+ <entry><para><emphasis role="bold">Bool</emphasis></para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>Bool</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ </row>
+ <row>
+ <entry><para></para></entry>
<entry><para><emphasis role="bold">Array</emphasis></para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
<entry><para>Array</para></entry>
<entry><para>false</para></entry>
</row>
@@ -36715,6 +36741,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>Scalar</para></entry>
<entry><para>Scalar</para></entry>
<entry><para>Scalar</para></entry>
+ <entry><para>Scalar</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
</row>
@@ -36725,6 +36752,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>Strnum</para></entry>
<entry><para>Number</para></entry>
<entry><para>Regex</para></entry>
+ <entry><para>Bool</para></entry>
<entry><para>Array</para></entry>
<entry><para>Undefined</para></entry>
</row>
@@ -36737,6 +36765,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
</row>
</tbody>
</tgroup>
@@ -36753,43 +36782,46 @@ value type, as appropriate. This behavior is summarized in
\vglue-1.1\baselineskip
@end tex
@c @multitable @columnfractions .166 .166 .198 .15 .15 .166
-@multitable {Requested} {Undefined} {Number} {Number} {Scalar} {Regex} {Array} {Undefined}
-@headitem @tab @tab String @tab Strnum @tab Number @tab Regex @tab Array @tab Undefined
-@item @tab @b{String} @tab String @tab String @tab String @tab String @tab false @tab false
-@item @tab @b{Strnum} @tab false @tab Strnum @tab Strnum @tab false @tab false @tab false
-@item @tab @b{Number} @tab Number @tab Number @tab Number @tab false @tab false @tab false
-@item @b{Type} @tab @b{Regex} @tab false @tab false @tab false @tab Regex @tab false @tab false
-@item @b{Requested} @tab @b{Array} @tab false @tab false @tab false @tab false @tab Array @tab false
-@item @tab @b{Scalar} @tab Scalar @tab Scalar @tab Scalar @tab Scalar @tab false @tab false
-@item @tab @b{Undefined} @tab String @tab Strnum @tab Number @tab Regex @tab Array @tab Undefined
-@item @tab @b{Value cookie} @tab false @tab false @tab false @tab false @tab false @tab false
+@multitable {Requested} {Undefined} {Number} {Number} {Scalar} {Regex} {Number} {Array} {Undefined}
+@headitem @tab @tab String @tab Strnum @tab Number @tab Regex @tab Bool @tab Array @tab Undefined
+@item @tab @b{String} @tab String @tab String @tab String @tab String @tab String @tab false @tab false
+@item @tab @b{Strnum} @tab false @tab Strnum @tab Strnum @tab false @tab false @tab false @tab false
+@item @tab @b{Number} @tab Number @tab Number @tab Number @tab false @tab Number @tab false @tab false
+@item @b{Type} @tab @b{Regex} @tab false @tab false @tab false @tab Regex @tab false @tab false @tab false
+@item @b{Requested} @tab @b{Bool} @tab false @tab false @tab false @tab false @tab Bool @tab false @tab false
+@item @tab @b{Array} @tab false @tab false @tab false @tab false @tab false @tab Array @tab false
+@item @tab @b{Scalar} @tab Scalar @tab Scalar @tab Scalar @tab Scalar @tab Scalar @tab false @tab false
+@item @tab @b{Undefined} @tab String @tab Strnum @tab Number @tab Regex @tab Bool @tab Array @tab Undefined
+@item @tab @b{Value cookie} @tab false @tab false @tab false @tab false @tab false @tab false @tab false
@end multitable
@end ifnotdocbook
@end ifnotplaintext
@ifplaintext
@verbatim
- +-------------------------------------------------------+
- | Type of Actual Value: |
- +--------+--------+--------+--------+-------+-----------+
- | String | Strnum | Number | Regex | Array | Undefined |
-+-----------+-----------+--------+--------+--------+--------+-------+-----------+
-| | String | String | String | String | String | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Strnum | false | Strnum | Strnum | false | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Number | Number | Number | Number | false | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Regex | false | false | false | Regex | false | false |
-| Type +-----------+--------+--------+--------+--------+-------+-----------+
-| Requested | Array | false | false | false | false | Array | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Scalar | Scalar | Scalar | Scalar | Scalar | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Undefined | String | Strnum | Number | Regex | Array | Undefined |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Value | false | false | false | false | false | false |
-| | Cookie | | | | | | |
-+-----------+-----------+--------+--------+--------+--------+-------+-----------+
+ +----------------------------------------------------------------+
+ | Type of Actual Value: |
+ +--------+--------+--------+--------+--------+-------+-----------+
+ | String | Strnum | Number | Regex | Bool | Array | Undefined |
++-----------+-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | String | String | String | String | String | String | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Strnum | false | Strnum | Strnum | false | false | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Number | Number | Number | Number | false | Number | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Regex | false | false | false | Regex | false | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| Type | Bool | false | false | false | false | Bool | false | false |
+| Requested +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Array | false | false | false | false | false | Array | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Scalar | Scalar | Scalar | Scalar | Scalar | Scalar | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Undefined | String | Strnum | Number | Regex | Bool | Array | Undefined |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Value | false | false | false | false | false | false | false |
+| | Cookie | | | | | | | |
++-----------+-----------+--------+--------+--------+--------+--------+-------+-----------+
@end verbatim
@end ifplaintext
@end float
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 2c2d7297..228ea0d7 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -34385,7 +34385,8 @@ multibyte encoding.
@itemx @ @ @ @ AWK_STRNUM,
@itemx @ @ @ @ AWK_ARRAY,
@itemx @ @ @ @ AWK_SCALAR,@ @ @ @ @ @ @ @ @ /* opaque access to a variable */
-@itemx @ @ @ @ AWK_VALUE_COOKIE@ @ @ @ /* for updating a previously created value */
+@itemx @ @ @ @ AWK_VALUE_COOKIE,@ @ @ /* for updating a previously created value */
+@itemx @ @ @ @ AWK_BOOL
@itemx @} awk_valtype_t;
This @code{enum} indicates the type of a value.
It is used in the following @code{struct}.
@@ -34398,6 +34399,7 @@ It is used in the following @code{struct}.
@itemx @ @ @ @ @ @ @ @ awk_array_t@ @ @ @ @ @ @ @ a;
@itemx @ @ @ @ @ @ @ @ awk_scalar_t@ @ @ @ @ @ @ scl;
@itemx @ @ @ @ @ @ @ @ awk_value_cookie_t@ vc;
+@itemx @ @ @ @ @ @ @ @ awk_bool_t@ @ @ @ @ @ @ @ @ b;
@itemx @ @ @ @ @} u;
@itemx @} awk_value_t;
An ``@command{awk} value.''
@@ -34413,6 +34415,7 @@ The @code{val_type} member indicates what kind of value the
@itemx #define array_cookie@ @ @ u.a
@itemx #define scalar_cookie@ @ u.scl
@itemx #define value_cookie@ @ @ u.vc
+@itemx #define bool_value@ @ @ @ @ u.b
Using these macros makes accessing the fields of the @code{awk_value_t} more
readable.
@@ -34740,6 +34743,11 @@ the regular expression of length @code{len}. It expects @code{string}
to be a @samp{char *} value pointing to data previously obtained from
@code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}.
+@item static inline awk_value_t *
+@itemx make_bool(awk_bool_t boolval, awk_value_t *result);
+This function creates a boolean value in the @code{awk_value_t} variable
+pointed to by @code{result}.
+
@end table
@node API Ownership of MPFR and GMP Values
@@ -35540,7 +35548,8 @@ value type, as appropriate. This behavior is summarized in
<colspec colname="c6"/>
<colspec colname="c7"/>
<colspec colname="c8"/>
- <spanspec spanname="hspan" namest="c3" nameend="c8" align="center"/>
+ <colspec colname="c9"/>
+ <spanspec spanname="hspan" namest="c3" nameend="c9" align="center"/>
<thead>
<row><entry></entry><entry spanname="hspan"><para>Type of Actual Value</para></entry></row>
<row>
@@ -35550,6 +35559,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>Strnum</para></entry>
<entry><para>Number</para></entry>
<entry><para>Regex</para></entry>
+ <entry><para>Bool</para></entry>
<entry><para>Array</para></entry>
<entry><para>Undefined</para></entry>
</row>
@@ -35562,6 +35572,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>String</para></entry>
<entry><para>String</para></entry>
<entry><para>String</para></entry>
+ <entry><para>String</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
</row>
@@ -35574,6 +35585,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
</row>
<row>
<entry></entry>
@@ -35582,6 +35594,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>Number</para></entry>
<entry><para>Number</para></entry>
<entry><para>false</para></entry>
+ <entry><para>Number</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
</row>
@@ -35590,6 +35603,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para><emphasis role="bold">Regex</emphasis></para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
<entry><para>Regex</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
@@ -35597,11 +35611,23 @@ value type, as appropriate. This behavior is summarized in
</row>
<row>
<entry><para><emphasis role="bold">Requested</emphasis></para></entry>
+ <entry><para><emphasis role="bold">Bool</emphasis></para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>Bool</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ </row>
+ <row>
+ <entry><para></para></entry>
<entry><para><emphasis role="bold">Array</emphasis></para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
<entry><para>Array</para></entry>
<entry><para>false</para></entry>
</row>
@@ -35612,6 +35638,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>Scalar</para></entry>
<entry><para>Scalar</para></entry>
<entry><para>Scalar</para></entry>
+ <entry><para>Scalar</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
</row>
@@ -35622,6 +35649,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>Strnum</para></entry>
<entry><para>Number</para></entry>
<entry><para>Regex</para></entry>
+ <entry><para>Bool</para></entry>
<entry><para>Array</para></entry>
<entry><para>Undefined</para></entry>
</row>
@@ -35634,6 +35662,7 @@ value type, as appropriate. This behavior is summarized in
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
</row>
</tbody>
</tgroup>
@@ -35650,43 +35679,46 @@ value type, as appropriate. This behavior is summarized in
\vglue-1.1\baselineskip
@end tex
@c @multitable @columnfractions .166 .166 .198 .15 .15 .166
-@multitable {Requested} {Undefined} {Number} {Number} {Scalar} {Regex} {Array} {Undefined}
-@headitem @tab @tab String @tab Strnum @tab Number @tab Regex @tab Array @tab Undefined
-@item @tab @b{String} @tab String @tab String @tab String @tab String @tab false @tab false
-@item @tab @b{Strnum} @tab false @tab Strnum @tab Strnum @tab false @tab false @tab false
-@item @tab @b{Number} @tab Number @tab Number @tab Number @tab false @tab false @tab false
-@item @b{Type} @tab @b{Regex} @tab false @tab false @tab false @tab Regex @tab false @tab false
-@item @b{Requested} @tab @b{Array} @tab false @tab false @tab false @tab false @tab Array @tab false
-@item @tab @b{Scalar} @tab Scalar @tab Scalar @tab Scalar @tab Scalar @tab false @tab false
-@item @tab @b{Undefined} @tab String @tab Strnum @tab Number @tab Regex @tab Array @tab Undefined
-@item @tab @b{Value cookie} @tab false @tab false @tab false @tab false @tab false @tab false
+@multitable {Requested} {Undefined} {Number} {Number} {Scalar} {Regex} {Number} {Array} {Undefined}
+@headitem @tab @tab String @tab Strnum @tab Number @tab Regex @tab Bool @tab Array @tab Undefined
+@item @tab @b{String} @tab String @tab String @tab String @tab String @tab String @tab false @tab false
+@item @tab @b{Strnum} @tab false @tab Strnum @tab Strnum @tab false @tab false @tab false @tab false
+@item @tab @b{Number} @tab Number @tab Number @tab Number @tab false @tab Number @tab false @tab false
+@item @b{Type} @tab @b{Regex} @tab false @tab false @tab false @tab Regex @tab false @tab false @tab false
+@item @b{Requested} @tab @b{Bool} @tab false @tab false @tab false @tab false @tab Bool @tab false @tab false
+@item @tab @b{Array} @tab false @tab false @tab false @tab false @tab false @tab Array @tab false
+@item @tab @b{Scalar} @tab Scalar @tab Scalar @tab Scalar @tab Scalar @tab Scalar @tab false @tab false
+@item @tab @b{Undefined} @tab String @tab Strnum @tab Number @tab Regex @tab Bool @tab Array @tab Undefined
+@item @tab @b{Value cookie} @tab false @tab false @tab false @tab false @tab false @tab false @tab false
@end multitable
@end ifnotdocbook
@end ifnotplaintext
@ifplaintext
@verbatim
- +-------------------------------------------------------+
- | Type of Actual Value: |
- +--------+--------+--------+--------+-------+-----------+
- | String | Strnum | Number | Regex | Array | Undefined |
-+-----------+-----------+--------+--------+--------+--------+-------+-----------+
-| | String | String | String | String | String | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Strnum | false | Strnum | Strnum | false | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Number | Number | Number | Number | false | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Regex | false | false | false | Regex | false | false |
-| Type +-----------+--------+--------+--------+--------+-------+-----------+
-| Requested | Array | false | false | false | false | Array | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Scalar | Scalar | Scalar | Scalar | Scalar | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Undefined | String | Strnum | Number | Regex | Array | Undefined |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Value | false | false | false | false | false | false |
-| | Cookie | | | | | | |
-+-----------+-----------+--------+--------+--------+--------+-------+-----------+
+ +----------------------------------------------------------------+
+ | Type of Actual Value: |
+ +--------+--------+--------+--------+--------+-------+-----------+
+ | String | Strnum | Number | Regex | Bool | Array | Undefined |
++-----------+-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | String | String | String | String | String | String | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Strnum | false | Strnum | Strnum | false | false | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Number | Number | Number | Number | false | Number | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Regex | false | false | false | Regex | false | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| Type | Bool | false | false | false | false | Bool | false | false |
+| Requested +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Array | false | false | false | false | false | Array | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Scalar | Scalar | Scalar | Scalar | Scalar | Scalar | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Undefined | String | Strnum | Number | Regex | Bool | Array | Undefined |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Value | false | false | false | false | false | false | false |
+| | Cookie | | | | | | | |
++-----------+-----------+--------+--------+--------+--------+--------+-------+-----------+
@end verbatim
@end ifplaintext
@end float
diff --git a/extension/ChangeLog b/extension/ChangeLog
index 1a018897..053adcda 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-22 Arnold D. Robbins <arnold@skeeve.com>
+
+ * testext.c (valrep2str): Add support for AWK_BOOL.
+
2020-07-26 Arnold D. Robbins <arnold@skeeve.com>
* intdiv.c (do_intdiv): Change quotient and remainder to
diff --git a/extension/testext.c b/extension/testext.c
index b911ec93..3acfb197 100644
--- a/extension/testext.c
+++ b/extension/testext.c
@@ -88,6 +88,13 @@ valrep2str(const awk_value_t *value)
size,
value->str_value.str);
break;
+ case AWK_BOOL:
+ if (value->str_value.len + 8 < size)
+ size = value->str_value.len;
+ sprintf(buf, "<bool>: %.*s",
+ size,
+ value->str_value.str);
+ break;
case AWK_NUMBER:
sprintf(buf, "%g", value->num_value);
break;
diff --git a/gawkapi.c b/gawkapi.c
index a60549dd..929c36b8 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -160,6 +160,9 @@ awk_value_to_node(const awk_value_t *retval)
case AWK_UNDEFINED:
ext_ret_val = dupnode(Nnull_string);
break;
+ case AWK_BOOL:
+ ext_ret_val = make_bool_node(retval->bool_value != awk_false);
+ break;
case AWK_NUMBER:
switch (retval->num_type) {
case AWK_NUMBER_TYPE_DOUBLE:
@@ -567,9 +570,20 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted)
case Node_val:
/* a scalar value */
switch (wanted) {
+ case AWK_BOOL:
+ if ((node->flags & BOOL) != 0) {
+ val->val_type = AWK_BOOL;
+ val->bool_value = (get_number_si(node) ? awk_true : awk_false);
+ ret = awk_true;
+ } else {
+ ret = awk_false;
+ }
+ break;
case AWK_NUMBER:
- if (node->flags & REGEX)
+ if ((node->flags & REGEX) != 0)
val->val_type = AWK_REGEX;
+ else if ((node->flags & BOOL) != 0)
+ val->val_type = AWK_BOOL;
else {
(void) force_number(node);
assign_number(node, val);
@@ -578,7 +592,10 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted)
break;
case AWK_STRNUM:
- switch (fixtype(node)->flags & (STRING|NUMBER|USER_INPUT|REGEX)) {
+ switch (fixtype(node)->flags & (STRING|NUMBER|USER_INPUT|REGEX|BOOL)) {
+ case BOOL:
+ val->val_type = AWK_BOOL;
+ break;
case STRING:
val->val_type = AWK_STRING;
break;
@@ -612,10 +629,13 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted)
break;
case AWK_REGEX:
- switch (fixtype(node)->flags & (STRING|NUMBER|USER_INPUT|REGEX)) {
+ switch (fixtype(node)->flags & (STRING|NUMBER|USER_INPUT|REGEX|BOOL)) {
case STRING:
val->val_type = AWK_STRING;
break;
+ case BOOL:
+ val->val_type = AWK_BOOL;
+ break;
case NUMBER:
val->val_type = AWK_NUMBER;
break;
@@ -640,7 +660,10 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted)
break;
case AWK_SCALAR:
- switch (fixtype(node)->flags & (STRING|NUMBER|USER_INPUT|REGEX)) {
+ switch (fixtype(node)->flags & (STRING|NUMBER|USER_INPUT|REGEX|BOOL)) {
+ case BOOL:
+ val->val_type = AWK_BOOL;
+ break;
case STRING:
val->val_type = AWK_STRING;
break;
@@ -668,7 +691,12 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted)
case AWK_UNDEFINED:
/* return true and actual type for request of undefined */
- switch (fixtype(node)->flags & (STRING|NUMBER|USER_INPUT|REGEX)) {
+ switch (fixtype(node)->flags & (STRING|NUMBER|USER_INPUT|REGEX|BOOL)) {
+ case BOOL:
+ val->val_type = AWK_BOOL;
+ val->bool_value = (get_number_si(node) ? awk_true : awk_false);
+ ret = awk_true;
+ break;
case STRING:
assign_string(node, val, AWK_STRING);
ret = awk_true;
diff --git a/gawkapi.h b/gawkapi.h
index 3fd02df7..69233604 100644
--- a/gawkapi.h
+++ b/gawkapi.h
@@ -568,8 +568,8 @@ typedef struct gawk_api {
Table entry is type returned:
- +-------------------------------------------------------+
- | Type of Actual Value: |
+ +----------------------------------------------------------------+
+ | Type of Actual Value: |
+--------+--------+--------+--------+--------+-------+-----------+
| String | Strnum | Number | Regex | Bool | Array | Undefined |
+-----------+-----------+--------+--------+--------+--------+--------+-------+-----------+
@@ -581,10 +581,10 @@ typedef struct gawk_api {
| +-----------+--------+--------+--------+--------+--------+-------+-----------+
| | Regex | false | false | false | Regex | false | false | false |
| +-----------+--------+--------+--------+--------+--------+-------+-----------+
- | | Bool | false | false | false | false | Bool | false | false |
- | +-----------+--------+--------+--------+--------+--------+-------+-----------+
- | Type | Array | false | false | false | false | false | Array | false |
+ | Type | Bool | false | false | false | false | Bool | false | false |
| Requested +-----------+--------+--------+--------+--------+--------+-------+-----------+
+ | | Array | false | false | false | false | false | Array | false |
+ | +-----------+--------+--------+--------+--------+--------+-------+-----------+
| | Scalar | Scalar | Scalar | Scalar | Scalar | Scalar | false | false |
| +-----------+--------+--------+--------+--------+--------+-------+-----------+
| | Undefined | String | Strnum | Number | Regex | Bool | Array | Undefined |
@@ -1074,6 +1074,16 @@ make_number_mpfr(void *mpfr_ptr, awk_value_t *result)
return result;
}
+/* make_bool --- make a bool value in result */
+
+static inline awk_value_t *
+make_bool(awk_bool_t boolval, awk_value_t *result)
+{
+ result->val_type = AWK_BOOL;
+ result->bool_value = boolval;
+ return result;
+}
+
/*
* Each extension must define a function with this prototype: