You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
GDScript: Fix resolution of dictionary keys
There was a mixup between String and StringName keys. Now they're clearly separated. This also means you have to consider which type you're using for the dictionary keys and how you are accessing them.
This commit is contained in:
@@ -2621,25 +2621,6 @@ void GDScriptAnalyzer::reduce_subscript(GDScriptParser::SubscriptNode *p_subscri
|
||||
|
||||
GDScriptParser::DataType result_type;
|
||||
|
||||
// Reduce index first. If it's a constant StringName, use attribute instead.
|
||||
if (!p_subscript->is_attribute) {
|
||||
if (p_subscript->index == nullptr) {
|
||||
return;
|
||||
}
|
||||
reduce_expression(p_subscript->index);
|
||||
|
||||
if (p_subscript->index->is_constant && p_subscript->index->reduced_value.get_type() == Variant::STRING_NAME) {
|
||||
GDScriptParser::IdentifierNode *attribute = parser->alloc_node<GDScriptParser::IdentifierNode>();
|
||||
// Copy location for better error message.
|
||||
attribute->start_line = p_subscript->index->start_line;
|
||||
attribute->end_line = p_subscript->index->end_line;
|
||||
attribute->leftmost_column = p_subscript->index->leftmost_column;
|
||||
attribute->rightmost_column = p_subscript->index->rightmost_column;
|
||||
p_subscript->is_attribute = true;
|
||||
p_subscript->attribute = attribute;
|
||||
}
|
||||
}
|
||||
|
||||
if (p_subscript->is_attribute) {
|
||||
if (p_subscript->attribute == nullptr) {
|
||||
return;
|
||||
@@ -2682,7 +2663,10 @@ void GDScriptAnalyzer::reduce_subscript(GDScriptParser::SubscriptNode *p_subscri
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Index was already reduced before.
|
||||
if (p_subscript->index == nullptr) {
|
||||
return;
|
||||
}
|
||||
reduce_expression(p_subscript->index);
|
||||
|
||||
if (p_subscript->base->is_constant && p_subscript->index->is_constant) {
|
||||
// Just try to get it.
|
||||
|
||||
Reference in New Issue
Block a user