diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ext.c | 11 | ||||
-rw-r--r-- | extension/ChangeLog | 4 | ||||
-rw-r--r-- | extension/testarg.awk | 9 | ||||
-rw-r--r-- | extension/testarg.c | 59 |
5 files changed, 61 insertions, 27 deletions
@@ -1,3 +1,8 @@ +Mon May 23 22:02:46 2011 John Haque <j.eh@mchsi.com> + + * ext.c (get_actual_argument): Change argument type from + Node_var_new to Node_var when used as a scalar. + Sun May 22 11:56:40 2011 Arnold D. Robbins <arnold@skeeve.com> * main.c (varinit): Give FPAT a reasonable default value. @@ -274,8 +274,15 @@ get_actual_argument(int i, int optional, int want_array) return NULL; } - if (t->type == Node_var_new) - return (want_array ? get_array(t, FALSE) : t); + if (t->type == Node_var_new) { + if (want_array) + return get_array(t, FALSE); + else { + t->type = Node_var; + t->var_value = Nnull_string; + return Nnull_string; + } + } if (want_array) { if (t->type != Node_var_array) diff --git a/extension/ChangeLog b/extension/ChangeLog index 3e1de05c..f13a7ebd 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,7 @@ +Mon May 23 22:03:46 2011 John Haque <j.eh@mchsi.com> + + * testarg.awk, testarg.c: Updated. + Thu Mar 31 22:58:19 2011 Arnold D. Robbins <arnold@skeeve.com> * filefuncs.c (do_stat): Fix a comment. Also in doc. diff --git a/extension/testarg.awk b/extension/testarg.awk index 4b9eb517..a91df1a9 100644 --- a/extension/testarg.awk +++ b/extension/testarg.awk @@ -1,6 +1,7 @@ BEGIN { - extension("./testarg.so", "dlload") - check_arg(x, a); - check_arg(y, b, z); - check_arg(p, q, r, s); + extension("./testarg.so", "dlload") + check_arg(x, a); + check_arg(y, b, z); + check_arg(u, v, u=1); + check_arg(p, q, r, s); } diff --git a/extension/testarg.c b/extension/testarg.c index c1a8dc96..ba4d56ff 100644 --- a/extension/testarg.c +++ b/extension/testarg.c @@ -5,27 +5,44 @@ int plugin_is_GPL_compatible; static NODE * do_check_arg(int nargs) { - int ret = 0, argc; - NODE *arg1, *arg2, *arg3; - - argc = get_curfunc_arg_count(); - printf("arg count: defined = %d, supplied = %d\n", - nargs, argc); - - arg1 = get_scalar_argument(0, FALSE); - arg2 = get_array_argument(1, FALSE); - arg3 = get_scalar_argument(2, TRUE); /* optional */ - if (argc > 3) { /* try to use an extra arg */ - NODE *arg4; - arg4 = get_array_argument(3, TRUE); - } - if (arg3 != NULL) - printf("3rd arg present\n\n"); - else - printf("no 3rd arg\n\n"); - - /* Set the return value */ - return make_number((AWKNUM) ret); + int ret = 0, argc; + NODE *arg1, *arg2, *arg3; + + argc = get_curfunc_arg_count(); + printf("arg count: defined = %d, supplied = %d\n", + nargs, argc); + + arg1 = get_scalar_argument(0, FALSE); + arg2 = get_array_argument(1, FALSE); + arg3 = get_scalar_argument(2, TRUE); /* optional */ + if (argc > 3) { + /* try to use an extra arg */ + NODE *arg4; + arg4 = get_array_argument(3, TRUE); + printf("Shouldn't see this line\n"); + } + if (arg3 != NULL) { + printf("3rd arg present\n"); + if (arg3->type != Node_val) + printf("3nd arg type = %s (*** NOT OK ***)\n", nodetype2str(arg3->type)); + } else + printf("no 3rd arg\n"); + + if (arg2 != NULL) { + if (arg2->type != Node_var_array) + printf("2nd arg type = %s (*** NOT OK ***)\n", nodetype2str(arg2->type)); + } else + printf("2nd arg missing (NULL) (*** NOT OK ***)\n"); + + if (arg1 != NULL) { + if (arg1->type != Node_val) + printf("1st arg type = %s (*** NOT OK ***)\n", nodetype2str(arg1->type)); + } else + printf("1st arg missing (NULL) (*** NOT OK ***)\n"); + printf("\n"); + + /* Set the return value */ + return make_number((AWKNUM) ret); } /* dlload --- load new builtins in this library */ |