#define STRINGIZE(x) STRINGIZE_HELPER(x)
#define WARNING(desc) __pragma(message(__FILE__ "(" STRINGIZE(__LINE__) ") : Warning: " #desc))
#define inline __inline
-
// usage:
// WARNING(FIXME: Code removed because...)
#include <dirent.h>
#include "symbol.h"
+#if defined(WIN32) || defined(WIN64)
+// Ever since Visual Studio... 2017? 2019? the following constants come defined in the
+// platform SDK, which leads to endless warnings from the compiler. So let's just
+// put the pacifier on and undef them, sheesh! (No, we won't rename the defines,
+// we've been here since 1986, Visual Studio wasn't even a glimpse in the milkman's eyes,
+// if you catch my drift)
+#undef CONST
+#undef ERROR
+#undef TEXT
+#endif
+
#define BYTE uint8_t
#define WORD uint16_t
#define LONG uint32_t
uint8_t c1;
int stringNum = 0; // Pointer to string locations in tokenized line
SYM* sy; // For looking up symbols (.equr)
+ int equrundef = 0; // Flag for equrundef scanning
retry:
case 121: // date
j = -1;
}
+
+ // If we detected equrundef/regundef set relevant flag
+ if (j == KW_EQURUNDEF)
+ {
+ equrundef = 1;
+ j = -1;
+ //printf("line %d, equrundef found\n", curlineno);
+ }
// If not tokenized keyword OR token was not found
if ((j < 0) || (state < 0))
{
- // Last attempt: let's see if this is an equated register
- char temp = *ln;
- *ln = 0;
- sy = lookup(nullspot, LABEL, 0);
- *ln = temp;
- if (sy)
+ // Only proceed if no equrundef has been detected. In that case we need to store the symbol
+ // because the directive handler (d_equrundef) will run outside this loop, further into procln.c
+ if (!equrundef)
{
- if (sy->sattre & EQUATEDREG)
+ // Last attempt: let's see if this is an equated register
+ char temp = *ln;
+ *ln = 0;
+ sy = lookup(nullspot, LABEL, 0);
+ *ln = temp;
+ if (sy)
{
- uint32_t register_token = sy->svalue;
- if (rgpu || rdsp)
+ if (sy->sattre & EQUATEDREG)
{
- // If we are in GPU or DSP mode then mark the register bank.
- // We will use it during EvaluateRegisterFromTokenStream()
- // when we check if we can use the equated register with the currently
- // selected bank.
- // Note (ggn): I find all this superfluous. Do we really want to be so
- // protective? Plus, the current implementation happily skips
- // these checks on .equr that are set during fixups - oops!
- register_token |= 0x80000000; // Mark that this is an .equr
- if (sy->sattre & BANK_1)
+ uint32_t register_token = sy->svalue;
+ if (rgpu || rdsp)
{
- register_token |= 0x40000000; // Mark bank 1
+ // If we are in GPU or DSP mode then mark the register bank.
+ // We will use it during EvaluateRegisterFromTokenStream()
+ // when we check if we can use the equated register with the currently
+ // selected bank.
+ // Note (ggn): I find all this superfluous. Do we really want to be so
+ // protective? Plus, the current implementation happily skips
+ // these checks on .equr that are set during fixups - oops!
+ register_token |= 0x80000000; // Mark that this is an .equr
+ if (sy->sattre & BANK_1)
+ {
+ register_token |= 0x40000000; // Mark bank 1
+ }
}
+ *tk.u32++ = register_token;
+ stuffnull = 0;
+ continue;
}
- *tk.u32++ = register_token;
- stuffnull = 0;
- continue;
}
}
// Ok, that failed, let's store the symbol instead