@@ -4061,10 +4061,23 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident
40614061 mark_lambda_use_self ();
40624062 return ; // No need to capture.
40634063 }
4064- // If the identifier is local, check if it's any kind of capture by comparing their source function.
4065- // Only capture locals and enum values. Constants are still accessible from the lambda using the script reference. If not, this method is done.
4066- if (p_identifier->source == GDScriptParser::IdentifierNode::UNDEFINED_SOURCE || p_identifier->source == GDScriptParser::IdentifierNode::MEMBER_CONSTANT) {
4067- return ;
4064+
4065+ switch (p_identifier->source ) {
4066+ case GDScriptParser::IdentifierNode::FUNCTION_PARAMETER:
4067+ case GDScriptParser::IdentifierNode::LOCAL_VARIABLE:
4068+ case GDScriptParser::IdentifierNode::LOCAL_ITERATOR:
4069+ case GDScriptParser::IdentifierNode::LOCAL_BIND:
4070+ break ; // Need to capture.
4071+ case GDScriptParser::IdentifierNode::UNDEFINED_SOURCE: // A global.
4072+ case GDScriptParser::IdentifierNode::LOCAL_CONSTANT:
4073+ case GDScriptParser::IdentifierNode::MEMBER_VARIABLE:
4074+ case GDScriptParser::IdentifierNode::MEMBER_CONSTANT:
4075+ case GDScriptParser::IdentifierNode::MEMBER_FUNCTION:
4076+ case GDScriptParser::IdentifierNode::MEMBER_SIGNAL:
4077+ case GDScriptParser::IdentifierNode::MEMBER_CLASS:
4078+ case GDScriptParser::IdentifierNode::INHERITED_VARIABLE:
4079+ case GDScriptParser::IdentifierNode::STATIC_VARIABLE:
4080+ return ; // No need to capture.
40684081 }
40694082
40704083 GDScriptParser::FunctionNode *function_test = current_lambda->function ;
0 commit comments