Skip to content

Commit 56acdc3

Browse files
authored
Merge branch 'WerWolv:master' into new_lexer
2 parents 1105bd1 + c40b98c commit 56acdc3

3 files changed

Lines changed: 26 additions & 18 deletions

File tree

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

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ namespace pl::core::ast {
184184
} else if (auto whileStatement = dynamic_cast<ASTNodeWhileStatement *>(sizeNode.get())) {
185185
while (whileStatement->evaluateCondition(evaluator)) {
186186
if (templatePattern->getSection() == ptrn::Pattern::MainSectionId)
187-
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1))
187+
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize()))
188188
err::E0004.throwError("Array expanded past end of the data before termination condition was met.", { }, this->getLocation());
189189

190190
evaluator->handleAbort();
@@ -199,7 +199,7 @@ namespace pl::core::ast {
199199
std::vector<u8> buffer(templatePattern->getSize());
200200
while (true) {
201201
if (templatePattern->getSection() == ptrn::Pattern::MainSectionId)
202-
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1))
202+
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize()))
203203
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());
204204

205205
evaluator->readData(evaluator->getReadOffset(), buffer.data(), buffer.size(), templatePattern->getSection());
@@ -246,7 +246,7 @@ namespace pl::core::ast {
246246
evaluator->setReadOffset(startOffset + outputPattern->getSize());
247247

248248
if (outputPattern->getSection() == ptrn::Pattern::MainSectionId)
249-
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1))
249+
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize()))
250250
err::E0004.throwError("Array expanded past end of the data.", { }, this->getLocation());
251251
}
252252

@@ -327,18 +327,20 @@ namespace pl::core::ast {
327327
size_t patternCount = patterns.size();
328328

329329
if (arrayPattern->getSection() == ptrn::Pattern::MainSectionId)
330-
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1))
330+
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize()))
331331
err::E0004.throwError("Array expanded past end of the data.", fmt::format("Entry {} exceeded data by {} bytes.", i, evaluator->getReadOffset() - evaluator->getDataSize()), this->getLocation());
332332

333333
if (!patterns.empty())
334334
addEntries(std::move(patterns));
335335

336336
auto ctrlFlow = evaluator->getCurrentControlFlowStatement();
337-
evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None);
338-
if (ctrlFlow == ControlFlowStatement::Break || ctrlFlow == ControlFlowStatement::Return)
337+
if ( ctrlFlow == ControlFlowStatement::Return) {
339338
break;
340-
else if (ctrlFlow == ControlFlowStatement::Continue) {
341-
339+
} else if (ctrlFlow == ControlFlowStatement::Break) {
340+
evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None);
341+
break;
342+
} else if (ctrlFlow == ControlFlowStatement::Continue) {
343+
evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None);
342344
discardEntries(patternCount);
343345
continue;
344346
}
@@ -358,18 +360,21 @@ namespace pl::core::ast {
358360
size_t patternCount = patterns.size();
359361

360362
if (arrayPattern->getSection() == ptrn::Pattern::MainSectionId)
361-
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1))
363+
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize()))
362364
err::E0004.throwError("Array expanded past end of the data before termination condition was met.", { }, this->getLocation());
363365

364366
if (!patterns.empty())
365367
addEntries(std::move(patterns));
366368

367369

368370
auto ctrlFlow = evaluator->getCurrentControlFlowStatement();
369-
evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None);
370-
if (ctrlFlow == ControlFlowStatement::Break)
371+
if ( ctrlFlow == ControlFlowStatement::Return) {
372+
break;
373+
} else if (ctrlFlow == ControlFlowStatement::Break) {
374+
evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None);
371375
break;
372-
else if (ctrlFlow == ControlFlowStatement::Continue) {
376+
} else if (ctrlFlow == ControlFlowStatement::Continue) {
377+
evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None);
373378
discardEntries(patternCount);
374379
continue;
375380
}
@@ -393,7 +398,7 @@ namespace pl::core::ast {
393398
std::vector<u8> buffer(pattern->getSize());
394399

395400
if (arrayPattern->getSection() == ptrn::Pattern::MainSectionId)
396-
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1))
401+
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize()))
397402
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());
398403

399404
const auto patternSize = pattern->getSize();
@@ -417,10 +422,13 @@ namespace pl::core::ast {
417422
}
418423

419424
auto ctrlFlow = evaluator->getCurrentControlFlowStatement();
420-
evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None);
421-
if (ctrlFlow == ControlFlowStatement::Break)
425+
if ( ctrlFlow == ControlFlowStatement::Return) {
426+
break;
427+
} else if (ctrlFlow == ControlFlowStatement::Break) {
428+
evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None);
422429
break;
423-
else if (ctrlFlow == ControlFlowStatement::Continue) {
430+
} else if (ctrlFlow == ControlFlowStatement::Continue) {
431+
evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None);
424432
discardEntries(1);
425433
continue;
426434
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ namespace pl::core::ast {
150150
this->m_type->createPatterns(evaluator, patterns);
151151

152152
if (arrayPattern->getSection() == ptrn::Pattern::MainSectionId)
153-
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1))
153+
if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize()))
154154
err::E0004.throwError("Bitfield array expanded past end of the data.", fmt::format("Entry {} exceeded data by {} bytes.", dataIndex, evaluator->getReadOffset() - evaluator->getDataSize()), this->getLocation());
155155

156156
auto ctrlFlow = evaluator->getCurrentControlFlowStatement();

lib/source/pl/core/evaluator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,7 @@ namespace pl::core {
710710
auto &storage = getStorage();
711711
if (value->getSection() != ptrn::Pattern::InstantiationSectionId) {
712712
if (heapSection || patternLocalSection) {
713-
storage.resize((value->getOffset() & 0xFFFF'FFFF) + value->getSize());
713+
storage.resize((pattern->getOffset() & 0xFFFF'FFFF) + value->getSize());
714714
this->readData(value->getOffset(), storage.data(), value->getSize(), value->getSection());
715715
} else if (storage.size() < pattern->getOffset() + pattern->getSize()) {
716716
storage.resize(pattern->getOffset() + pattern->getSize());

0 commit comments

Comments
 (0)