Skip to content

Commit 1d7acb7

Browse files
committed
evaluator: Fixed pattern-local variables
1 parent acbc840 commit 1d7acb7

File tree

6 files changed

+15
-6
lines changed

6 files changed

+15
-6
lines changed

lib/include/pl/core/evaluator.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ namespace pl::core {
160160
void popSectionId();
161161
[[nodiscard]] u64 getSectionId() const;
162162
[[nodiscard]] u64 getUserSectionId() const;
163+
[[nodiscard]] bool isInUserSection() const;
163164

164165
void setInVariables(const std::map<std::string, Token::Literal> &inVariables) {
165166
this->m_inVariables = inVariables;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ namespace pl::core::ast {
101101
evaluator->setBitwiseReadOffset(startOffset);
102102
}
103103

104-
if (evaluator->getSectionId() != ptrn::Pattern::MainSectionId && !evaluator->isGlobalScope()) {
104+
if (evaluator->isInUserSection() && !evaluator->isGlobalScope()) {
105105
evaluator->addPattern(std::move(pattern));
106106
resultPatterns.pop_back();
107107
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ namespace pl::core::ast {
113113
this->execute(evaluator);
114114
resultPatterns.clear();
115115
} else {
116-
if (evaluator->getSectionId() != ptrn::Pattern::MainSectionId && !evaluator->isGlobalScope()) {
116+
if (evaluator->isInUserSection() && !evaluator->isGlobalScope()) {
117117
evaluator->addPattern(std::move(pattern));
118118
resultPatterns.clear();
119119
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ namespace pl::core::ast {
2626
if (this->m_providerOperation) {
2727
switch (this->getOperator()) {
2828
case Token::Operator::AddressOf:
29-
if (evaluator->getSectionId() != ptrn::Pattern::MainSectionId)
30-
result = u128(0x00);
31-
else
29+
if (evaluator->getSectionId() == ptrn::Pattern::MainSectionId)
3230
result = u128(evaluator->getDataBaseAddress());
31+
else
32+
result = u128(0x00);
3333
break;
3434
case Token::Operator::SizeOf:
3535
result = u128(evaluator->getRuntime().getSectionSize(evaluator->getSectionId()));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ namespace pl::core::ast {
8282
evaluator->setBitwiseReadOffset(startOffset);
8383
}
8484

85-
if (evaluator->getSectionId() != ptrn::Pattern::MainSectionId && !evaluator->isGlobalScope()) {
85+
if (evaluator->isInUserSection() && !evaluator->isGlobalScope()) {
8686
evaluator->addPattern(std::move(pattern));
8787
} else {
8888
resultPatterns = hlp::moveToVector<std::shared_ptr<ptrn::Pattern>>(std::move(pattern));

lib/source/pl/core/evaluator.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -944,6 +944,14 @@ namespace pl::core {
944944
return sectionIdStack.back();
945945
}
946946

947+
bool Evaluator::isInUserSection() const {
948+
auto sectionId = this->getSectionId();
949+
950+
if (sectionId == ptrn::Pattern::MainSectionId || sectionId == ptrn::Pattern::HeapSectionId || sectionId == ptrn::Pattern::PatternLocalSectionId || sectionId == ptrn::Pattern::InstantiationSectionId)
951+
return false;
952+
return true;
953+
}
954+
947955
u64 Evaluator::getUserSectionId() const {
948956
const auto &sectionIdStack = this->getRuntime().m_sectionData->sectionIdStack;
949957
if (sectionIdStack.empty())

0 commit comments

Comments
 (0)