summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2016-12-04 09:44:19 -0500
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2016-12-04 09:44:19 -0500
commit4bcb4e30c50e95c6fd58b4b418d9fc56bb2d3ce3 (patch)
tree5ab84f157d33cf8c31c0b6b57c71a02860473ccb
parent68754e0678e84a30f6ce996cc8550d5bb9b8f5f0 (diff)
downloadgawk-4bcb4e30c50e95c6fd58b4b418d9fc56bb2d3ce3.tar.gz
Fix gawkapi.h make_regex implementation.
-rw-r--r--ChangeLog8
-rw-r--r--gawkapi.h42
2 files changed, 31 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index e4f91a49..523ac63f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2016-12-04 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkapi.h (r_make_string_type): New inline function to create strings
+ of any type, currently AWK_STRING or AWK_REGEX.
+ (r_make_string): Now a wrapper around r_make_string_type.
+ (make_regex): Convert from an inline function to a macro that
+ calls r_make_string_type.
+
2016-11-30 Arnold D. Robbins <arnold@skeeve.com>
* dfa.c: Sync with fixes in GNULIB.
diff --git a/gawkapi.h b/gawkapi.h
index 9220b091..e5d1f370 100644
--- a/gawkapi.h
+++ b/gawkapi.h
@@ -827,21 +827,22 @@ typedef struct gawk_api {
/* Constructor functions */
-/* r_make_string --- make a string value in result from the passed-in string */
+/* r_make_string_type --- make a string or regexp value in result from the passed-in string */
static inline awk_value_t *
-r_make_string(const gawk_api_t *api, /* needed for emalloc */
- awk_ext_id_t *ext_id, /* ditto */
- const char *string,
- size_t length,
- awk_bool_t duplicate,
- awk_value_t *result)
+r_make_string_type(const gawk_api_t *api, /* needed for emalloc */
+ awk_ext_id_t *ext_id, /* ditto */
+ const char *string,
+ size_t length,
+ awk_bool_t duplicate,
+ awk_value_t *result,
+ awk_valtype_t val_type)
{
char *cp = NULL;
memset(result, 0, sizeof(*result));
- result->val_type = AWK_STRING;
+ result->val_type = val_type;
result->str_value.len = length;
if (duplicate) {
@@ -856,8 +857,22 @@ r_make_string(const gawk_api_t *api, /* needed for emalloc */
return result;
}
+/* r_make_string --- make a string value in result from the passed-in string */
+
+static inline awk_value_t *
+r_make_string(const gawk_api_t *api, /* needed for emalloc */
+ awk_ext_id_t *ext_id, /* ditto */
+ const char *string,
+ size_t length,
+ awk_bool_t duplicate,
+ awk_value_t *result)
+{
+ return r_make_string_type(api, ext_id, string, length, duplicate, result, AWK_STRING);
+}
+
#define make_const_string(str, len, result) r_make_string(api, ext_id, str, len, 1, result)
#define make_malloced_string(str, len, result) r_make_string(api, ext_id, str, len, 0, result)
+#define make_regex(str, len, result) r_make_string_type(api, ext_id, str, len, 1, result, AWK_REGEX)
/* make_null_string --- make a null string value */
@@ -883,17 +898,6 @@ make_number(double num, awk_value_t *result)
return result;
}
-/* make_regex --- make a regex value in result */
-
-static inline awk_value_t *
-make_regex(const char *string, size_t length, awk_value_t *result)
-{
- make_const_string(str, len, result);
- result->val_type = AWK_REGEX;
-
- return result;
-}
-
/*
* Each extension must define a function with this prototype: