Support class constructor without parenthesis
Class constructors can be declared without parenthesis after the `new` when
no arguments are required. Just like for normal function.
In a similar way the base class constructor can also be invoked without
parenthesis after the `new`.
```
class C extends D;
function new;
super.new;
endfunction
endclass
```
Add support for this by making the parenthesis optional in the parser.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
parent
e3bc99dbf3
commit
da5b9a4e5f
10
parse.y
10
parse.y
|
|
@ -891,14 +891,14 @@ class_item /* IEEE1800-2005: A.1.8 */
|
||||||
{ assert(current_function==0);
|
{ assert(current_function==0);
|
||||||
current_function = pform_push_constructor_scope(@3);
|
current_function = pform_push_constructor_scope(@3);
|
||||||
}
|
}
|
||||||
'(' tf_port_list_opt ')' ';'
|
tf_port_list_parens_opt ';'
|
||||||
block_item_decls_opt
|
block_item_decls_opt
|
||||||
statement_or_null_list_opt
|
statement_or_null_list_opt
|
||||||
K_endfunction endnew_opt
|
K_endfunction endnew_opt
|
||||||
{ current_function->set_ports($6);
|
{ current_function->set_ports($5);
|
||||||
pform_set_constructor_return(current_function);
|
pform_set_constructor_return(current_function);
|
||||||
pform_set_this_class(@3, current_function);
|
pform_set_this_class(@3, current_function);
|
||||||
current_function_set_statement(@3, $10);
|
current_function_set_statement(@3, $8);
|
||||||
pform_pop_scope();
|
pform_pop_scope();
|
||||||
current_function = 0;
|
current_function = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -6656,8 +6656,8 @@ statement_item /* This is roughly statement_item in the LRM */
|
||||||
beginning of a constructor, but let the elaborator figure that
|
beginning of a constructor, but let the elaborator figure that
|
||||||
out. */
|
out. */
|
||||||
|
|
||||||
| implicit_class_handle '.' K_new '(' expression_list_with_nuls ')' ';'
|
| implicit_class_handle '.' K_new argument_list_parens_opt ';'
|
||||||
{ PChainConstructor*tmp = new PChainConstructor(*$5);
|
{ PChainConstructor*tmp = new PChainConstructor(*$4);
|
||||||
FILE_NAME(tmp, @3);
|
FILE_NAME(tmp, @3);
|
||||||
if (peek_head_name(*$1) == THIS_TOKEN) {
|
if (peek_head_name(*$1) == THIS_TOKEN) {
|
||||||
yyerror(@1, "error: this.new is invalid syntax. Did you mean super.new?");
|
yyerror(@1, "error: this.new is invalid syntax. Did you mean super.new?");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue