mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
Pass std::string references to RPN functions
This commit is contained in:
@@ -43,10 +43,10 @@ void rpn_ISCONST(Expression &expr, Expression const &src);
|
|||||||
void rpn_NEG(Expression &expr, Expression &&src);
|
void rpn_NEG(Expression &expr, Expression &&src);
|
||||||
void rpn_NOT(Expression &expr, Expression &&src);
|
void rpn_NOT(Expression &expr, Expression &&src);
|
||||||
void rpn_BankSymbol(Expression &expr, std::string const &symName);
|
void rpn_BankSymbol(Expression &expr, std::string const &symName);
|
||||||
void rpn_BankSection(Expression &expr, char const *sectionName);
|
void rpn_BankSection(Expression &expr, std::string const §ionName);
|
||||||
void rpn_BankSelf(Expression &expr);
|
void rpn_BankSelf(Expression &expr);
|
||||||
void rpn_SizeOfSection(Expression &expr, char const *sectionName);
|
void rpn_SizeOfSection(Expression &expr, std::string const §ionName);
|
||||||
void rpn_StartOfSection(Expression &expr, char const *sectionName);
|
void rpn_StartOfSection(Expression &expr, std::string const §ionName);
|
||||||
void rpn_SizeOfSectionType(Expression &expr, SectionType type);
|
void rpn_SizeOfSectionType(Expression &expr, SectionType type);
|
||||||
void rpn_StartOfSectionType(Expression &expr, SectionType type);
|
void rpn_StartOfSectionType(Expression &expr, SectionType type);
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ extern std::deque<Section> sectionList;
|
|||||||
extern std::unordered_map<std::string, size_t> sectionMap; // Indexes into `sectionList`
|
extern std::unordered_map<std::string, size_t> sectionMap; // Indexes into `sectionList`
|
||||||
extern Section *currentSection;
|
extern Section *currentSection;
|
||||||
|
|
||||||
Section *sect_FindSectionByName(char const *name);
|
Section *sect_FindSectionByName(std::string const &name);
|
||||||
void sect_NewSection(
|
void sect_NewSection(
|
||||||
std::string const &name,
|
std::string const &name,
|
||||||
SectionType type,
|
SectionType type,
|
||||||
|
|||||||
@@ -1415,13 +1415,13 @@ relocexpr_no_str:
|
|||||||
rpn_BankSymbol($$, $3);
|
rpn_BankSymbol($$, $3);
|
||||||
}
|
}
|
||||||
| OP_BANK LPAREN string RPAREN {
|
| OP_BANK LPAREN string RPAREN {
|
||||||
rpn_BankSection($$, $3.c_str());
|
rpn_BankSection($$, $3);
|
||||||
}
|
}
|
||||||
| OP_SIZEOF LPAREN string RPAREN {
|
| OP_SIZEOF LPAREN string RPAREN {
|
||||||
rpn_SizeOfSection($$, $3.c_str());
|
rpn_SizeOfSection($$, $3);
|
||||||
}
|
}
|
||||||
| OP_STARTOF LPAREN string RPAREN {
|
| OP_STARTOF LPAREN string RPAREN {
|
||||||
rpn_StartOfSection($$, $3.c_str());
|
rpn_StartOfSection($$, $3);
|
||||||
}
|
}
|
||||||
| OP_SIZEOF LPAREN sectiontype RPAREN {
|
| OP_SIZEOF LPAREN sectiontype RPAREN {
|
||||||
rpn_SizeOfSectionType($$, (SectionType)$3);
|
rpn_SizeOfSectionType($$, (SectionType)$3);
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ void rpn_BankSymbol(Expression &expr, std::string const &symName) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpn_BankSection(Expression &expr, char const *sectionName) {
|
void rpn_BankSection(Expression &expr, std::string const §ionName) {
|
||||||
initExpression(expr);
|
initExpression(expr);
|
||||||
|
|
||||||
Section *section = sect_FindSectionByName(sectionName);
|
Section *section = sect_FindSectionByName(sectionName);
|
||||||
@@ -136,16 +136,16 @@ void rpn_BankSection(Expression &expr, char const *sectionName) {
|
|||||||
} else {
|
} else {
|
||||||
makeUnknown(expr, "Section \"", sectionName, "\"'s bank is not known");
|
makeUnknown(expr, "Section \"", sectionName, "\"'s bank is not known");
|
||||||
|
|
||||||
size_t nameLen = strlen(sectionName) + 1; // Room for NUL!
|
size_t nameLen = sectionName.length() + 1; // Room for NUL!
|
||||||
uint8_t *ptr = reserveSpace(expr, nameLen + 1);
|
uint8_t *ptr = reserveSpace(expr, nameLen + 1);
|
||||||
|
|
||||||
expr.rpnPatchSize += nameLen + 1;
|
expr.rpnPatchSize += nameLen + 1;
|
||||||
*ptr++ = RPN_BANK_SECT;
|
*ptr++ = RPN_BANK_SECT;
|
||||||
memcpy(ptr, sectionName, nameLen);
|
memcpy(ptr, sectionName.data(), nameLen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpn_SizeOfSection(Expression &expr, char const *sectionName) {
|
void rpn_SizeOfSection(Expression &expr, std::string const §ionName) {
|
||||||
initExpression(expr);
|
initExpression(expr);
|
||||||
|
|
||||||
Section *section = sect_FindSectionByName(sectionName);
|
Section *section = sect_FindSectionByName(sectionName);
|
||||||
@@ -155,16 +155,16 @@ void rpn_SizeOfSection(Expression &expr, char const *sectionName) {
|
|||||||
} else {
|
} else {
|
||||||
makeUnknown(expr, "Section \"", sectionName, "\"'s size is not known");
|
makeUnknown(expr, "Section \"", sectionName, "\"'s size is not known");
|
||||||
|
|
||||||
size_t nameLen = strlen(sectionName) + 1; // Room for NUL!
|
size_t nameLen = sectionName.length() + 1; // Room for NUL!
|
||||||
uint8_t *ptr = reserveSpace(expr, nameLen + 1);
|
uint8_t *ptr = reserveSpace(expr, nameLen + 1);
|
||||||
|
|
||||||
expr.rpnPatchSize += nameLen + 1;
|
expr.rpnPatchSize += nameLen + 1;
|
||||||
*ptr++ = RPN_SIZEOF_SECT;
|
*ptr++ = RPN_SIZEOF_SECT;
|
||||||
memcpy(ptr, sectionName, nameLen);
|
memcpy(ptr, sectionName.data(), nameLen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpn_StartOfSection(Expression &expr, char const *sectionName) {
|
void rpn_StartOfSection(Expression &expr, std::string const §ionName) {
|
||||||
initExpression(expr);
|
initExpression(expr);
|
||||||
|
|
||||||
Section *section = sect_FindSectionByName(sectionName);
|
Section *section = sect_FindSectionByName(sectionName);
|
||||||
@@ -174,12 +174,12 @@ void rpn_StartOfSection(Expression &expr, char const *sectionName) {
|
|||||||
} else {
|
} else {
|
||||||
makeUnknown(expr, "Section \"", sectionName, "\"'s start is not known");
|
makeUnknown(expr, "Section \"", sectionName, "\"'s start is not known");
|
||||||
|
|
||||||
size_t nameLen = strlen(sectionName) + 1; // Room for NUL!
|
size_t nameLen = sectionName.length() + 1; // Room for NUL!
|
||||||
uint8_t *ptr = reserveSpace(expr, nameLen + 1);
|
uint8_t *ptr = reserveSpace(expr, nameLen + 1);
|
||||||
|
|
||||||
expr.rpnPatchSize += nameLen + 1;
|
expr.rpnPatchSize += nameLen + 1;
|
||||||
*ptr++ = RPN_STARTOF_SECT;
|
*ptr++ = RPN_STARTOF_SECT;
|
||||||
memcpy(ptr, sectionName, nameLen);
|
memcpy(ptr, sectionName.data(), nameLen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ attr_(warn_unused_result) static bool reserveSpace(uint32_t delta_size) {
|
|||||||
&& (!currentLoadSection || currentLoadSection->size != UINT32_MAX);
|
&& (!currentLoadSection || currentLoadSection->size != UINT32_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
Section *sect_FindSectionByName(char const *name) {
|
Section *sect_FindSectionByName(std::string const &name) {
|
||||||
auto search = sectionMap.find(name);
|
auto search = sectionMap.find(name);
|
||||||
return search != sectionMap.end() ? §ionList[search->second] : nullptr;
|
return search != sectionMap.end() ? §ionList[search->second] : nullptr;
|
||||||
}
|
}
|
||||||
@@ -401,7 +401,7 @@ static Section *getSection(
|
|||||||
|
|
||||||
// Check if another section exists with the same name; merge if yes, otherwise create one
|
// Check if another section exists with the same name; merge if yes, otherwise create one
|
||||||
|
|
||||||
Section *sect = sect_FindSectionByName(name.c_str());
|
Section *sect = sect_FindSectionByName(name);
|
||||||
|
|
||||||
if (sect) {
|
if (sect) {
|
||||||
mergeSections(*sect, type, org, bank, alignment, alignOffset, mod);
|
mergeSections(*sect, type, org, bank, alignment, alignOffset, mod);
|
||||||
|
|||||||
Reference in New Issue
Block a user