aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--awk.h10
-rw-r--r--builtin.c9
3 files changed, 21 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 6a0d300b..b987dc7c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2016-12-04 Andrew J. Schorr <aschorr@telemetry-investments.com>
+ * awk.h (fixtype): Remove conditional checking if the node type
+ is Node_val. This is already covered by the assert, and if it's not
+ true, we have serious bugs.
+ * builtin.c (do_typeof): Do not treat Node_var the same way as
+ Node_val, since they are different beasts. In reality, the argument
+ to this function will never have type Node_var.
+
+2016-12-04 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
* gawkapi.h (awk_element_t): Remove obsolete comment claiming that
the index will always be a string.
(gawk_api_t): Add new api_flatten_array_typed function and indicate
diff --git a/awk.h b/awk.h
index 0cf06279..43595933 100644
--- a/awk.h
+++ b/awk.h
@@ -1882,12 +1882,10 @@ static inline NODE *
fixtype(NODE *n)
{
assert(n->type == Node_val);
- if (n->type == Node_val) {
- if ((n->flags & (NUMCUR|USER_INPUT)) == USER_INPUT)
- return force_number(n);
- if ((n->flags & INTIND) != 0)
- return force_string(n);
- }
+ if ((n->flags & (NUMCUR|USER_INPUT)) == USER_INPUT)
+ return force_number(n);
+ if ((n->flags & INTIND) != 0)
+ return force_string(n);
return n;
}
diff --git a/builtin.c b/builtin.c
index 5d7c3764..f71d71dd 100644
--- a/builtin.c
+++ b/builtin.c
@@ -3988,7 +3988,6 @@ do_typeof(int nargs)
deref = false;
break;
case Node_val:
- case Node_var:
switch (fixtype(arg)->flags & (STRING|NUMBER|USER_INPUT|REGEX)) {
case STRING:
res = "string";
@@ -4017,6 +4016,14 @@ do_typeof(int nargs)
res = "untyped";
deref = false;
break;
+ case Node_var:
+ /*
+ * Note: this doesn't happen because the function calling code
+ * in interpret.h pushes Node_var->var_value.
+ */
+ fatal(_("typeof: invalid argument type `%s'"),
+ nodetype2str(arg->type));
+ break;
default:
fatal(_("typeof: unknown argument type `%s'"),
nodetype2str(arg->type));