diff options
author | Dmitrii Maganov <vonagam@gmail.com> | 2022-12-27 05:06:11 +0200 |
---|---|---|
committer | Dmitrii Maganov <vonagam@gmail.com> | 2022-12-28 23:04:40 +0200 |
commit | b6aa4840d827f2679d5f21591cc41222a96385bf (patch) | |
tree | 7fb388a49fbc1a373ec3c733e919668a20732c78 /modules/gdscript/gdscript_analyzer.cpp | |
parent | 7e1bd3f95a10acf60e07a8a6518cc80bfee6fbbf (diff) | |
download | redot-engine-b6aa4840d827f2679d5f21591cc41222a96385bf.tar.gz |
Fix usage of Enum as constant
Diffstat (limited to 'modules/gdscript/gdscript_analyzer.cpp')
-rw-r--r-- | modules/gdscript/gdscript_analyzer.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index fc2e6e94f3..f40096f2b9 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -937,6 +937,7 @@ void GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode *p_class, const GDScriptParser::EnumNode *prev_enum = current_enum; current_enum = member.m_enum; + Dictionary dictionary; for (int j = 0; j < member.m_enum->values.size(); j++) { GDScriptParser::EnumNode::Value &element = member.m_enum->values.write[j]; @@ -960,11 +961,13 @@ void GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode *p_class, } enum_type.enum_values[element.identifier->name] = element.value; + dictionary[String(element.identifier->name)] = element.value; } current_enum = prev_enum; member.m_enum->set_datatype(enum_type); + member.m_enum->dictionary = dictionary; // Apply annotations. for (GDScriptParser::AnnotationNode *&E : member.m_enum->annotations) { @@ -3140,10 +3143,9 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_CONSTANT; break; case GDScriptParser::ClassNode::Member::ENUM: - if (p_base != nullptr && p_base->is_constant) { - p_identifier->is_constant = true; - p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_CONSTANT; - } + p_identifier->is_constant = true; + p_identifier->reduced_value = member.m_enum->dictionary; + p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_CONSTANT; break; case GDScriptParser::ClassNode::Member::VARIABLE: p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_VARIABLE; @@ -3197,7 +3199,8 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod return; case GDScriptParser::ClassNode::Member::ENUM: p_identifier->set_datatype(member.get_datatype()); - p_identifier->is_constant = false; + p_identifier->is_constant = true; + p_identifier->reduced_value = member.m_enum->dictionary; return; case GDScriptParser::ClassNode::Member::CLASS: p_identifier->set_datatype(member.get_datatype()); |