aboutsummaryrefslogtreecommitdiffstats
path: root/builtin.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-08-03 21:32:17 +0300
committerArnold D. Robbins <arnold@skeeve.com>2016-08-03 21:32:17 +0300
commit5b0b9518e94d4aee27e9b0b0617c2bdd0081592c (patch)
tree7fd96cba6b334e219bfad3a489fb41ff68cd82ee /builtin.c
parent14587bf02200b8f184f19f52bbff83973d9d9197 (diff)
parent9907a598dca8f129422c42f8c4fa3b4e2c988221 (diff)
downloadegawk-5b0b9518e94d4aee27e9b0b0617c2bdd0081592c.tar.gz
egawk-5b0b9518e94d4aee27e9b0b0617c2bdd0081592c.tar.bz2
egawk-5b0b9518e94d4aee27e9b0b0617c2bdd0081592c.zip
Merge branch 'master' into feature/nocopy
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/builtin.c b/builtin.c
index ab247a8b..5a8be5c4 100644
--- a/builtin.c
+++ b/builtin.c
@@ -532,7 +532,7 @@ do_length(int nargs)
return make_number(size);
}
- assert(tmp->type == Node_val || tmp->type == Node_typedregex);
+ assert(tmp->type == Node_val);
if (do_lint && (fixtype(tmp)->flags & STRING) == 0)
lintwarn(_("length: received non-string argument"));
@@ -2190,7 +2190,10 @@ do_print(int nargs, int redirtype)
DEREF(args_array[i]);
fatal(_("attempt to use array `%s' in a scalar context"), array_vname(tmp));
}
- args_array[i] = force_string_ofmt(tmp);
+ if ( (tmp->flags & STRCUR) == 0
+ || ( tmp->stfmt != STFMT_UNUSED
+ && tmp->stfmt != OFMTidx))
+ args_array[i] = force_string_ofmt(tmp);
}
if (redir_exp != NULL) {
@@ -3193,8 +3196,7 @@ call_sub(const char *name, int nargs)
* push replace
* push $0
*/
- if (regex->type != Node_typedregex)
- regex = make_regnode(Node_regex, regex);
+ regex = make_regnode(Node_regex, regex);
PUSH(regex);
PUSH(replace);
lhs = r_get_field(zero, (Func_ptr *) 0, true);
@@ -3218,8 +3220,7 @@ call_sub(const char *name, int nargs)
* nargs++
* }
*/
- if (regex->type != Node_typedregex)
- regex = make_regnode(Node_regex, regex);
+ regex = make_regnode(Node_regex, regex);
PUSH(regex);
PUSH(replace);
PUSH(glob_flag);
@@ -3256,8 +3257,7 @@ call_match(int nargs)
/* Don't need to pop the string just to push it back ... */
- if (regex->type != Node_typedregex)
- regex = make_regnode(Node_regex, regex);
+ regex = make_regnode(Node_regex, regex);
PUSH(regex);
if (array)
@@ -3285,8 +3285,7 @@ call_split_func(const char *name, int nargs)
if (nargs >= 3) {
regex = POP_STRING();
- if (regex->type != Node_typedregex)
- regex = make_regnode(Node_regex, regex);
+ regex = make_regnode(Node_regex, regex);
} else {
if (name[0] == 's') {
regex = make_regnode(Node_regex, FS_node->var_value);
@@ -3942,9 +3941,6 @@ do_typeof(int nargs)
res = "array";
deref = false;
break;
- case Node_typedregex:
- res = "regexp";
- break;
case Node_val:
case Node_var:
switch (fixtype(arg)->flags & (STRING|NUMBER|MAYBE_NUM)) {