diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2015-06-19 12:42:37 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2015-06-19 12:42:37 +0300 |
commit | ec58524cb5a671c18c4af1b893e599eb04c7760a (patch) | |
tree | 1d1c3d298ec82caa03c0cf5caeb0dd14b08ce247 /re.c | |
parent | 76e1f5bfee032dbcb5c19b3e4e92f96aa05731c3 (diff) | |
parent | f7cd8a03c09a00c4cb520f881bbe838cf76e718f (diff) | |
download | egawk-ec58524cb5a671c18c4af1b893e599eb04c7760a.tar.gz egawk-ec58524cb5a671c18c4af1b893e599eb04c7760a.tar.bz2 egawk-ec58524cb5a671c18c4af1b893e599eb04c7760a.zip |
Merge branch 'master' into feature/cmake
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -351,10 +351,14 @@ re_update(NODE *t) /* regex was compiled with settings matching IGNORECASE */ if ((t->re_flags & CONSTANT) != 0) { /* it's a constant, so just return it as is */ - assert(t->type == Node_regex); + assert(t->type == Node_regex || t->type == Node_typedregex); return t->re_reg; } t1 = t->re_exp; + if (t1->type == Node_typedregex) { + assert((t1->re_flags & CONSTANT) != 0); + return t1->re_reg; + } if (t->re_text != NULL) { /* if contents haven't changed, just return it */ if (cmp_nodes(t->re_text, t1) == 0) @@ -429,6 +433,15 @@ avoid_dfa(NODE *re, char *str, size_t len) { char *end; + /* + * f = @/.../ + * if ("foo" ~ f) ... + * + * This creates a Node_dynregex with NULL re_reg. + */ + if (re->re_reg == NULL) + return false; + if (! re->re_reg->has_anchor) return false; |