diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2011-05-18 22:12:29 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2011-05-18 22:12:29 +0300 |
commit | 77459046d0c79ac5538f7da6731fbdb15c8d10fc (patch) | |
tree | b5b2d79f4925c5f772dd5bd2b81ab78396286141 /regcomp.c | |
parent | ad61e1cba6053cac959d227dfdf2aaae0a01c125 (diff) | |
download | egawk-77459046d0c79ac5538f7da6731fbdb15c8d10fc.tar.gz egawk-77459046d0c79ac5538f7da6731fbdb15c8d10fc.tar.bz2 egawk-77459046d0c79ac5538f7da6731fbdb15c8d10fc.zip |
Update regex; fix to io.c; update de.po, fi.po.
Diffstat (limited to 'regcomp.c')
-rw-r--r-- | regcomp.c | 19 |
1 files changed, 16 insertions, 3 deletions
@@ -2206,16 +2206,21 @@ parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, exp = parse_expression (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && exp == NULL, 0)) { + if (tree != NULL) + postorder (tree, free_tree, NULL); return NULL; } if (tree != NULL && exp != NULL) { - tree = create_tree (dfa, tree, exp, CONCAT); - if (tree == NULL) + bin_tree_t *newtree = create_tree (dfa, tree, exp, CONCAT); + if (newtree == NULL) { + postorder (exp, free_tree, NULL); + postorder (tree, free_tree, NULL); *err = REG_ESPACE; return NULL; } + tree = newtree; } else if (tree == NULL) tree = exp; @@ -2464,7 +2469,11 @@ parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, { tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); if (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0)) - *err = REG_EPAREN; + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + *err = REG_EPAREN; + } if (BE (*err != REG_NOERROR, 0)) return NULL; } @@ -3092,6 +3101,10 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, if (BE (sbcset == NULL, 0)) #endif /* RE_ENABLE_I18N */ { + re_free (sbcset); +#ifdef RE_ENABLE_I18N + re_free (mbcset); +#endif *err = REG_ESPACE; return NULL; } |