mirror of
git://projects.qi-hardware.com/fped.git
synced 2024-11-22 17:24:03 +02:00
The comment of the previous commit contained a slight exaggeration: we did
in fact let duplicate variable names pass. - fpd.y: report duplicate variable/loop/column names git-svn-id: http://svn.openmoko.org/trunk/eda/fped@5766 99fdad57-331a-0410-800a-d7fa5415bdb3
This commit is contained in:
parent
325a732e1c
commit
40028ed18f
29
fpd.y
29
fpd.y
@ -68,6 +68,23 @@ static struct vec *find_vec(const struct frame *frame, const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static struct var *find_var(const struct frame *frame, const char *name)
|
||||||
|
{
|
||||||
|
const struct table *table;
|
||||||
|
struct var *var;
|
||||||
|
struct loop *loop;
|
||||||
|
|
||||||
|
for (table = frame->tables; table; table = table->next)
|
||||||
|
for (var = table->vars; var; var = var->next)
|
||||||
|
if (var->name == name)
|
||||||
|
return var;
|
||||||
|
for (loop = frame->loops; loop; loop = loop->next)
|
||||||
|
if (loop->var.name == name)
|
||||||
|
return &loop->var;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void set_frame(struct frame *frame)
|
static void set_frame(struct frame *frame)
|
||||||
{
|
{
|
||||||
curr_frame = frame;
|
curr_frame = frame;
|
||||||
@ -289,10 +306,18 @@ frame_item:
|
|||||||
table
|
table
|
||||||
| TOK_SET ID '=' expr
|
| TOK_SET ID '=' expr
|
||||||
{
|
{
|
||||||
|
if (find_var(curr_frame, $2)) {
|
||||||
|
yyerrorf("duplicate variable \"%s\"", $2);
|
||||||
|
YYABORT;
|
||||||
|
}
|
||||||
make_var($2, $4);
|
make_var($2, $4);
|
||||||
}
|
}
|
||||||
| TOK_LOOP ID '=' expr ',' expr
|
| TOK_LOOP ID '=' expr ',' expr
|
||||||
{
|
{
|
||||||
|
if (find_var(curr_frame, $2)) {
|
||||||
|
yyerrorf("duplicate variable \"%s\"", $2);
|
||||||
|
YYABORT;
|
||||||
|
}
|
||||||
make_loop($2, $4, $6);
|
make_loop($2, $4, $6);
|
||||||
}
|
}
|
||||||
| vec
|
| vec
|
||||||
@ -347,6 +372,10 @@ vars:
|
|||||||
var:
|
var:
|
||||||
ID
|
ID
|
||||||
{
|
{
|
||||||
|
if (find_var(curr_frame, $1)) {
|
||||||
|
yyerrorf("duplicate variable \"%s\"", $1);
|
||||||
|
YYABORT;
|
||||||
|
}
|
||||||
$$ = zalloc_type(struct var);
|
$$ = zalloc_type(struct var);
|
||||||
$$->name = $1;
|
$$->name = $1;
|
||||||
$$->frame = curr_frame;
|
$$->frame = curr_frame;
|
||||||
|
Loading…
Reference in New Issue
Block a user