// to choke on legitimate code... Need to investigate this further
// before changing anything else here!
case CONST:
- sprintf(numbuf, "$%lx", (long unsigned int)*tk++);
+ tk++; // Skip the hi LONG...
+ sprintf(numbuf, "$%lx", (uint64_t)*tk++);
d = numbuf;
break;
case DEQUALS:
int state = 0; // State for keyword detector
int j = 0; // Var for keyword detector
uint8_t c; // Random char
- VALUE v; // Random value
+ uint64_t v; // Random value
uint8_t * nullspot = NULL; // Spot to clobber for SYMBOL termination
int stuffnull; // 1:terminate SYMBOL '\0' at *nullspot
uint8_t c1;
if (((chrtab[*ln] & DOT) == 0) || (dotxtab[*ln] == 0))
return error("[bwsl] must follow '.' in symbol");
- v = (VALUE)dotxtab[*ln++];
+ v = (uint32_t)dotxtab[*ln++];
if (chrtab[*ln] & CTSYM)
return error("misuse of '.'; not allowed in symbols");
case '\\':
c = '\\';
break;
- case '!':
- // If we're evaluating a macro
- // this is valid and expands to
- // "dot-size"
- break;
+ case '!':
+ // If we're evaluating a macro
+ // this is valid and expands to
+ // "dot-size"
+ break;
default:
warn("bad backslash code in string");
ln--;
}
else if ((*(ln + 1) & 0xDF) == 'L')
{
+ v &= 0xFFFFFFFF;
ln += 2;
}
}
}
*tk++ = CONST;
- *tk++ = v;
+ *tk++ = v >> 32; // High LONG of 64-bit value
+ *tk++ = v & 0xFFFFFFFF; // Low LONG of 64-bit value
if (obj_format == ALCYON)
{
if ((*(ln + 1) == 'l') || (*(ln + 1) == 'L'))
{
+ v &= 0xFFFFFFFF;
ln += 2;
}
}
*tk++ = CONST;
- *tk++ = v;
+ *tk++ = v >> 32; // High LONG of 64-bit value
+ *tk++ = v & 0xFFFFFFFF; // Low LONG of 64-bit value
continue;
case '@': // @ or octal constant
if (*ln < '0' || *ln > '7')
if ((*(ln+1) == 'l') || (*(ln+1) == 'L'))
{
+ v &= 0xFFFFFFFF;
ln += 2;
}
}
*tk++ = CONST;
- *tk++ = v;
+ *tk++ = v >> 32; // High LONG of 64-bit value
+ *tk++ = v & 0xFFFFFFFF; // Low LONG of 64-bit value
continue;
case '^': // ^ or ^^ <operator-name>
if (*ln != '^')
{
v &= 0x000000FF;
ln += 2;
- *tk++ = CONST;
- *tk++ = v;
- *tk++ = DOTB;
+ *tk++ = CONST;
+ *tk++ = 0; // Hi LONG of 64-bits
+ *tk++ = v;
+ *tk++ = DOTB;
}
else if ((*(ln + 1) == 'w') || (*(ln + 1) == 'W'))
{
v &= 0x0000FFFF;
ln += 2;
- *tk++ = CONST;
- *tk++ = v;
- *tk++ = DOTW;
+ *tk++ = CONST;
+ *tk++ = 0; // Hi LONG of 64-bits
+ *tk++ = v;
+ *tk++ = DOTW;
}
else if ((*(ln + 1) == 'l') || (*(ln + 1) == 'L'))
{
+ v &= 0xFFFFFFFF;
ln += 2;
- *tk++ = CONST;
- *tk++ = v;
- *tk++ = DOTL;
- }
- }
- else
- {
- *tk++ = CONST;
- *tk++ = v;
- }
+ *tk++ = CONST;
+ *tk++ = 0; // Hi LONG of 64-bits
+ *tk++ = v;
+ *tk++ = DOTL;
+ }
+ }
+ else
+ {
+ *tk++ = CONST;
+ *tk++ = v >> 32; // High LONG of 64-bit value
+ *tk++ = v & 0xFFFFFFFF; // Low LONG of 64-bit value
+ }
//printf("CONST: %i\n", v);
continue;
printf("[COLON]");
else if (*t == CONST)
{
- t++;
- printf("[CONST: $%X]", (uint32_t)*t);
+ printf("[CONST: $%lX]", ((uint64_t)t[1] << 32) | (uint64_t)t[2]);
+ t += 2;
}
else if (*t == ACONST)
{