mirror of
https://github.com/godotengine/godot.git
synced 2025-01-06 17:37:18 +08:00
Fix external enums not assignable as constants
- Add external enums test - Rename external inner class test - Clean up `GDScriptAnalyzer::reduce_identifier_from_base` class behavior
This commit is contained in:
parent
10bc1d8710
commit
7fc814f697
@ -3137,6 +3137,12 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
|
|||||||
p_identifier->reduced_value = member.enum_value.value;
|
p_identifier->reduced_value = member.enum_value.value;
|
||||||
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_CONSTANT;
|
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_CONSTANT;
|
||||||
break;
|
break;
|
||||||
|
case GDScriptParser::ClassNode::Member::ENUM:
|
||||||
|
if (p_base != nullptr && p_base->is_constant) {
|
||||||
|
p_identifier->is_constant = true;
|
||||||
|
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_CONSTANT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case GDScriptParser::ClassNode::Member::VARIABLE:
|
case GDScriptParser::ClassNode::Member::VARIABLE:
|
||||||
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_VARIABLE;
|
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_VARIABLE;
|
||||||
p_identifier->variable_source = member.variable;
|
p_identifier->variable_source = member.variable;
|
||||||
@ -3150,12 +3156,14 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
|
|||||||
break;
|
break;
|
||||||
case GDScriptParser::ClassNode::Member::CLASS:
|
case GDScriptParser::ClassNode::Member::CLASS:
|
||||||
if (p_base != nullptr && p_base->is_constant) {
|
if (p_base != nullptr && p_base->is_constant) {
|
||||||
|
p_identifier->is_constant = true;
|
||||||
|
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_CONSTANT;
|
||||||
|
|
||||||
Error err = OK;
|
Error err = OK;
|
||||||
GDScript *scr = GDScriptCache::get_full_script(base.script_path, err).ptr();
|
GDScript *scr = GDScriptCache::get_full_script(base.script_path, err).ptr();
|
||||||
ERR_FAIL_COND_MSG(err != OK, "Error while getting subscript full script.");
|
ERR_FAIL_COND_MSG(err != OK, "Error while getting subscript full script.");
|
||||||
scr = scr->find_class(p_identifier->get_datatype().class_type->fqcn);
|
scr = scr->find_class(p_identifier->get_datatype().class_type->fqcn);
|
||||||
p_identifier->reduced_value = scr;
|
p_identifier->reduced_value = scr;
|
||||||
p_identifier->is_constant = true;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
const External = preload("external_enum_as_constant_external.notest.gd")
|
||||||
|
const MyEnum = External.MyEnum
|
||||||
|
|
||||||
|
func test():
|
||||||
|
print(MyEnum.WAITING == 0)
|
||||||
|
print(MyEnum.GODOT == 1)
|
@ -0,0 +1,3 @@
|
|||||||
|
GDTEST_OK
|
||||||
|
true
|
||||||
|
true
|
@ -0,0 +1,4 @@
|
|||||||
|
enum MyEnum {
|
||||||
|
WAITING,
|
||||||
|
GODOT
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
const External = preload("inner_class_constant_assignment_external.notest.gd")
|
const External = preload("external_inner_class_as_constant_external.notest.gd")
|
||||||
const ExternalInnerClass = External.InnerClass
|
const ExternalInnerClass = External.InnerClass
|
||||||
|
|
||||||
func test():
|
func test():
|
Loading…
Reference in New Issue
Block a user