summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-09-14 23:41:21 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-09-14 23:41:21 +0200
commita79955c440b5ec65507994441f5f55a90af4fc96 (patch)
tree9af1b75f8caf5c0c480619c972bb9fd890fb446e
parent1328367abd5d5201537496181e5c70c88a91dd68 (diff)
parentd991cc49985cfa62f69f27b20989db1d10477f89 (diff)
downloadredot-engine-a79955c440b5ec65507994441f5f55a90af4fc96.tar.gz
Merge pull request #81653 from dalexeev/gds-fix-pot-gen-crash-on-assignee-with-index
GDScript: Fix POT generator crash on assignee with index
-rw-r--r--modules/gdscript/editor/gdscript_translation_parser_plugin.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/modules/gdscript/editor/gdscript_translation_parser_plugin.cpp b/modules/gdscript/editor/gdscript_translation_parser_plugin.cpp
index 064143f400..becc2876f9 100644
--- a/modules/gdscript/editor/gdscript_translation_parser_plugin.cpp
+++ b/modules/gdscript/editor/gdscript_translation_parser_plugin.cpp
@@ -225,10 +225,15 @@ void GDScriptEditorTranslationParserPlugin::_assess_assignment(const GDScriptPar
if (p_assignment->assignee->type == GDScriptParser::Node::IDENTIFIER) {
assignee_name = static_cast<const GDScriptParser::IdentifierNode *>(p_assignment->assignee)->name;
} else if (p_assignment->assignee->type == GDScriptParser::Node::SUBSCRIPT) {
- assignee_name = static_cast<const GDScriptParser::SubscriptNode *>(p_assignment->assignee)->attribute->name;
+ const GDScriptParser::SubscriptNode *subscript = static_cast<const GDScriptParser::SubscriptNode *>(p_assignment->assignee);
+ if (subscript->is_attribute && subscript->attribute) {
+ assignee_name = subscript->attribute->name;
+ } else if (subscript->index && _is_constant_string(subscript->index)) {
+ assignee_name = subscript->index->reduced_value;
+ }
}
- if (assignment_patterns.has(assignee_name) && _is_constant_string(p_assignment->assigned_value)) {
+ if (assignee_name != StringName() && assignment_patterns.has(assignee_name) && _is_constant_string(p_assignment->assigned_value)) {
// If the assignment is towards one of the extract patterns (text, tooltip_text etc.), and the value is a constant string, we collect the string.
ids->push_back(p_assignment->assigned_value->reduced_value);
} else if (assignee_name == fd_filters && p_assignment->assigned_value->type == GDScriptParser::Node::CALL) {
@@ -236,7 +241,7 @@ void GDScriptEditorTranslationParserPlugin::_assess_assignment(const GDScriptPar
// get_node("FileDialog").filters = PackedStringArray(["*.png ; PNG Images","*.gd ; GDScript Files"]).
const GDScriptParser::CallNode *call_node = static_cast<const GDScriptParser::CallNode *>(p_assignment->assigned_value);
- if (call_node->arguments[0]->type == GDScriptParser::Node::ARRAY) {
+ if (!call_node->arguments.is_empty() && call_node->arguments[0]->type == GDScriptParser::Node::ARRAY) {
const GDScriptParser::ArrayNode *array_node = static_cast<const GDScriptParser::ArrayNode *>(call_node->arguments[0]);
// Extract the name in "extension ; name" of PackedStringArray.