GDScript: Allow subscript on self and object types
This commit is contained in:
parent
18c912c332
commit
1f55bd190c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
|
@ -0,0 +1,3 @@
|
||||||
|
GDTEST_OK
|
||||||
|
Node
|
||||||
|
Changed
|
Loading…
Reference in New Issue