aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2015-06-28 22:08:12 +0300
committerArnold D. Robbins <arnold@skeeve.com>2015-06-28 22:08:12 +0300
commit687e6594ca3a6195ef834a5466b5fc7de2de2d7b (patch)
tree78642a8843c150a7ce6dac980287645b876499a3
parent8a4905be350313d41f6c0b20497809760d7fa84e (diff)
downloadegawk-687e6594ca3a6195ef834a5466b5fc7de2de2d7b.tar.gz
egawk-687e6594ca3a6195ef834a5466b5fc7de2de2d7b.tar.bz2
egawk-687e6594ca3a6195ef834a5466b5fc7de2de2d7b.zip
Improve memory tracking on typed regex.
-rw-r--r--ChangeLog8
-rw-r--r--awkgram.c1
-rw-r--r--awkgram.y1
-rw-r--r--builtin.c2
-rw-r--r--interpret.h2
5 files changed, 12 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 2a018fe8..2d94bf7e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-06-28 Arnold D. Robbins <arnold@skeeve.com>
+
+ Improve memory tracking of typed regexps.
+
+ * awkgram.y (make_regnode): Set valref to 1.
+ * interpret.h (r_interpret): Have Op_push_re upref typed regexp.
+ * builtin.c (do_typeof): OK to deref typed regex.
+
2015-06-26 Arnold D. Robbins <arnold@skeeve.com>
Remove support for old-style extensions.
diff --git a/awkgram.c b/awkgram.c
index 88e02afa..0ee3e66a 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -7286,6 +7286,7 @@ make_regnode(int type, NODE *exp)
}
n->re_exp = exp;
n->re_flags = CONSTANT;
+ n->valref = 1;
}
return n;
}
diff --git a/awkgram.y b/awkgram.y
index c2dbdb48..4f223797 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -4866,6 +4866,7 @@ make_regnode(int type, NODE *exp)
}
n->re_exp = exp;
n->re_flags = CONSTANT;
+ n->valref = 1;
}
return n;
}
diff --git a/builtin.c b/builtin.c
index 6ad4de36..c28cd0a8 100644
--- a/builtin.c
+++ b/builtin.c
@@ -3884,9 +3884,7 @@ do_typeof(int nargs)
deref = false;
break;
case Node_typedregex:
- /* Op_push_re does not UPREF */
res = "regexp";
- deref = false;
break;
case Node_val:
case Node_var:
diff --git a/interpret.h b/interpret.h
index fab4f1c6..0a5cbbfe 100644
--- a/interpret.h
+++ b/interpret.h
@@ -990,6 +990,8 @@ arrayfor:
r = POP_STRING();
unref(m->re_exp);
m->re_exp = r;
+ } else if (m->type == Node_typedregex) {
+ UPREF(m);
}
PUSH(m);
break;