Skip to content

Commit 7b4ff8e

Browse files
zhabinskiDmitri Zhabinski
andauthored
evaluator: Fix conditional union size (#153)
* tests: Added test case for conditional union * pattern/fix: Fix conditional union size --------- Co-authored-by: Dmitri Zhabinski <zhabinski@protonmail.com>
1 parent ab32cfa commit 7b4ff8e

2 files changed

Lines changed: 7 additions & 4 deletions

File tree

lib/source/pl/core/ast/ast_node_union.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,19 @@ namespace pl::core::ast {
1818
evaluator->alignToByte();
1919
auto pattern = std::make_shared<ptrn::PatternUnion>(evaluator, evaluator->getReadOffset(), 0, getLocation().line);
2020

21-
size_t size = 0;
2221
std::vector<std::shared_ptr<ptrn::Pattern>> memberPatterns;
2322
u64 startOffset = evaluator->getReadOffset();
2423

2524
pattern->setSection(evaluator->getSectionId());
2625

2726
evaluator->pushScope(pattern, memberPatterns);
2827
ON_SCOPE_EXIT {
28+
size_t size = 0;
29+
for (auto &memberPattern : memberPatterns) {
30+
size = std::max(memberPattern->getSize(), size);
31+
}
32+
pattern->setSize(size);
33+
2934
evaluator->setReadOffset(startOffset + size);
3035
if (evaluator->isReadOrderReversed())
3136
pattern->setAbsoluteOffset(evaluator->getReadOffset());
@@ -54,11 +59,9 @@ namespace pl::core::ast {
5459
}
5560
}
5661

57-
size = std::max(memberPattern->getSize(), size);
5862
memberPattern->setSection(evaluator->getSectionId());
5963
memberPatterns.push_back(std::move(memberPattern));
6064
}
61-
pattern->setSize(size);
6265

6366
if (evaluator->getCurrentControlFlowStatement() == ControlFlowStatement::Return)
6467
break;

tests/include/test_patterns/test_pattern_unions.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace pl::test {
3434
return R"(
3535
union TestUnion {
3636
s32 array[2];
37-
u128 variable;
37+
if ( true ) { u128 variable; }
3838
};
3939
4040
TestUnion testUnion @ 0x200;

0 commit comments

Comments
 (0)