Skip to content

Commit 25a7cb9

Browse files
committed
evaluator: Fixed accessing of section variables in imported types
1 parent f97999d commit 25a7cb9

File tree

5 files changed

+21
-21
lines changed

5 files changed

+21
-21
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,8 @@ namespace pl::core::ast {
199199
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1))
200200
err::E0004.throwError("Array expanded past end of the data before a null-entry was found.", "Try using a while-sized array instead to limit the size of the array.", this->getLocation());
201201

202-
evaluator->readData(evaluator->getReadOffset(), buffer.data(), buffer.size(), templatePattern->getSection());
203-
evaluator->getReadOffsetAndIncrement(buffer.size());
202+
templatePattern->getEvaluator()->readData(evaluator->getReadOffset(), buffer.data(), buffer.size(), templatePattern->getSection());
203+
templatePattern->getEvaluator()->getReadOffsetAndIncrement(buffer.size());
204204

205205
entryCount++;
206206

@@ -213,7 +213,7 @@ namespace pl::core::ast {
213213
}
214214

215215
if (reachedEnd) break;
216-
evaluator->handleAbort();
216+
templatePattern->getEvaluator()->handleAbort();
217217
}
218218
}
219219

@@ -394,7 +394,7 @@ namespace pl::core::ast {
394394
err::E0004.throwError("Array expanded past end of the data before a null-entry was found.", "Try using a while-sized array instead to limit the size of the array.", this->getLocation());
395395

396396
const auto patternSize = pattern->getSize();
397-
evaluator->readData(evaluator->getReadOffset() - patternSize, buffer.data(), buffer.size(), pattern->getSection());
397+
pattern->getEvaluator()->readData(evaluator->getReadOffset() - patternSize, buffer.data(), buffer.size(), pattern->getSection());
398398

399399
addEntries(hlp::moveToVector(std::move(pattern)));
400400

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ namespace pl::core::ast {
142142
auto type = dynamic_cast<ASTNodeBuiltinType *>(evaluatedType.get())->getType();
143143

144144
value = std::visit(wolv::util::overloaded {
145-
[&evaluator, &type](const std::shared_ptr<ptrn::Pattern> &value) -> Token::Literal {
145+
[&type](const std::shared_ptr<ptrn::Pattern> &value) -> Token::Literal {
146146
if (Token::isInteger(type) && value->getSize() <= Token::getTypeSize(type)) {
147147
u128 result = 0;
148-
evaluator->readData(value->getOffset(), &result, value->getSize(), value->getSection());
148+
value->getEvaluator()->readData(value->getOffset(), &result, value->getSize(), value->getSection());
149149

150150
return result;
151151
} else {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ namespace pl::core::ast {
117117
[&, this](const std::shared_ptr<ptrn::Pattern> &left, const std::shared_ptr<ptrn::Pattern> &right) -> ASTNode * {
118118
std::vector<u8> leftBytes(left->getSize()), rightBytes(right->getSize());
119119

120-
evaluator->readData(left->getOffset(), leftBytes.data(), leftBytes.size(), left->getSection());
121-
evaluator->readData(right->getOffset(), rightBytes.data(), rightBytes.size(), right->getSection());
120+
left->getEvaluator()->readData(left->getOffset(), leftBytes.data(), leftBytes.size(), left->getSection());
121+
right->getEvaluator()->readData(right->getOffset(), rightBytes.data(), rightBytes.size(), right->getSection());
122122
switch (this->getOperator()) {
123123
case Token::Operator::BoolEqual:
124124
return new ASTNodeLiteral(leftBytes == rightBytes);

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ namespace pl::core::ast {
3535
}
3636
}
3737

38-
static void readVariable(Evaluator *evaluator, auto &value, ptrn::Pattern *variablePattern) {
38+
static void readVariable(auto &value, ptrn::Pattern *variablePattern) {
3939
constexpr bool isString = std::same_as<std::remove_cvref_t<decltype(value)>, std::string>;
4040

4141
if constexpr (isString) {
4242
value.resize(variablePattern->getSize());
43-
evaluator->readData(variablePattern->getOffset(), value.data(), value.size(), variablePattern->getSection());
43+
variablePattern->getEvaluator()->readData(variablePattern->getOffset(), value.data(), value.size(), variablePattern->getSection());
4444
} else {
45-
evaluator->readData(variablePattern->getOffset(), &value, variablePattern->getSize(), variablePattern->getSection());
45+
variablePattern->getEvaluator()->readData(variablePattern->getOffset(), &value, variablePattern->getSize(), variablePattern->getSection());
4646
}
4747

4848
if constexpr (!isString)
@@ -91,39 +91,39 @@ namespace pl::core::ast {
9191
Token::Literal literal;
9292
if (dynamic_cast<ptrn::PatternUnsigned *>(pattern.get()) != nullptr) {
9393
u128 value = 0;
94-
readVariable(evaluator, value, pattern.get());
94+
readVariable(value, pattern.get());
9595
literal = value;
9696
} else if (dynamic_cast<ptrn::PatternSigned *>(pattern.get()) != nullptr) {
9797
i128 value = 0;
98-
readVariable(evaluator, value, pattern.get());
98+
readVariable(value, pattern.get());
9999
value = hlp::signExtend(pattern->getSize() * 8, value);
100100
literal = value;
101101
} else if (dynamic_cast<ptrn::PatternFloat *>(pattern.get()) != nullptr) {
102102
if (pattern->getSize() == sizeof(u16)) {
103103
u16 value = 0;
104-
readVariable(evaluator, value, pattern.get());
104+
readVariable(value, pattern.get());
105105
literal = double(hlp::float16ToFloat32(value));
106106
} else if (pattern->getSize() == sizeof(float)) {
107107
float value = 0;
108-
readVariable(evaluator, value, pattern.get());
108+
readVariable(value, pattern.get());
109109
literal = double(value);
110110
} else if (pattern->getSize() == sizeof(double)) {
111111
double value = 0;
112-
readVariable(evaluator, value, pattern.get());
112+
readVariable(value, pattern.get());
113113
literal = value;
114114
} else
115115
err::E0001.throwError("Invalid floating point type.");
116116
} else if (dynamic_cast<ptrn::PatternCharacter *>(pattern.get()) != nullptr) {
117117
char value = 0;
118-
readVariable(evaluator, value, pattern.get());
118+
readVariable(value, pattern.get());
119119
literal = value;
120120
} else if (dynamic_cast<ptrn::PatternBoolean *>(pattern.get()) != nullptr) {
121121
bool value = false;
122-
readVariable(evaluator, value, pattern.get());
122+
readVariable(value, pattern.get());
123123
literal = value;
124124
} else if (dynamic_cast<ptrn::PatternString *>(pattern.get()) != nullptr) {
125125
std::string value;
126-
readVariable(evaluator, value, pattern.get());
126+
readVariable(value, pattern.get());
127127
literal = value;
128128
} else if (auto bitfieldFieldPatternBoolean = dynamic_cast<ptrn::PatternBitfieldFieldBoolean *>(pattern.get()); bitfieldFieldPatternBoolean != nullptr) {
129129
literal = bool(bitfieldFieldPatternBoolean->readValue());

lib/source/pl/lib/std/mem.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,11 @@ namespace pl::lib::libstd::mem {
265265
if (auto iterable = dynamic_cast<ptrn::IIterable*>(pattern.get())) {
266266
iterable->forEachEntry(0, iterable->getEntryCount(), [&](u64, ptrn::Pattern *entry) {
267267
auto entrySize = entry->getSize();
268-
ctx->readData(entry->getOffset(), section.data() + toAddr, entrySize, entry->getSection());
268+
pattern->getEvaluator()->readData(entry->getOffset(), section.data() + toAddr, entrySize, entry->getSection());
269269
toAddr += entrySize;
270270
});
271271
} else {
272-
ctx->readData(pattern->getOffset(), section.data() + toAddr, pattern->getSize(), pattern->getSection());
272+
pattern->getEvaluator()->readData(pattern->getOffset(), section.data() + toAddr, pattern->getSize(), pattern->getSection());
273273
}
274274
break;
275275
}

0 commit comments

Comments
 (0)