mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
Built-in symbols are "<builtin>", not "<command-line>" (#1362)
This commit is contained in:
@@ -101,10 +101,9 @@ FileStackNode *fstk_GetFileStack() {
|
|||||||
FileStackNode *topNode = contextStack.top().fileInfo;
|
FileStackNode *topNode = contextStack.top().fileInfo;
|
||||||
|
|
||||||
// Mark node and all of its parents as referenced if not already so they don't get freed
|
// Mark node and all of its parents as referenced if not already so they don't get freed
|
||||||
for (FileStackNode *node = topNode; node && !node->referenced; node = node->parent) {
|
for (FileStackNode *node = topNode; node && !node->referenced; node = node->parent)
|
||||||
node->referenced = true;
|
node->referenced = true;
|
||||||
node->ID = -1;
|
|
||||||
}
|
|
||||||
return topNode;
|
return topNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -143,18 +143,13 @@ static void writesymbol(Symbol const &sym, FILE *file) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void registerSymbol(Symbol &sym) {
|
static void registerUnregisteredSymbol(Symbol &sym) {
|
||||||
sym.ID = objectSymbols.size();
|
// Check for `sym.src`, to skip any built-in symbol from rgbasm
|
||||||
objectSymbols.push_back(&sym);
|
if (sym.src && sym.ID == (uint32_t)-1 && !sym_IsPC(&sym)) {
|
||||||
out_RegisterNode(sym.src);
|
sym.ID = objectSymbols.size(); // Set the symbol's ID within the object file
|
||||||
}
|
objectSymbols.push_back(&sym);
|
||||||
|
out_RegisterNode(sym.src);
|
||||||
// Returns a symbol's ID within the object file
|
}
|
||||||
// If the symbol does not have one, one is assigned by registering the symbol
|
|
||||||
static uint32_t getSymbolID(Symbol &sym) {
|
|
||||||
if (sym.ID == (uint32_t)-1 && !sym_IsPC(&sym))
|
|
||||||
registerSymbol(sym);
|
|
||||||
return sym.ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void writerpn(std::vector<uint8_t> &rpnexpr, std::vector<uint8_t> const &rpn) {
|
static void writerpn(std::vector<uint8_t> &rpnexpr, std::vector<uint8_t> const &rpn) {
|
||||||
@@ -193,7 +188,8 @@ static void writerpn(std::vector<uint8_t> &rpnexpr, std::vector<uint8_t> const &
|
|||||||
value = sym_GetConstantValue(symName);
|
value = sym_GetConstantValue(symName);
|
||||||
} else {
|
} else {
|
||||||
rpnexpr[rpnptr++] = RPN_SYM;
|
rpnexpr[rpnptr++] = RPN_SYM;
|
||||||
value = getSymbolID(*sym);
|
registerUnregisteredSymbol(*sym); // Ensure that `sym->ID` is set
|
||||||
|
value = sym->ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
rpnexpr[rpnptr++] = value & 0xFF;
|
rpnexpr[rpnptr++] = value & 0xFF;
|
||||||
@@ -213,7 +209,8 @@ static void writerpn(std::vector<uint8_t> &rpnexpr, std::vector<uint8_t> const &
|
|||||||
|
|
||||||
// The symbol name is always written expanded
|
// The symbol name is always written expanded
|
||||||
sym = sym_FindExactSymbol(symName);
|
sym = sym_FindExactSymbol(symName);
|
||||||
value = getSymbolID(*sym);
|
registerUnregisteredSymbol(*sym); // Ensure that `sym->ID` is set
|
||||||
|
value = sym->ID;
|
||||||
|
|
||||||
rpnexpr[rpnptr++] = RPN_BANK_SYM;
|
rpnexpr[rpnptr++] = RPN_BANK_SYM;
|
||||||
rpnexpr[rpnptr++] = value & 0xFF;
|
rpnexpr[rpnptr++] = value & 0xFF;
|
||||||
@@ -323,13 +320,6 @@ static void writeFileStackNode(FileStackNode const &node, FILE *file) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void registerUnregisteredSymbol(Symbol &sym) {
|
|
||||||
// Check for symbol->src, to skip any built-in symbol from rgbasm
|
|
||||||
if (sym.src && sym.ID == (uint32_t)-1) {
|
|
||||||
registerSymbol(sym);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write an objectfile
|
// Write an objectfile
|
||||||
void out_WriteObject() {
|
void out_WriteObject() {
|
||||||
FILE *file;
|
FILE *file;
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ static int32_t CallbackPC() {
|
|||||||
int32_t Symbol::getValue() const {
|
int32_t Symbol::getValue() const {
|
||||||
assert(std::holds_alternative<int32_t>(data) || std::holds_alternative<int32_t (*)()>(data));
|
assert(std::holds_alternative<int32_t>(data) || std::holds_alternative<int32_t (*)()>(data));
|
||||||
if (int32_t const *value = std::get_if<int32_t>(&data); value) {
|
if (int32_t const *value = std::get_if<int32_t>(&data); value) {
|
||||||
// TODO: do not use section's org directly
|
|
||||||
return type == SYM_LABEL ? *value + getSection()->org : *value;
|
return type == SYM_LABEL ? *value + getSection()->org : *value;
|
||||||
}
|
}
|
||||||
return getOutputValue();
|
return getOutputValue();
|
||||||
@@ -90,25 +89,23 @@ std::string *Symbol::getEqus() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void dumpFilename(Symbol const &sym) {
|
static void dumpFilename(Symbol const &sym) {
|
||||||
if (sym.src)
|
if (sym.src) {
|
||||||
sym.src->dump(sym.fileLine);
|
sym.src->dump(sym.fileLine);
|
||||||
else if (sym.fileLine == 0)
|
putc('\n', stderr);
|
||||||
fputs("<command-line>", stderr);
|
} else if (sym.isBuiltin) {
|
||||||
else
|
fputs("<builtin>\n", stderr);
|
||||||
fputs("<builtin>", stderr);
|
} else {
|
||||||
}
|
fputs("<command-line>\n", stderr);
|
||||||
|
}
|
||||||
// Set a symbol's definition filename and line
|
|
||||||
static void setSymbolFilename(Symbol &sym) {
|
|
||||||
sym.src = fstk_GetFileStack(); // This is `nullptr` for built-ins
|
|
||||||
sym.fileLine = sym.src ? lexer_GetLineNo() : 0; // This is 1 for built-ins
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update a symbol's definition filename and line
|
// Update a symbol's definition filename and line
|
||||||
static void updateSymbolFilename(Symbol &sym) {
|
static void updateSymbolFilename(Symbol &sym) {
|
||||||
FileStackNode *oldSrc = sym.src;
|
FileStackNode *oldSrc = sym.src;
|
||||||
|
|
||||||
setSymbolFilename(sym);
|
sym.src = fstk_GetFileStack();
|
||||||
|
sym.fileLine = sym.src ? lexer_GetLineNo() : 0;
|
||||||
|
|
||||||
// If the old node was referenced, ensure the new one is
|
// If the old node was referenced, ensure the new one is
|
||||||
if (oldSrc && oldSrc->referenced && oldSrc->ID != (uint32_t)-1)
|
if (oldSrc && oldSrc->referenced && oldSrc->ID != (uint32_t)-1)
|
||||||
out_RegisterNode(sym.src);
|
out_RegisterNode(sym.src);
|
||||||
@@ -116,14 +113,15 @@ static void updateSymbolFilename(Symbol &sym) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create a new symbol by name
|
// Create a new symbol by name
|
||||||
static Symbol &createsymbol(std::string const &symName) {
|
static Symbol &createSymbol(std::string const &symName) {
|
||||||
Symbol &sym = symbols[symName];
|
Symbol &sym = symbols[symName];
|
||||||
|
|
||||||
sym.name = symName;
|
sym.name = symName;
|
||||||
sym.isExported = false;
|
sym.isExported = false;
|
||||||
sym.isBuiltin = false;
|
sym.isBuiltin = false;
|
||||||
sym.section = nullptr;
|
sym.section = nullptr;
|
||||||
setSymbolFilename(sym);
|
sym.src = fstk_GetFileStack();
|
||||||
|
sym.fileLine = sym.src ? lexer_GetLineNo() : 0;
|
||||||
sym.ID = -1;
|
sym.ID = -1;
|
||||||
|
|
||||||
return sym;
|
return sym;
|
||||||
@@ -256,17 +254,15 @@ static Symbol *createNonrelocSymbol(std::string const &symName, bool numeric) {
|
|||||||
Symbol *sym = sym_FindExactSymbol(symName);
|
Symbol *sym = sym_FindExactSymbol(symName);
|
||||||
|
|
||||||
if (!sym) {
|
if (!sym) {
|
||||||
sym = &createsymbol(symName);
|
sym = &createSymbol(symName);
|
||||||
} else if (sym->isDefined()) {
|
} else if (sym->isDefined()) {
|
||||||
error("'%s' already defined at ", symName.c_str());
|
error("'%s' already defined at ", symName.c_str());
|
||||||
dumpFilename(*sym);
|
dumpFilename(*sym);
|
||||||
putc('\n', stderr);
|
|
||||||
return nullptr; // Don't allow overriding the symbol, that'd be bad!
|
return nullptr; // Don't allow overriding the symbol, that'd be bad!
|
||||||
} else if (!numeric) {
|
} else if (!numeric) {
|
||||||
// The symbol has already been referenced, but it's not allowed
|
// The symbol has already been referenced, but it's not allowed
|
||||||
error("'%s' already referenced at ", symName.c_str());
|
error("'%s' already referenced at ", symName.c_str());
|
||||||
dumpFilename(*sym);
|
dumpFilename(*sym);
|
||||||
putc('\n', stderr);
|
|
||||||
return nullptr; // Don't allow overriding the symbol, that'd be bad!
|
return nullptr; // Don't allow overriding the symbol, that'd be bad!
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,7 +291,6 @@ Symbol *sym_RedefEqu(std::string const &symName, int32_t value) {
|
|||||||
if (sym->isDefined() && sym->type != SYM_EQU) {
|
if (sym->isDefined() && sym->type != SYM_EQU) {
|
||||||
error("'%s' already defined as non-EQU at ", symName.c_str());
|
error("'%s' already defined as non-EQU at ", symName.c_str());
|
||||||
dumpFilename(*sym);
|
dumpFilename(*sym);
|
||||||
putc('\n', stderr);
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} else if (sym->isBuiltin) {
|
} else if (sym->isBuiltin) {
|
||||||
error("Built-in symbol '%s' cannot be redefined\n", symName.c_str());
|
error("Built-in symbol '%s' cannot be redefined\n", symName.c_str());
|
||||||
@@ -343,7 +338,6 @@ Symbol *sym_RedefString(std::string const &symName, char const *value) {
|
|||||||
else
|
else
|
||||||
error("'%s' already referenced at ", symName.c_str());
|
error("'%s' already referenced at ", symName.c_str());
|
||||||
dumpFilename(*sym);
|
dumpFilename(*sym);
|
||||||
putc('\n', stderr);
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} else if (sym->isBuiltin) {
|
} else if (sym->isBuiltin) {
|
||||||
error("Built-in symbol '%s' cannot be redefined\n", symName.c_str());
|
error("Built-in symbol '%s' cannot be redefined\n", symName.c_str());
|
||||||
@@ -363,7 +357,7 @@ Symbol *sym_AddVar(std::string const &symName, int32_t value) {
|
|||||||
Symbol *sym = sym_FindExactSymbol(symName);
|
Symbol *sym = sym_FindExactSymbol(symName);
|
||||||
|
|
||||||
if (!sym) {
|
if (!sym) {
|
||||||
sym = &createsymbol(symName);
|
sym = &createSymbol(symName);
|
||||||
} else if (sym->isDefined() && sym->type != SYM_VAR) {
|
} else if (sym->isDefined() && sym->type != SYM_VAR) {
|
||||||
error(
|
error(
|
||||||
"'%s' already defined as %s at ",
|
"'%s' already defined as %s at ",
|
||||||
@@ -371,7 +365,6 @@ Symbol *sym_AddVar(std::string const &symName, int32_t value) {
|
|||||||
sym->type == SYM_LABEL ? "label" : "constant"
|
sym->type == SYM_LABEL ? "label" : "constant"
|
||||||
);
|
);
|
||||||
dumpFilename(*sym);
|
dumpFilename(*sym);
|
||||||
putc('\n', stderr);
|
|
||||||
return sym;
|
return sym;
|
||||||
} else {
|
} else {
|
||||||
updateSymbolFilename(*sym);
|
updateSymbolFilename(*sym);
|
||||||
@@ -393,11 +386,10 @@ static Symbol *addLabel(std::string const &symName) {
|
|||||||
Symbol *sym = sym_FindExactSymbol(symName);
|
Symbol *sym = sym_FindExactSymbol(symName);
|
||||||
|
|
||||||
if (!sym) {
|
if (!sym) {
|
||||||
sym = &createsymbol(symName);
|
sym = &createSymbol(symName);
|
||||||
} else if (sym->isDefined()) {
|
} else if (sym->isDefined()) {
|
||||||
error("'%s' already defined at ", symName.c_str());
|
error("'%s' already defined at ", symName.c_str());
|
||||||
dumpFilename(*sym);
|
dumpFilename(*sym);
|
||||||
putc('\n', stderr);
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} else {
|
} else {
|
||||||
updateSymbolFilename(*sym);
|
updateSymbolFilename(*sym);
|
||||||
@@ -528,8 +520,8 @@ Symbol *sym_AddMacro(std::string const &symName, int32_t defLineNo, char const *
|
|||||||
sym->type = SYM_MACRO;
|
sym->type = SYM_MACRO;
|
||||||
sym->data = macro;
|
sym->data = macro;
|
||||||
|
|
||||||
setSymbolFilename(*sym); // TODO: is this really necessary?
|
sym->src = fstk_GetFileStack();
|
||||||
// The symbol is created at the line after the `endm`,
|
// The symbol is created at the line after the `ENDM`,
|
||||||
// override this with the actual definition line
|
// override this with the actual definition line
|
||||||
sym->fileLine = defLineNo;
|
sym->fileLine = defLineNo;
|
||||||
|
|
||||||
@@ -547,9 +539,9 @@ Symbol *sym_Ref(std::string const &symName) {
|
|||||||
fatalerror("Local label reference '%s' in main scope\n", symName.c_str());
|
fatalerror("Local label reference '%s' in main scope\n", symName.c_str());
|
||||||
std::string fullName = *labelScope + symName;
|
std::string fullName = *labelScope + symName;
|
||||||
|
|
||||||
sym = &createsymbol(fullName);
|
sym = &createSymbol(fullName);
|
||||||
} else {
|
} else {
|
||||||
sym = &createsymbol(symName);
|
sym = &createSymbol(symName);
|
||||||
}
|
}
|
||||||
|
|
||||||
sym->type = SYM_REF;
|
sym->type = SYM_REF;
|
||||||
@@ -563,25 +555,17 @@ void sym_SetExportAll(bool set) {
|
|||||||
exportAll = set;
|
exportAll = set;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Symbol *createBuiltinSymbol(std::string const &symName) {
|
|
||||||
Symbol *sym = &createsymbol(symName);
|
|
||||||
|
|
||||||
sym->isBuiltin = true;
|
|
||||||
sym->src = nullptr;
|
|
||||||
sym->fileLine = 1; // This is 0 for CLI-defined symbols
|
|
||||||
|
|
||||||
return sym;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize the symboltable
|
// Initialize the symboltable
|
||||||
void sym_Init(time_t now) {
|
void sym_Init(time_t now) {
|
||||||
PCSymbol = createBuiltinSymbol("@"s);
|
PCSymbol = &createSymbol("@"s);
|
||||||
PCSymbol->type = SYM_LABEL;
|
PCSymbol->type = SYM_LABEL;
|
||||||
PCSymbol->data = CallbackPC;
|
PCSymbol->data = CallbackPC;
|
||||||
|
PCSymbol->isBuiltin = true;
|
||||||
|
|
||||||
_NARGSymbol = createBuiltinSymbol("_NARG"s);
|
_NARGSymbol = &createSymbol("_NARG"s);
|
||||||
_NARGSymbol->type = SYM_EQU;
|
_NARGSymbol->type = SYM_EQU;
|
||||||
_NARGSymbol->data = Callback_NARG;
|
_NARGSymbol->data = Callback_NARG;
|
||||||
|
_NARGSymbol->isBuiltin = true;
|
||||||
|
|
||||||
_RSSymbol = sym_AddVar("_RS"s, 0);
|
_RSSymbol = sym_AddVar("_RS"s, 0);
|
||||||
_RSSymbol->isBuiltin = true;
|
_RSSymbol->isBuiltin = true;
|
||||||
|
|||||||
@@ -3,53 +3,53 @@ error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(5):
|
|||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(6):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(6):
|
||||||
Built-in symbol '__UTC_YEAR__' cannot be purged
|
Built-in symbol '__UTC_YEAR__' cannot be purged
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(9):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(9):
|
||||||
'__UTC_YEAR__' already defined at <command-line>
|
'__UTC_YEAR__' already defined at <builtin>
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(10):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(10):
|
||||||
'__UTC_YEAR__' already defined at <command-line>
|
'__UTC_YEAR__' already defined at <builtin>
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(13):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(13):
|
||||||
'__UTC_YEAR__' already defined as constant at <command-line>
|
'__UTC_YEAR__' already defined as constant at <builtin>
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(14):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(14):
|
||||||
'__UTC_YEAR__' already defined as constant at <command-line>
|
'__UTC_YEAR__' already defined as constant at <builtin>
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(17):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(17):
|
||||||
'__UTC_YEAR__' already defined at <command-line>
|
'__UTC_YEAR__' already defined at <builtin>
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(18):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(18):
|
||||||
'__UTC_YEAR__' already defined at <command-line>
|
'__UTC_YEAR__' already defined at <builtin>
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(21):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(21):
|
||||||
'__UTC_YEAR__' already defined as constant at <command-line>
|
'__UTC_YEAR__' already defined as constant at <builtin>
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(22):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(22):
|
||||||
'__UTC_YEAR__' already defined as constant at <command-line>
|
'__UTC_YEAR__' already defined as constant at <builtin>
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(25):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(25):
|
||||||
Built-in symbol '__UTC_YEAR__' cannot be redefined
|
Built-in symbol '__UTC_YEAR__' cannot be redefined
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(26):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(26):
|
||||||
Built-in symbol '__UTC_YEAR__' cannot be redefined
|
Built-in symbol '__UTC_YEAR__' cannot be redefined
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(29):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(29):
|
||||||
'__UTC_YEAR__' already defined as non-EQUS at <command-line>
|
'__UTC_YEAR__' already defined as non-EQUS at <builtin>
|
||||||
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(30):
|
error: builtin-overwrite.asm(36) -> builtin-overwrite.asm::tickle(30):
|
||||||
'__UTC_YEAR__' already defined as non-EQUS at <command-line>
|
'__UTC_YEAR__' already defined as non-EQUS at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(5):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(5):
|
||||||
Built-in symbol '__ISO_8601_UTC__' cannot be purged
|
Built-in symbol '__ISO_8601_UTC__' cannot be purged
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(6):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(6):
|
||||||
Built-in symbol '__ISO_8601_UTC__' cannot be purged
|
Built-in symbol '__ISO_8601_UTC__' cannot be purged
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(9):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(9):
|
||||||
'__ISO_8601_UTC__' already defined at <command-line>
|
'__ISO_8601_UTC__' already defined at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(10):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(10):
|
||||||
'__ISO_8601_UTC__' already defined at <command-line>
|
'__ISO_8601_UTC__' already defined at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(13):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(13):
|
||||||
'__ISO_8601_UTC__' already defined as constant at <command-line>
|
'__ISO_8601_UTC__' already defined as constant at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(14):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(14):
|
||||||
'__ISO_8601_UTC__' already defined as constant at <command-line>
|
'__ISO_8601_UTC__' already defined as constant at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(17):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(17):
|
||||||
'__ISO_8601_UTC__' already defined at <command-line>
|
'__ISO_8601_UTC__' already defined at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(18):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(18):
|
||||||
'__ISO_8601_UTC__' already defined at <command-line>
|
'__ISO_8601_UTC__' already defined at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(21):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(21):
|
||||||
'__ISO_8601_UTC__' already defined as constant at <command-line>
|
'__ISO_8601_UTC__' already defined as constant at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(22):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(22):
|
||||||
'__ISO_8601_UTC__' already defined as constant at <command-line>
|
'__ISO_8601_UTC__' already defined as constant at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(25):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(25):
|
||||||
'__ISO_8601_UTC__' already defined as non-EQU at <command-line>
|
'__ISO_8601_UTC__' already defined as non-EQU at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(26):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(26):
|
||||||
'__ISO_8601_UTC__' already defined as non-EQU at <command-line>
|
'__ISO_8601_UTC__' already defined as non-EQU at <builtin>
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(29):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(29):
|
||||||
Built-in symbol '__ISO_8601_UTC__' cannot be redefined
|
Built-in symbol '__ISO_8601_UTC__' cannot be redefined
|
||||||
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(30):
|
error: builtin-overwrite.asm(37) -> builtin-overwrite.asm::tickle(30):
|
||||||
|
|||||||
26
test/asm/rs-overwrite.asm
Normal file
26
test/asm/rs-overwrite.asm
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
PURGE _RS
|
||||||
|
PRINTLN _RS
|
||||||
|
|
||||||
|
DEF _RS EQU 1
|
||||||
|
PRINTLN _RS
|
||||||
|
|
||||||
|
DEF _RS = 2 ; this works
|
||||||
|
PRINTLN _RS
|
||||||
|
|
||||||
|
DEF _RS EQUS "3"
|
||||||
|
PRINTLN _RS
|
||||||
|
|
||||||
|
REDEF _RS = 4 ; this works
|
||||||
|
PRINTLN _RS
|
||||||
|
|
||||||
|
REDEF _RS EQU 5
|
||||||
|
PRINTLN _RS
|
||||||
|
|
||||||
|
REDEF _RS EQUS "6"
|
||||||
|
PRINTLN _RS
|
||||||
|
|
||||||
|
RSSET 7 ; this works
|
||||||
|
PRINTLN _RS
|
||||||
|
|
||||||
|
RSRESET
|
||||||
|
PRINTLN _RS
|
||||||
11
test/asm/rs-overwrite.err
Normal file
11
test/asm/rs-overwrite.err
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
error: rs-overwrite.asm(1):
|
||||||
|
Built-in symbol '_RS' cannot be purged
|
||||||
|
error: rs-overwrite.asm(4):
|
||||||
|
'_RS' already defined at <builtin>
|
||||||
|
error: rs-overwrite.asm(10):
|
||||||
|
'_RS' already defined at rs-overwrite.asm(7)
|
||||||
|
error: rs-overwrite.asm(16):
|
||||||
|
'_RS' already defined as non-EQU at rs-overwrite.asm(13)
|
||||||
|
error: rs-overwrite.asm(19):
|
||||||
|
'_RS' already defined as non-EQUS at rs-overwrite.asm(13)
|
||||||
|
error: Assembly aborted (5 errors)!
|
||||||
9
test/asm/rs-overwrite.out
Normal file
9
test/asm/rs-overwrite.out
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
$0
|
||||||
|
$0
|
||||||
|
$2
|
||||||
|
$2
|
||||||
|
$4
|
||||||
|
$4
|
||||||
|
$4
|
||||||
|
$7
|
||||||
|
$0
|
||||||
Reference in New Issue
Block a user