aboutsummaryrefslogtreecommitdiffstats
path: root/gawkapi.h
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2012-06-18 23:00:58 +0300
committerArnold D. Robbins <arnold@skeeve.com>2012-06-18 23:00:58 +0300
commit1e3ac8a49caeeb991d8163042a576a66db51c74b (patch)
tree81fe5ffd621c6cba3f98d2997f2f930a3f66343d /gawkapi.h
parentb0f08ac2443e239b0ed9cc4421758f0ed3f7a94f (diff)
downloadegawk-1e3ac8a49caeeb991d8163042a576a66db51c74b.tar.gz
egawk-1e3ac8a49caeeb991d8163042a576a66db51c74b.tar.bz2
egawk-1e3ac8a49caeeb991d8163042a576a66db51c74b.zip
Get most of array flattening done.
Diffstat (limited to 'gawkapi.h')
-rw-r--r--gawkapi.h37
1 files changed, 27 insertions, 10 deletions
diff --git a/gawkapi.h b/gawkapi.h
index 7fdd7634..8102f70e 100644
--- a/gawkapi.h
+++ b/gawkapi.h
@@ -145,10 +145,23 @@ typedef struct awk_element {
AWK_ELEMENT_DELETE = 1 /* set by extension if
should be deleted */
} flags;
- awk_string_t index;
+ awk_value_t index;
awk_value_t value;
} awk_element_t;
+#ifdef GAWK
+#define awk_const
+#else
+#define awk_const const
+#endif
+
+typedef struct awk_flat_array {
+ void *opaque1; /* private data for use by gawk */
+ void *opaque2; /* private data for use by gawk */
+ awk_const size_t count; /* how many elements */
+ awk_element_t elements[1]; /* will be extended */
+} awk_flat_array_t;
+
/*
* A record describing an extension function. Upon being
* loaded, the extension should pass in one of these for
@@ -222,6 +235,11 @@ typedef struct gawk_api {
awk_valtype_t wanted,
awk_value_t *result);
+ /*
+ * FIXME: Missing update_argument to convert an undefined
+ * argument into an array or scalar.
+ */
+
/* Functions to print messages */
void (*api_fatal)(awk_ext_id_t id, const char *format, ...);
void (*api_warning)(awk_ext_id_t id, const char *format, ...);
@@ -257,7 +275,8 @@ typedef struct gawk_api {
* returned. Returns false if the variable doesn't exist
* or the wrong type was requested.
* In the latter case, fills in vaule->val_type with the real type.
- * Built-in variables (except PROCINFO) may not be accessed by an extension.
+ * Built-in variables (except PROCINFO) may not be accessed by an
+ * extension.
*
* awk_value_t val;
* if (! api->sym_lookup(id, name, wanted, & val))
@@ -322,8 +341,7 @@ typedef struct gawk_api {
/* Flatten out an array so that it can be looped over easily. */
awk_bool_t (*flatten_array)(awk_ext_id_t id,
awk_array_t a_cookie,
- size_t *count,
- awk_element_t **data);
+ awk_flat_array_t **data);
/*
* When done, delete any marked elements, release the memory.
@@ -332,8 +350,7 @@ typedef struct gawk_api {
*/
awk_bool_t (*release_flattened_array)(awk_ext_id_t id,
awk_array_t a_cookie,
- size_t count,
- awk_element_t *data);
+ awk_flat_array_t *data);
} gawk_api_t;
#ifndef GAWK /* these are not for the gawk code itself! */
@@ -385,11 +402,11 @@ typedef struct gawk_api {
#define clear_array(array) (api->clear_array(ext_id, array))
-#define flatten_array(array, count, data) \
- (api->flatten_array(ext_id, array, count, data))
+#define flatten_array(array, data) \
+ (api->flatten_array(ext_id, array, data))
-#define release_flattened_array(array, count, data) \
- (api->release_flattened_array(ext_id, array, count, data))
+#define release_flattened_array(array, data) \
+ (api->release_flattened_array(ext_id, array, data))
#define emalloc(pointer, type, size, message) \
do { \