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:
Rangi
2023-11-04 18:22:46 -04:00
committed by GitHub
parent 28d92b7be3
commit 46e67ee078
20 changed files with 60 additions and 152 deletions

View File

@@ -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();

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}