mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
Use a patch_AddAssertion function instead of extern assertions
This commit is contained in:
@@ -3,6 +3,23 @@
|
|||||||
#ifndef RGBDS_LINK_PATCH_HPP
|
#ifndef RGBDS_LINK_PATCH_HPP
|
||||||
#define RGBDS_LINK_PATCH_HPP
|
#define RGBDS_LINK_PATCH_HPP
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "link/section.hpp"
|
||||||
|
|
||||||
|
struct Symbol;
|
||||||
|
|
||||||
|
struct Assertion {
|
||||||
|
Patch patch; // Also used for its `.type`
|
||||||
|
std::string message;
|
||||||
|
// This would be redundant with `patch.pcSection->fileSymbols`, but `section` is sometimes
|
||||||
|
// `nullptr`!
|
||||||
|
std::vector<Symbol> *fileSymbols;
|
||||||
|
};
|
||||||
|
|
||||||
|
Assertion &patch_AddAssertion();
|
||||||
|
|
||||||
// Checks all assertions
|
// Checks all assertions
|
||||||
void patch_CheckAssertions();
|
void patch_CheckAssertions();
|
||||||
|
|
||||||
|
|||||||
@@ -56,15 +56,6 @@ struct Section {
|
|||||||
std::unique_ptr<Section> nextu; // The next "component" of this unionized sect
|
std::unique_ptr<Section> nextu; // The next "component" of this unionized sect
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Assertion {
|
|
||||||
Patch patch; // Also used for its `.type`
|
|
||||||
std::string message;
|
|
||||||
// This would be redundant with `.section->fileSymbols`, but `section` is sometimes `nullptr`!
|
|
||||||
std::vector<Symbol> *fileSymbols;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern std::deque<Assertion> assertions;
|
|
||||||
|
|
||||||
// Execute a callback for each section currently registered.
|
// Execute a callback for each section currently registered.
|
||||||
// This is to avoid exposing the data structure in which sections are stored.
|
// This is to avoid exposing the data structure in which sections are stored.
|
||||||
void sect_ForEach(void (*callback)(Section &));
|
void sect_ForEach(void (*callback)(Section &));
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include "link/assign.hpp"
|
#include "link/assign.hpp"
|
||||||
#include "link/main.hpp"
|
#include "link/main.hpp"
|
||||||
|
#include "link/patch.hpp"
|
||||||
#include "link/sdas_obj.hpp"
|
#include "link/sdas_obj.hpp"
|
||||||
#include "link/section.hpp"
|
#include "link/section.hpp"
|
||||||
#include "link/symbol.hpp"
|
#include "link/symbol.hpp"
|
||||||
@@ -544,7 +545,7 @@ void obj_ReadFile(char const *fileName, unsigned int fileID) {
|
|||||||
tryReadLong(nbAsserts, file, "%s: Cannot read number of assertions: %s", fileName);
|
tryReadLong(nbAsserts, file, "%s: Cannot read number of assertions: %s", fileName);
|
||||||
verbosePrint("Reading %" PRIu32 " assertions...\n", nbAsserts);
|
verbosePrint("Reading %" PRIu32 " assertions...\n", nbAsserts);
|
||||||
for (uint32_t i = 0; i < nbAsserts; i++) {
|
for (uint32_t i = 0; i < nbAsserts; i++) {
|
||||||
Assertion &assertion = assertions.emplace_front();
|
Assertion &assertion = patch_AddAssertion();
|
||||||
|
|
||||||
readAssertion(file, assertion, fileName, i, nodes[fileID]);
|
readAssertion(file, assertion, fileName, i, nodes[fileID]);
|
||||||
linkPatchToPCSect(assertion.patch, fileSections);
|
linkPatchToPCSect(assertion.patch, fileSections);
|
||||||
|
|||||||
@@ -459,6 +459,10 @@ static int32_t computeRPNExpr(Patch const &patch, std::vector<Symbol> const &fil
|
|||||||
return popRPN(patch);
|
return popRPN(patch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Assertion &patch_AddAssertion() {
|
||||||
|
return assertions.emplace_front();
|
||||||
|
}
|
||||||
|
|
||||||
void patch_CheckAssertions() {
|
void patch_CheckAssertions() {
|
||||||
verbosePrint("Checking assertions...\n");
|
verbosePrint("Checking assertions...\n");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user