Browse Source

Fix using signals in lambda functions

Yuri Rubinsky 2 years ago
parent
commit
f6c8c140f0
2 changed files with 5 additions and 0 deletions
  1. 4 0
      modules/gdscript/gdscript_analyzer.cpp
  2. 1 0
      modules/gdscript/gdscript_parser.h

+ 4 - 0
modules/gdscript/gdscript_analyzer.cpp

@@ -2865,6 +2865,9 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
 					p_identifier->variable_source = member.variable;
 					p_identifier->variable_source = member.variable;
 					member.variable->usages += 1;
 					member.variable->usages += 1;
 					break;
 					break;
+				case GDScriptParser::ClassNode::Member::SIGNAL:
+					p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_SIGNAL;
+					break;
 				case GDScriptParser::ClassNode::Member::FUNCTION:
 				case GDScriptParser::ClassNode::Member::FUNCTION:
 					resolve_function_signature(member.function);
 					resolve_function_signature(member.function);
 					p_identifier->set_datatype(make_callable_type(member.function->info));
 					p_identifier->set_datatype(make_callable_type(member.function->info));
@@ -3009,6 +3012,7 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident
 			p_identifier->reduced_value = p_identifier->constant_source->initializer->reduced_value;
 			p_identifier->reduced_value = p_identifier->constant_source->initializer->reduced_value;
 			found_source = true;
 			found_source = true;
 			break;
 			break;
+		case GDScriptParser::IdentifierNode::MEMBER_SIGNAL:
 		case GDScriptParser::IdentifierNode::INHERITED_VARIABLE:
 		case GDScriptParser::IdentifierNode::INHERITED_VARIABLE:
 			mark_lambda_use_self();
 			mark_lambda_use_self();
 			break;
 			break;

+ 1 - 0
modules/gdscript/gdscript_parser.h

@@ -786,6 +786,7 @@ public:
 			LOCAL_VARIABLE,
 			LOCAL_VARIABLE,
 			LOCAL_ITERATOR, // `for` loop iterator.
 			LOCAL_ITERATOR, // `for` loop iterator.
 			LOCAL_BIND, // Pattern bind.
 			LOCAL_BIND, // Pattern bind.
+			MEMBER_SIGNAL,
 			MEMBER_VARIABLE,
 			MEMBER_VARIABLE,
 			MEMBER_CONSTANT,
 			MEMBER_CONSTANT,
 			INHERITED_VARIABLE,
 			INHERITED_VARIABLE,