Fix BANK(@) outside sections causing crashes

This commit is contained in:
ISSOtm
2020-04-07 15:45:30 +02:00
parent 562835308b
commit 9f82fa4cf7
5 changed files with 14 additions and 2 deletions

View File

@@ -143,7 +143,10 @@ void rpn_BankSelf(struct Expression *expr)
{ {
rpn_Init(expr); rpn_Init(expr);
if (pCurrentSection->nBank == -1) { if (!pCurrentSection) {
yyerror("PC has no bank outside a section");
expr->nVal = 1;
} else if (pCurrentSection->nBank == -1) {
makeUnknown(expr, "Current section's bank is not known"); makeUnknown(expr, "Current section's bank is not known");
expr->nRPNPatchSize++; expr->nRPNPatchSize++;
*reserveSpace(expr, 1) = RPN_BANK_SELF; *reserveSpace(expr, 1) = RPN_BANK_SELF;

View File

@@ -282,7 +282,12 @@ static int32_t computeRPNExpr(struct Patch const *patch,
break; break;
case RPN_BANK_SELF: case RPN_BANK_SELF:
value = patch->pcSection->bank; if (!patch->pcSection) {
error("%s: PC has no bank outside a section");
value = 1;
} else {
value = patch->pcSection->bank;
}
break; break;
case RPN_HRAM: case RPN_HRAM:

View File

@@ -0,0 +1 @@
assert BANK(@) == 1

View File

@@ -0,0 +1,3 @@
ERROR: assert-nosect-bank.asm(1):
PC has no bank outside a section
error: Assembly aborted (1 errors)!

View File