diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2016-11-15 21:03:57 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2016-11-15 21:03:57 +0200 |
commit | b37675aa79213f2665abb2bbb4db90560642bdee (patch) | |
tree | 74a00854546a7a174b0722277def07fbfbc0e4cd /awkgram.c | |
parent | 84a7c376d6322a6e2429af79358091d10d94c004 (diff) | |
download | egawk-b37675aa79213f2665abb2bbb4db90560642bdee.tar.gz egawk-b37675aa79213f2665abb2bbb4db90560642bdee.tar.bz2 egawk-b37675aa79213f2665abb2bbb4db90560642bdee.zip |
First steps reworking code away from node type.
Diffstat (limited to 'awkgram.c')
-rw-r--r-- | awkgram.c | 23 |
1 files changed, 16 insertions, 7 deletions
@@ -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; } |