1
0
mirror of synced 2025-02-17 18:59:21 +01:00

Fixed rvalues not evaluating correctly in nested structs

This commit is contained in:
WerWolv 2021-01-04 16:13:03 +01:00
parent af42d2ff66
commit f5250d6bcf
2 changed files with 6 additions and 12 deletions

View File

@ -27,7 +27,7 @@ namespace hex::lang {
std::endian m_defaultDataEndian;
u64 m_currOffset = 0;
std::optional<std::endian> m_currEndian;
std::vector<PatternData*> *m_currMembers = nullptr;
std::vector<std::vector<PatternData*>*> m_currMembers;
std::pair<u32, std::string> m_error;

View File

@ -16,7 +16,7 @@ namespace hex::lang {
ASTNodeIntegerLiteral* Evaluator::evaluateRValue(ASTNodeRValue *node) {
const std::vector<PatternData*>* currMembers = this->m_currMembers;
const std::vector<PatternData*>* currMembers = this->m_currMembers.back();
PatternData *currPattern = nullptr;
for (const auto &identifier : node->getPath()) {
@ -152,11 +152,8 @@ namespace hex::lang {
PatternData* Evaluator::evaluateStruct(ASTNodeStruct *node) {
std::vector<PatternData*> memberPatterns;
ScopeExit currMemberReset([this] { this->m_currMembers = nullptr; });
if (this->m_currMembers == nullptr)
this->m_currMembers = &memberPatterns;
else
currMemberReset.release();
this->m_currMembers.push_back(&memberPatterns);
SCOPE_EXIT( this->m_currMembers.pop_back(); );
auto startOffset = this->m_currOffset;
for (auto &member : node->getMembers()) {
@ -178,11 +175,8 @@ namespace hex::lang {
PatternData* Evaluator::evaluateUnion(ASTNodeUnion *node) {
std::vector<PatternData*> memberPatterns;
ScopeExit currMemberReset([this] { this->m_currMembers = nullptr; });
if (this->m_currMembers == nullptr)
this->m_currMembers = &memberPatterns;
else
currMemberReset.release();
this->m_currMembers.push_back(&memberPatterns);
SCOPE_EXIT( this->m_currMembers.pop_back(); );
auto startOffset = this->m_currOffset;
for (auto &member : node->getMembers()) {