mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-22 19:22:05 +00:00
Remove deprecated RGBASM features (#1215)
- Escaped commas "\," inside strings - `name: MACRO` syntax - `__FILE__` and `__LINE__` - `-H/--nop-after-halt` and `-l/--auto-ldh` on by default
This commit is contained in:
@@ -1722,12 +1722,6 @@ static size_t appendStringLiteral(size_t i)
|
||||
c = '\\';
|
||||
break;
|
||||
|
||||
case ',': // `\,` inside a macro arg string literal
|
||||
warning(WARNING_OBSOLETE,
|
||||
"`\\,` is deprecated inside strings\n");
|
||||
shiftChar();
|
||||
break;
|
||||
|
||||
default:
|
||||
error("Illegal character escape %s\n", printChar(c));
|
||||
shiftChar();
|
||||
|
||||
@@ -59,7 +59,7 @@ bool failedOnMissingInclude = false;
|
||||
bool generatePhonyDeps = false;
|
||||
char *targetFileName = NULL;
|
||||
|
||||
bool haltnop;
|
||||
bool haltNop;
|
||||
bool warnOnHaltNop;
|
||||
bool optimizeLoads;
|
||||
bool warnOnLdOpt;
|
||||
@@ -164,9 +164,9 @@ int main(int argc, char *argv[])
|
||||
opt_G("0123");
|
||||
opt_P(0);
|
||||
opt_Q(16);
|
||||
haltnop = true;
|
||||
haltNop = false;
|
||||
warnOnHaltNop = true;
|
||||
optimizeLoads = true;
|
||||
optimizeLoads = false;
|
||||
warnOnLdOpt = true;
|
||||
verbose = false;
|
||||
warnings = true;
|
||||
@@ -209,32 +209,39 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
if (!haltnop)
|
||||
if (warnOnHaltNop)
|
||||
warning(WARNING_OBSOLETE,
|
||||
"Automatic `nop` after `halt` is deprecated\n");
|
||||
else
|
||||
errx("`-H` and `-h` don't make sense together");
|
||||
haltNop = true;
|
||||
warnOnHaltNop = false;
|
||||
break;
|
||||
case 'h':
|
||||
if (!warnOnHaltNop)
|
||||
if (haltNop)
|
||||
errx("`-H` and `-h` don't make sense together");
|
||||
haltnop = false;
|
||||
break;
|
||||
|
||||
// `-i` was the only short option for `--include` until `-I` was
|
||||
// introduced to better match the `-I dir` option of gcc and clang.
|
||||
// `-i` is now undocumented but still supported for now.
|
||||
case 'I':
|
||||
case 'i':
|
||||
warning(WARNING_OBSOLETE, "`-i` is deprecated; use `-I`\n");
|
||||
// fallthrough
|
||||
case 'I':
|
||||
fstk_AddIncludePath(musl_optarg);
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
if (!warnOnLdOpt)
|
||||
if (optimizeLoads)
|
||||
errx("`-L` and `-l` don't make sense together");
|
||||
optimizeLoads = false;
|
||||
break;
|
||||
case 'l':
|
||||
if (!optimizeLoads)
|
||||
if (warnOnLdOpt)
|
||||
warning(WARNING_OBSOLETE,
|
||||
"Automatic `ld` to `ldh` optimization is deprecated\n");
|
||||
else
|
||||
errx("`-L` and `-l` don't make sense together");
|
||||
optimizeLoads = true;
|
||||
warnOnLdOpt = false;
|
||||
break;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ struct OptStackEntry {
|
||||
char gbgfx[4];
|
||||
uint8_t fixPrecision;
|
||||
uint8_t fillByte;
|
||||
bool haltnop;
|
||||
bool haltNop;
|
||||
bool warnOnHaltNop;
|
||||
bool optimizeLoads;
|
||||
bool warnOnLdOpt;
|
||||
@@ -72,7 +72,7 @@ void opt_H(bool warn)
|
||||
|
||||
void opt_h(bool halt)
|
||||
{
|
||||
haltnop = halt;
|
||||
haltNop = halt;
|
||||
}
|
||||
|
||||
void opt_L(bool optimize)
|
||||
@@ -265,7 +265,7 @@ void opt_Push(void)
|
||||
|
||||
entry->fillByte = fillByte; // Pulled from section.h
|
||||
|
||||
entry->haltnop = haltnop; // Pulled from main.h
|
||||
entry->haltNop = haltNop; // Pulled from main.h
|
||||
entry->warnOnHaltNop = warnOnHaltNop;
|
||||
|
||||
entry->optimizeLoads = optimizeLoads; // Pulled from main.h
|
||||
@@ -295,7 +295,7 @@ void opt_Pop(void)
|
||||
opt_P(entry->fillByte);
|
||||
opt_Q(entry->fixPrecision);
|
||||
opt_H(entry->warnOnHaltNop);
|
||||
opt_h(entry->haltnop);
|
||||
opt_h(entry->haltNop);
|
||||
opt_L(entry->optimizeLoads);
|
||||
opt_l(entry->warnOnLdOpt);
|
||||
opt_R(entry->maxRecursionDepth);
|
||||
|
||||
@@ -1165,14 +1165,6 @@ macrodef : T_POP_MACRO {
|
||||
sym_AddMacro($3, captureBody.lineNo, captureBody.body,
|
||||
captureBody.size);
|
||||
}
|
||||
| T_LABEL T_COLON T_POP_MACRO T_NEWLINE {
|
||||
warning(WARNING_OBSOLETE, "`%s: MACRO` is deprecated; use `MACRO %s`\n", $1, $1);
|
||||
$<captureTerminated>$ = lexer_CaptureMacroBody(&captureBody);
|
||||
} endofline {
|
||||
if ($<captureTerminated>5)
|
||||
sym_AddMacro($1, captureBody.lineNo, captureBody.body,
|
||||
captureBody.size);
|
||||
}
|
||||
;
|
||||
|
||||
rsset : T_POP_RSSET uconst { sym_AddVar("_RS", $2); }
|
||||
@@ -1905,10 +1897,11 @@ z80_ei : T_Z80_EI { sect_AbsByte(0xFB); }
|
||||
|
||||
z80_halt : T_Z80_HALT {
|
||||
sect_AbsByte(0x76);
|
||||
if (haltnop) {
|
||||
if (haltNop) {
|
||||
if (warnOnHaltNop) {
|
||||
warnOnHaltNop = false;
|
||||
warning(WARNING_OBSOLETE, "`nop` after `halt` will stop being the default; pass `-H` to opt into it\n");
|
||||
warning(WARNING_OBSOLETE,
|
||||
"Automatic `nop` after `halt` is deprecated\n");
|
||||
}
|
||||
sect_AbsByte(0x00);
|
||||
}
|
||||
@@ -2021,7 +2014,8 @@ z80_ld_mem : T_Z80_LD op_mem_ind T_COMMA T_MODE_SP {
|
||||
&& $2.val >= 0xFF00) {
|
||||
if (warnOnLdOpt) {
|
||||
warnOnLdOpt = false;
|
||||
warning(WARNING_OBSOLETE, "ld optimization will stop being the default; pass `-l` to opt into it\n");
|
||||
warning(WARNING_OBSOLETE,
|
||||
"Automatic `ld` to `ldh` optimization is deprecated\n");
|
||||
}
|
||||
sect_AbsByte(0xE0);
|
||||
sect_AbsByte($2.val & 0xFF);
|
||||
@@ -2073,7 +2067,8 @@ z80_ld_a : T_Z80_LD reg_r T_COMMA c_ind {
|
||||
&& $4.val >= 0xFF00) {
|
||||
if (warnOnLdOpt) {
|
||||
warnOnLdOpt = false;
|
||||
warning(WARNING_OBSOLETE, "ld optimization will stop being the default; pass `-l` to opt into it\n");
|
||||
warning(WARNING_OBSOLETE,
|
||||
"Automatic `ld` to `ldh` optimization is deprecated\n");
|
||||
}
|
||||
sect_AbsByte(0xF0);
|
||||
sect_AbsByte($4.val & 0xFF);
|
||||
|
||||
@@ -77,50 +77,6 @@ static int32_t Callback_NARG(void)
|
||||
return macro_NbArgs();
|
||||
}
|
||||
|
||||
static int32_t Callback__LINE__(void)
|
||||
{
|
||||
warning(WARNING_OBSOLETE, "`__LINE__` is deprecated\n");
|
||||
|
||||
return lexer_GetLineNo();
|
||||
}
|
||||
|
||||
static char const *Callback__FILE__(void)
|
||||
{
|
||||
warning(WARNING_OBSOLETE, "`__FILE__` is deprecated\n");
|
||||
|
||||
// There are only two call sites for this; one copies the contents directly, the other is
|
||||
// EQUS expansions, which cannot straddle file boundaries. So this should be fine.
|
||||
static char *buf = NULL;
|
||||
static size_t bufsize = 0;
|
||||
char const *fileName = fstk_GetFileName();
|
||||
size_t j = 1;
|
||||
|
||||
assert(fileName[0]);
|
||||
// The assertion above ensures the loop runs at least once
|
||||
for (size_t i = 0; fileName[i]; i++, j++) {
|
||||
// Account for the extra backslash inserted below
|
||||
if (fileName[i] == '"')
|
||||
j++;
|
||||
// Ensure there will be enough room; DO NOT PRINT ANYTHING ABOVE THIS!
|
||||
if (j + 2 >= bufsize) { // Always keep room for 2 tail chars
|
||||
bufsize = bufsize ? bufsize * 2 : 64;
|
||||
buf = realloc(buf, bufsize);
|
||||
if (!buf)
|
||||
fatalerror("Failed to grow buffer for file name: %s\n",
|
||||
strerror(errno));
|
||||
}
|
||||
// Escape quotes, since we're returning a string
|
||||
if (fileName[i] == '"')
|
||||
buf[j - 1] = '\\';
|
||||
buf[j] = fileName[i];
|
||||
}
|
||||
// Write everything after the loop, to ensure the buffer has been allocated
|
||||
buf[0] = '"';
|
||||
buf[j++] = '"';
|
||||
buf[j] = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
static int32_t CallbackPC(void)
|
||||
{
|
||||
struct Section const *section = sect_GetSymbolSection();
|
||||
@@ -687,21 +643,13 @@ static struct Symbol *createBuiltinSymbol(char const *symName)
|
||||
void sym_Init(time_t now)
|
||||
{
|
||||
PCSymbol = createBuiltinSymbol("@");
|
||||
_NARGSymbol = createBuiltinSymbol("_NARG");
|
||||
// __LINE__ is deprecated
|
||||
struct Symbol *__LINE__Symbol = createBuiltinSymbol("__LINE__");
|
||||
// __FILE__ is deprecated
|
||||
struct Symbol *__FILE__Symbol = createBuiltinSymbol("__FILE__");
|
||||
|
||||
PCSymbol->type = SYM_LABEL;
|
||||
PCSymbol->section = NULL;
|
||||
PCSymbol->numCallback = CallbackPC;
|
||||
|
||||
_NARGSymbol = createBuiltinSymbol("_NARG");
|
||||
_NARGSymbol->type = SYM_EQU;
|
||||
_NARGSymbol->numCallback = Callback_NARG;
|
||||
__LINE__Symbol->type = SYM_EQU;
|
||||
__LINE__Symbol->numCallback = Callback__LINE__;
|
||||
__FILE__Symbol->type = SYM_EQUS;
|
||||
__FILE__Symbol->strCallback = Callback__FILE__;
|
||||
|
||||
sym_AddVar("_RS", 0)->isBuiltin = true;
|
||||
|
||||
@@ -758,4 +706,5 @@ void sym_Init(time_t now)
|
||||
#undef addSym
|
||||
|
||||
sym_SetCurrentSymbolScope(NULL);
|
||||
anonLabelID = 0;}
|
||||
anonLabelID = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user