1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-11-26 20:51:33 +02:00

b2/: use re_nsub instead of maintaining our own equivalent

We still need to count parentheses in prepare_re for the current index
into "units", but the rest can ue re_nsub.
This commit is contained in:
Werner Almesberger 2012-05-22 13:51:57 -03:00
parent 148d5e85ac
commit 21702781bc
2 changed files with 6 additions and 7 deletions

View File

@ -59,12 +59,12 @@ static void unit_expr(char **res, int *res_len, char unit)
} }
static char *prepare_re(const char *re, int *parens, char *units) static char *prepare_re(const char *re, char *units)
{ {
char *res = NULL; char *res = NULL;
int res_len = 0; int res_len = 0;
int parens = 0;
*parens = 0;
memset(units, 0, 10); memset(units, 0, 10);
append_char(&res, &res_len, '^'); append_char(&res, &res_len, '^');
while (*re) { while (*re) {
@ -85,11 +85,11 @@ static char *prepare_re(const char *re, int *parens, char *units)
re++; re++;
break; break;
case '(': case '(':
(*parens)++; parens++;
if (re[1] == '#' && re[2]) { if (re[1] == '#' && re[2]) {
if (!isalpha(re[2]) || re[3] != ')') if (!isalpha(re[2]) || re[3] != ')')
yyerrorf("invalid (#unit) syntax"); yyerrorf("invalid (#unit) syntax");
units[*parens-1] = re[2]; units[parens-1] = re[2];
unit_expr(&res, &res_len, re[2]); unit_expr(&res, &res_len, re[2]);
re += 3; re += 3;
break; break;
@ -115,7 +115,7 @@ struct subst *subst_match(const char *src, const char *re)
sub = alloc_subst(st_match); sub = alloc_subst(st_match);
sub->u.match.src = src; sub->u.match.src = src;
tmp = prepare_re(re, &sub->u.match.parens, sub->u.match.units); tmp = prepare_re(re, sub->u.match.units);
err = regcomp(&sub->u.match.re, tmp, REG_EXTENDED); err = regcomp(&sub->u.match.re, tmp, REG_EXTENDED);
free(tmp); free(tmp);
if (err) { if (err) {
@ -326,7 +326,7 @@ static void check_chunks(const struct chunk *c, const struct parent *parent,
if (!parent) if (!parent)
yyerrorf("$%c without match", yyerrorf("$%c without match",
c->u.sub ? c->u.sub+'0' : '$'); c->u.sub ? c->u.sub+'0' : '$');
parens = parent->sub->u.match.parens; parens = parent->sub->u.match.re.re_nsub;
if (c->u.sub > parens) if (c->u.sub > parens)
yyerrorf("$%d but only %d parenthes%s", yyerrorf("$%d but only %d parenthes%s",
c->u.sub, parens, c->u.sub, parens,

View File

@ -56,7 +56,6 @@ struct subst {
regex_t re; regex_t re;
struct subst *block; struct subst *block;
char units[NMATCH-1]; char units[NMATCH-1];
int parens; /* number of parentheses */
} match; } match;
struct { struct {
const char *dst; const char *dst;