aboutsummaryrefslogtreecommitdiffstats
path: root/extension/testext.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2012-06-20 21:41:15 +0300
committerArnold D. Robbins <arnold@skeeve.com>2012-06-20 21:41:15 +0300
commitd66f3c9922e36bb2e760e0ac36364c1a5aa11442 (patch)
tree94ef48f1d6a66afdddf4a18f172a0ccf857a96a2 /extension/testext.c
parentcd380faebed56979c993ec46daa8c9d927c2d1dd (diff)
downloadegawk-d66f3c9922e36bb2e760e0ac36364c1a5aa11442.tar.gz
egawk-d66f3c9922e36bb2e760e0ac36364c1a5aa11442.tar.bz2
egawk-d66f3c9922e36bb2e760e0ac36364c1a5aa11442.zip
API: Add set_parameter function and test.
Diffstat (limited to 'extension/testext.c')
-rw-r--r--extension/testext.c70
1 files changed, 64 insertions, 6 deletions
diff --git a/extension/testext.c b/extension/testext.c
index 0a7594aa..963a5638 100644
--- a/extension/testext.c
+++ b/extension/testext.c
@@ -42,6 +42,8 @@ static awk_ext_id_t *ext_id;
int plugin_is_GPL_compatible;
+static void fill_in_array(awk_value_t *value);
+
/* valrep2str --- turn a value into a string */
static const char *
@@ -386,6 +388,54 @@ out:
/*
BEGIN {
+ ret = test_array_param(a_new_array)
+ printf "test_array_param() returned %d\n", ret
+ printf "isarray(a_new_array) = %d\n", isarray(a_new_array)
+ if (isarray(a_new_array))
+ for (i in a_new_array)
+ printf("a_new_array[\"%s\"] = %s\n",
+ i, a_new_array[i])
+
+ a_scalar = 42
+ ret = test_array_param(a_scalar)
+ printf "test_array_param() returned %d\n", ret
+ printf "isarray(a_scalar) = %d\n", isarray(a_scalar)
+ print ""
+}
+*/
+
+static awk_value_t *
+test_array_param(int nargs, awk_value_t *result)
+{
+ awk_value_t new_array;
+ awk_value_t arg0;
+
+ make_number(0.0, result);
+
+ if (! get_argument(0, AWK_UNDEFINED, & arg0)) {
+ printf("test_array_param: could not get argument\n");
+ goto out;
+ }
+
+ if (arg0.val_type != AWK_UNDEFINED) {
+ printf("test_array_param: argument is not undefined (%d)\n",
+ arg0.val_type);
+ goto out;
+ }
+
+ fill_in_array(& new_array);
+ if (! set_argument(0, new_array.array_cookie)) {
+ printf("test_array_param: could not change type of argument\n");
+ goto out;
+ }
+
+ make_number(1.0, result);
+out:
+ return result; /* for now */
+}
+
+/*
+BEGIN {
printf "Initial value of LINT is %d\n", LINT
ret = print_do_lint();
printf "print_do_lint() returned %d\n", ret
@@ -448,12 +498,11 @@ out:
}
static void
-create_new_array()
+fill_in_array(awk_value_t *value)
{
awk_element_t element;
awk_array_t a_cookie;
awk_value_t index;
- awk_value_t value;
a_cookie = create_array();
@@ -461,7 +510,7 @@ create_new_array()
element.index = index;
(void) make_string("world", 5, & element.value);
if (! set_array_element(a_cookie, & element)) {
- printf("create_new_array:%d: set_array_element failed\n", __LINE__);
+ printf("fill_in_array:%d: set_array_element failed\n", __LINE__);
return;
}
@@ -469,13 +518,21 @@ create_new_array()
element.index = index;
(void) make_number(42.0, & element.value);
if (! set_array_element(a_cookie, & element)) {
- printf("create_new_array:%d: set_array_element failed\n", __LINE__);
+ printf("fill_in_array:%d: set_array_element failed\n", __LINE__);
return;
}
- value.val_type = AWK_ARRAY;
- value.array_cookie = a_cookie;
+ value->val_type = AWK_ARRAY;
+ value->array_cookie = a_cookie;
+
+}
+
+static void
+create_new_array()
+{
+ awk_value_t value;
+ fill_in_array(& value);
if (! sym_update("new_array", & value))
printf("create_new_array: sym_update(\"new_array\") failed!\n");
}
@@ -524,6 +581,7 @@ static awk_ext_func_t func_table[] = {
{ "test_errno", test_errno, 0 },
{ "test_array_size", test_array_size, 1 },
{ "test_array_elem", test_array_elem, 2 },
+ { "test_array_param", test_array_param, 1 },
{ "test_array_flatten", test_array_flatten, 1 },
{ "print_do_lint", print_do_lint, 0 },
};