aboutsummaryrefslogtreecommitdiffstats
path: root/builtin.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2015-04-14 15:06:41 +0300
committerArnold D. Robbins <arnold@skeeve.com>2015-04-14 15:06:41 +0300
commitaca30f7d82ec4fa002c6ab5ea4a2d9d77d28c2cd (patch)
tree49a3c25bc4460088e6dcc23f40bebe044ab16e67 /builtin.c
parentc187863b95bed5f750b08df898fdfb611a4bdb54 (diff)
downloadegawk-aca30f7d82ec4fa002c6ab5ea4a2d9d77d28c2cd.tar.gz
egawk-aca30f7d82ec4fa002c6ab5ea4a2d9d77d28c2cd.tar.bz2
egawk-aca30f7d82ec4fa002c6ab5ea4a2d9d77d28c2cd.zip
Add more tests, make them work. Almost done...
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/builtin.c b/builtin.c
index db62cb57..12a79177 100644
--- a/builtin.c
+++ b/builtin.c
@@ -3106,7 +3106,8 @@ call_sub(const char *name, int nargs)
* push replace
* push $0
*/
- regex = make_regnode(Node_regex, regex);
+ if (regex->type != Node_hardregex)
+ regex = make_regnode(Node_regex, regex);
PUSH(regex);
PUSH(replace);
lhs = r_get_field(zero, (Func_ptr *) 0, true);
@@ -3130,7 +3131,8 @@ call_sub(const char *name, int nargs)
* nargs++
* }
*/
- regex = make_regnode(Node_regex, regex);
+ if (regex->type != Node_hardregex)
+ regex = make_regnode(Node_regex, regex);
PUSH(regex);
PUSH(replace);
PUSH(glob_flag);
@@ -3167,7 +3169,8 @@ call_match(int nargs)
/* Don't need to pop the string just to push it back ... */
- regex = make_regnode(Node_regex, regex);
+ if (regex->type != Node_hardregex)
+ regex = make_regnode(Node_regex, regex);
PUSH(regex);
if (array)
@@ -3195,7 +3198,8 @@ call_split_func(const char *name, int nargs)
if (nargs >= 3) {
regex = POP_STRING();
- regex = make_regnode(Node_regex, regex);
+ if (regex->type != Node_hardregex)
+ regex = make_regnode(Node_regex, regex);
} else {
if (name[0] == 's') {
regex = make_regnode(Node_regex, FS_node->var_value);