Skip to content

Commit

Permalink
Merge pull request godotengine#81653 from dalexeev/gds-fix-pot-gen-cr…
Browse files Browse the repository at this point in the history
…ash-on-assignee-with-index

GDScript: Fix POT generator crash on assignee with index
  • Loading branch information
akien-mga committed Sep 14, 2023
2 parents 1328367 + d991cc4 commit a79955c
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions modules/gdscript/editor/gdscript_translation_parser_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,18 +225,23 @@ 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) {
// FileDialog.filters accepts assignment in the form of PackedStringArray. For example,
// 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.
Expand Down

0 comments on commit a79955c

Please sign in to comment.