GDScript: Allow subscript on self and object types

This commit is contained in:
George Marques 2021-10-06 12:01:34 -03:00
parent 18c912c332
commit 1f55bd190c
No known key found for this signature in database
GPG Key ID: 046BD46A3201E43D
3 changed files with 16 additions and 1 deletions

View File

@ -244,6 +244,7 @@ Error GDScriptAnalyzer::resolve_inheritance(GDScriptParser::ClassNode *p_class,
class_type.kind = GDScriptParser::DataType::CLASS; class_type.kind = GDScriptParser::DataType::CLASS;
class_type.class_type = p_class; class_type.class_type = p_class;
class_type.script_path = parser->script_path; class_type.script_path = parser->script_path;
class_type.builtin_type = Variant::OBJECT;
p_class->set_datatype(class_type); p_class->set_datatype(class_type);
if (!p_class->extends_used) { if (!p_class->extends_used) {
@ -3064,6 +3065,9 @@ void GDScriptAnalyzer::reduce_subscript(GDScriptParser::SubscriptNode *p_subscri
result_type.kind = GDScriptParser::DataType::BUILTIN; result_type.kind = GDScriptParser::DataType::BUILTIN;
result_type.type_source = base_type.is_hard_type() ? GDScriptParser::DataType::ANNOTATED_INFERRED : GDScriptParser::DataType::INFERRED; result_type.type_source = base_type.is_hard_type() ? GDScriptParser::DataType::ANNOTATED_INFERRED : GDScriptParser::DataType::INFERRED;
if (base_type.kind != GDScriptParser::DataType::BUILTIN) {
base_type.builtin_type = Variant::OBJECT;
}
switch (base_type.builtin_type) { switch (base_type.builtin_type) {
// Can't index at all. // Can't index at all.
case Variant::RID: case Variant::RID:
@ -3124,6 +3128,7 @@ void GDScriptAnalyzer::reduce_subscript(GDScriptParser::SubscriptNode *p_subscri
case Variant::PLANE: case Variant::PLANE:
case Variant::COLOR: case Variant::COLOR:
case Variant::DICTIONARY: case Variant::DICTIONARY:
case Variant::OBJECT:
result_type.kind = GDScriptParser::DataType::VARIANT; result_type.kind = GDScriptParser::DataType::VARIANT;
result_type.type_source = GDScriptParser::DataType::UNDETECTED; result_type.type_source = GDScriptParser::DataType::UNDETECTED;
break; break;
@ -3138,7 +3143,6 @@ void GDScriptAnalyzer::reduce_subscript(GDScriptParser::SubscriptNode *p_subscri
} }
break; break;
// Here for completeness. // Here for completeness.
case Variant::OBJECT:
case Variant::VARIANT_MAX: case Variant::VARIANT_MAX:
break; break;
} }

View File

@ -0,0 +1,8 @@
# https://github.com/godotengine/godot/issues/43221
extends Node
func test():
name = "Node"
print(self["name"])
self["name"] = "Changed"
print(name)

View File

@ -0,0 +1,3 @@
GDTEST_OK
Node
Changed