Support unpacked dimensions on typedef overwrites
It is possible to declare a new typedef that shadows an existing typedef in a higher level scope. E.g. ``` typedef int T; module M; typedef real T; endmodule ``` In the current implementation this only works as long as the new type is a not an array type. Update the parser to allow to specify unpacked dimension when overwriting a typedef from a different scope. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
parent
b3f7ce6020
commit
23e1143ad6
6
parse.y
6
parse.y
|
|
@ -2685,13 +2685,13 @@ type_declaration
|
||||||
/* If the IDENTIFIER already is a typedef, it is possible for this
|
/* If the IDENTIFIER already is a typedef, it is possible for this
|
||||||
code to override the definition, but only if the typedef is
|
code to override the definition, but only if the typedef is
|
||||||
inherited from a different scope. */
|
inherited from a different scope. */
|
||||||
| K_typedef data_type TYPE_IDENTIFIER ';'
|
| K_typedef data_type TYPE_IDENTIFIER dimensions_opt ';'
|
||||||
{ perm_string name = lex_strings.make($3.text);
|
{ perm_string name = lex_strings.make($3.text);
|
||||||
if (pform_test_type_identifier_local(name)) {
|
if (pform_test_type_identifier_local(name)) {
|
||||||
yyerror(@3, "error: Typedef identifier \"%s\" is already a type name.", $3.text);
|
yyerror(@3, "error: Typedef identifier \"%s\" is already a type name.", $3.text);
|
||||||
|
delete $4;
|
||||||
} else {
|
} else {
|
||||||
pform_set_typedef(name, $2, NULL);
|
pform_set_typedef(name, $2, $4);
|
||||||
}
|
}
|
||||||
delete[]$3.text;
|
delete[]$3.text;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue