1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-11-16 18:51:53 +02:00

b2/: make the match name after "break" and "continue" optional

If the name is omitted, we jump back / out of the current block.
This commit is contained in:
Werner Almesberger 2012-05-22 15:47:02 -03:00
parent 107280b6d5
commit 694d48b56a
3 changed files with 7 additions and 1 deletions

View File

@ -8,7 +8,7 @@ BAR=x /* BAR= wouldn't be syntactically correct. We need a non-empty value */
FOO=(*)(?) { FOO=(*)(?) {
BAR=$BAR$2 BAR=$BAR$2
FOO=$1 FOO=$1
continue FOO continue
} }
BAR=x(*) { $=$1 } /* remove the "x" */ BAR=x(*) { $=$1 } /* remove the "x" */

View File

@ -620,6 +620,10 @@ block:
$$ = subst_end(); $$ = subst_end();
else if (!strcmp($1, "ignore")) else if (!strcmp($1, "ignore"))
$$ = subst_ignore(); $$ = subst_ignore();
else if (!strcmp($1, "break"))
$$ = subst_break(NULL);
else if (!strcmp($1, "continue"))
$$ = subst_continue(NULL);
else else
yyerrorf("unknown keyword \"%s\"", $1); yyerrorf("unknown keyword \"%s\"", $1);
} }

View File

@ -284,6 +284,8 @@ struct parent {
static const struct subst *resolve_jump(const char *name, static const struct subst *resolve_jump(const char *name,
const struct parent *parent) const struct parent *parent)
{ {
if (!name)
return parent->sub;
while (parent) { while (parent) {
assert(parent->sub->type == st_match); assert(parent->sub->type == st_match);
if (name == parent->sub->u.match.src) if (name == parent->sub->u.match.src)