diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2021-11-21 20:13:48 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2021-11-21 20:13:48 +0200 |
commit | 4a7a1509991bfa9b79816a04fbee3398e3be6841 (patch) | |
tree | 6313ec27fa13555778c7c7f415028d435e6890ea /builtin.c | |
parent | 5403687cb350d91f81991ad82721648e70651eb9 (diff) | |
download | egawk-4a7a1509991bfa9b79816a04fbee3398e3be6841.tar.gz egawk-4a7a1509991bfa9b79816a04fbee3398e3be6841.tar.bz2 egawk-4a7a1509991bfa9b79816a04fbee3398e3be6841.zip |
Fix subtle typeof case.
Diffstat (limited to 'builtin.c')
-rw-r--r-- | builtin.c | 23 |
1 files changed, 22 insertions, 1 deletions
@@ -4186,10 +4186,31 @@ do_typeof(int nargs) } break; case Node_var_new: - case Node_array_ref: res = "untyped"; deref = false; break; + case Node_array_ref: + /* + * function f(x) { + * print typeof(x) + * y = x + * print typeof(x) + * } + * + * BEGIN { + * print typeof(x) + * f(x) + * } + */ + if (arg->orig_array->type == Node_var + && (arg->orig_array->var_value == Nnull_string + || (arg->orig_array->var_value->flags & NULL_FIELD) != 0)) { + res = "unassigned"; + } else { + res = "untyped"; + } + deref = false; + break; case Node_var: /* * Note: this doesn't happen because the function calling code |