Prevent unused_argument warning when passing arg to parent constructor

This requires creating the FunctionNode object a bit sooner, and setting
it as the current_function while parsing the parent constructor call
arguments.

Note that the return type has not yet been parsed at this point, but
that doesn't seem to be a problem.

Fixes #22139
This commit is contained in:
Thomas ten Cate 2018-11-16 10:46:05 +01:00
parent 26d33d1c6e
commit 4a530433d4

View file

@ -3752,6 +3752,19 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
BlockNode *block = alloc_node<BlockNode>();
block->parent_class = p_class;
FunctionNode *function = alloc_node<FunctionNode>();
function->name = name;
function->arguments = arguments;
function->argument_types = argument_types;
function->default_values = default_values;
function->_static = _static;
function->line = fnline;
#ifdef DEBUG_ENABLED
function->arguments_usage = arguments_usage;
#endif // DEBUG_ENABLED
function->rpc_mode = rpc_mode;
rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED;
if (name == "_init") {
if (_static) {
@ -3782,7 +3795,9 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
parenthesis++;
while (true) {
current_function = function;
Node *arg = _parse_and_reduce_expression(p_class, _static);
current_function = NULL;
cparent->arguments.push_back(arg);
if (tokenizer->get_token() == GDScriptTokenizer::TK_COMMA) {
@ -3826,19 +3841,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
return;
}
FunctionNode *function = alloc_node<FunctionNode>();
function->name = name;
function->return_type = return_type;
function->arguments = arguments;
function->argument_types = argument_types;
function->default_values = default_values;
function->_static = _static;
function->line = fnline;
#ifdef DEBUG_ENABLED
function->arguments_usage = arguments_usage;
#endif // DEBUG_ENABLED
function->rpc_mode = rpc_mode;
rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED;
if (_static)
p_class->static_functions.push_back(function);