aboutsummaryrefslogtreecommitdiffstats
path: root/awkgram.c
diff options
context:
space:
mode:
Diffstat (limited to 'awkgram.c')
-rw-r--r--awkgram.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/awkgram.c b/awkgram.c
index fed91b39..4bf6b95e 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -2283,7 +2283,7 @@ yyreduce:
len = strlen(re);
exp = make_str_node(re, len, ALREADY_MALLOCED);
- n = make_regnode(Node_typedregex, exp);
+ n = make_regnode(Node_val, exp);
if (n == NULL) {
unref(exp);
YYABORT;
@@ -3154,7 +3154,7 @@ regular_print:
case 80:
#line 1278 "awkgram.y" /* yacc.c:1646 */
{
- assert((yyvsp[0])->memory->type == Node_typedregex);
+ assert(((yyvsp[0])->memory->flags & REGEX) == REGEX);
(yyvsp[0])->opcode = Op_push_re;
(yyval) = (yyvsp[0]);
}
@@ -3481,7 +3481,7 @@ regular_print:
_("regular expression on left of `~' or `!~' operator"));
assert((yyvsp[0])->opcode == Op_push_re
- && (yyvsp[0])->memory->type == Node_typedregex);
+ && ((yyvsp[0])->memory->flags & REGEX) != 0);
/* RHS is @/.../ */
(yyvsp[-1])->memory = (yyvsp[0])->memory;
bcfree((yyvsp[0]));
@@ -5836,6 +5836,7 @@ yylex(void)
lexeme = lexptr;
thisline = NULL;
+
collect_regexp:
if (want_regexp) {
int in_brack = 0; /* count brackets, [[:alnum:]] allowed */
@@ -7051,8 +7052,8 @@ valinfo(NODE *n, Func_print print_func, FILE *fp)
{
if (n == Nnull_string)
print_func(fp, "uninitialized scalar\n");
- else if (n->type == Node_typedregex)
- print_func(fp, "@/%.*s/\n", n->re_exp->stlen, n->re_exp->stptr);
+ else if ((n->flags & REGEX) != 0)
+ print_func(fp, "@/%.*s/\n", n->stlen, n->stptr);
else if ((n->flags & STRING) != 0) {
pp_string_fp(print_func, fp, n->stptr, n->stlen, '"', false);
print_func(fp, "\n");
@@ -7425,9 +7426,9 @@ make_regnode(int type, NODE *exp)
getnode(n);
memset(n, 0, sizeof(NODE));
n->type = type;
- n->re_cnt = 1;
- if (type == Node_regex || type == Node_typedregex) {
+ if (type == Node_regex) {
+ n->re_cnt = 1;
n->re_reg = make_regexp(exp->stptr, exp->stlen, false, true, false);
if (n->re_reg == NULL) {
freenode(n);
@@ -7436,6 +7437,14 @@ make_regnode(int type, NODE *exp)
n->re_exp = exp;
n->re_flags = CONSTANT;
n->valref = 1;
+ } else if (type == Node_val) {
+ exp->tre_regs = make_regexp(exp->stptr, exp->stlen, false, true, false);
+ exp->flags |= REGEX|MALLOC|STRCUR|NUMCUR;
+ exp->numbr = 0;
+ exp->flags &= ~(STRING|NUMBER);
+ exp->valref = 1;
+ unref(n);
+ n = exp;
}
return n;
}