diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2012-06-18 23:00:58 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2012-06-18 23:00:58 +0300 |
commit | 1e3ac8a49caeeb991d8163042a576a66db51c74b (patch) | |
tree | 81fe5ffd621c6cba3f98d2997f2f930a3f66343d /gawkapi.h | |
parent | b0f08ac2443e239b0ed9cc4421758f0ed3f7a94f (diff) | |
download | egawk-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.h | 37 |
1 files changed, 27 insertions, 10 deletions
@@ -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 { \ |