Support 64 bit integer literals on all builds, and fix 64 bit Console.hex display.

This commit is contained in:
David Brown 2016-09-15 15:23:08 +01:00
parent 7fad168e40
commit dc699db9f5
199 changed files with 478 additions and 477 deletions

View file

@ -1,4 +1,4 @@
/* voc 1.95 [2016/09/14] for gcc LP64 on cygwin tspkaSfF */
/* voc 1.95 [2016/09/15] for gcc LP64 on cygwin tspkaSfF */
#define INTEGER int16
#define LONGINT int32
@ -17,7 +17,7 @@ typedef
export OPS_Name OPS_name;
export OPS_String OPS_str;
export int16 OPS_numtyp;
export int32 OPS_intval;
export int64 OPS_intval;
export REAL OPS_realval;
export LONGREAL OPS_lrlval;
static CHAR OPS_ch;
@ -132,7 +132,7 @@ static int16 Ord__7 (CHAR ch, BOOLEAN hex)
static void OPS_Number (void)
{
int16 i, m, n, d, e, maxHdig;
int16 i, m, n, d, e;
CHAR dig[24];
LONGREAL f;
CHAR expCh;
@ -178,7 +178,7 @@ static void OPS_Number (void)
OPS_numtyp = 1;
if (n <= 2) {
while (i < n) {
OPS_intval = __ASHL(OPS_intval, 4) + Ord__7(dig[i], 1);
OPS_intval = __ASHL(OPS_intval, 4) + (int64)Ord__7(dig[i], 1);
i += 1;
}
} else {
@ -187,13 +187,12 @@ static void OPS_Number (void)
} else if (OPS_ch == 'H') {
OPM_Get(&OPS_ch);
OPS_numtyp = 2;
maxHdig = 8;
if (n <= maxHdig) {
if ((n == maxHdig && dig[0] > '7')) {
if (n <= 16) {
if ((n == 16 && dig[0] > '7')) {
OPS_intval = -1;
}
while (i < n) {
OPS_intval = __ASHL(OPS_intval, 4) + Ord__7(dig[i], 1);
OPS_intval = __ASHL(OPS_intval, 4) + (int64)Ord__7(dig[i], 1);
i += 1;
}
} else {
@ -204,8 +203,8 @@ static void OPS_Number (void)
while (i < n) {
d = Ord__7(dig[i], 0);
i += 1;
if (OPS_intval <= __DIV(2147483647 - d, 10)) {
OPS_intval = OPS_intval * 10 + d;
if (OPS_intval <= (int64)__DIV(9223372036854775807 - d, 10)) {
OPS_intval = OPS_intval * 10 + (int64)d;
} else {
OPS_err(203);
}