Moving to config independent types stage 1 - generate intxx types.

This commit is contained in:
David Brown 2016-09-01 14:14:06 +01:00
parent 159f5a3d80
commit ee8342ef0d
168 changed files with 6673 additions and 6565 deletions

View file

@ -41,7 +41,7 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
indentLevel: INTEGER;
ptrinit, mainprog, ansi: BOOLEAN;
hashtab: ARRAY 105 OF SHORTINT;
keytab: ARRAY 36, 9 OF CHAR;
keytab: ARRAY 50, 9 OF CHAR;
GlbPtrs: BOOLEAN;
BodyNameExt: ARRAY 13 OF CHAR;
@ -117,6 +117,8 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
IF hashtab[h] >= 0 THEN
IF keytab[hashtab[h]] = obj^.name THEN OPM.Write('_') END
END
ELSIF (mode = OPT.Typ) & (obj.typ.form = OPT.Int) THEN
OPM.WriteString("int"); OPM.WriteInt(obj.typ.size*8)
ELSE
IF (mode # OPT.Typ) OR (obj^.linkadr # PredefinedType) THEN
IF mode = OPT.TProc THEN Ident(obj^.link^.typ^.strobj)
@ -128,10 +130,6 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
OPM.Write('_')
ELSIF (obj = OPT.sysptrtyp^.strobj)
OR (obj = OPT.ainttyp^.strobj)
OR (obj = OPT.int8typ^.strobj)
OR (obj = OPT.int16typ^.strobj)
OR (obj = OPT.int32typ^.strobj)
OR (obj = OPT.int64typ^.strobj)
OR (obj = OPT.bytetyp^.strobj) THEN
OPM.WriteString("SYSTEM_")
END;
@ -1261,14 +1259,8 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
PROCEDURE IntLiteral*(n, size: LONGINT);
BEGIN
IF (size > OPM.CIntSize) & (n <= OPM.CIntMax) & (n > OPM.CIntMin) THEN
CASE size OF
|2: OPM.WriteString("((SYSTEM_INT16)(");
|4: OPM.WriteString("((SYSTEM_INT32)(");
|8: OPM.WriteString("((SYSTEM_INT64)(");
ELSE OPM.LogWStr("Unhandled case in OPC.IntLiteral, size = "); OPM.LogWNum(size,1); OPM.LogWLn;
END;
OPM.WriteInt(n);
OPM.WriteString("))")
OPM.WriteString("((int"); OPM.WriteInt(size*8); OPM.WriteString(")(");
OPM.WriteInt(n); OPM.WriteString("))")
ELSE
OPM.WriteInt(n)
END
@ -1328,6 +1320,7 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
BEGIN n := 0;
FOR i := 0 TO 104 DO hashtab[i] := -1 END ;
Enter("adrint"); (* pseudo keyword used by voc *)
Enter("asm");
Enter("auto");
Enter("break");
@ -1341,24 +1334,33 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
Enter("else");
Enter("enum");
Enter("extern");
Enter("export"); (* pseudo keyword used by voc *)
Enter("export"); (* pseudo keyword used by voc *)
Enter("float");
Enter("for");
Enter("fortran");
Enter("goto");
Enter("if");
Enter("import"); (* pseudo keyword used by voc *)
Enter("import"); (* pseudo keyword used by voc *)
Enter("int");
Enter("int16"); (* pseudo keyword used by voc *)
Enter("int32"); (* pseudo keyword used by voc *)
Enter("int64"); (* pseudo keyword used by voc *)
Enter("int8"); (* pseudo keyword used by voc *)
Enter("long");
Enter("register");
Enter("return");
Enter("short");
Enter("signed");
Enter("sizeof");
Enter("size_t");
Enter("static");
Enter("struct");
Enter("switch");
Enter("typedef");
Enter("uint16"); (* pseudo keyword used by voc *)
Enter("uint32"); (* pseudo keyword used by voc *)
Enter("uint64"); (* pseudo keyword used by voc *)
Enter("uint8"); (* pseudo keyword used by voc *)
Enter("union");
Enter("unsigned");
Enter("void");

View file

@ -298,13 +298,7 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
PROCEDURE SizeCast(from, to: LONGINT);
BEGIN
IF (from # to) & ((from > OPM.CIntSize) OR (to # OPM.CIntSize)) THEN
CASE to OF
|1: OPM.WriteString("(SYSTEM_INT8)");
|2: OPM.WriteString("(SYSTEM_INT16)");
|4: OPM.WriteString("(SYSTEM_INT32)");
|8: OPM.WriteString("(SYSTEM_INT64)");
ELSE OPM.LogWStr("Unhandled case in OPC.SizeCast, to = "); OPM.LogWNum(to,1); OPM.LogWLn;
END
OPM.WriteString("(int"); OPM.WriteInt(to*8); OPM.WriteString(")")
END
END SizeCast;

View file

@ -2,19 +2,21 @@
#define SYSTEM__h
#if defined(_WIN64)
typedef long long SYSTEM_INT64;
typedef unsigned long long SYSTEM_CARD64;
typedef long long int64;
typedef unsigned long long uint64;
#else
typedef long SYSTEM_INT64;
typedef unsigned long SYSTEM_CARD64;
typedef long int64;
typedef unsigned long uint64;
#endif
typedef int SYSTEM_INT32;
typedef unsigned int SYSTEM_CARD32;
typedef short int SYSTEM_INT16;
typedef unsigned short int SYSTEM_CARD16;
typedef signed char SYSTEM_INT8;
typedef unsigned char SYSTEM_CARD8;
typedef int int32;
typedef unsigned int uint32;
typedef short int int16;
typedef unsigned short int uint16;
typedef signed char int8;
typedef unsigned char uint8;
#if (__SIZEOF_POINTER__ == 8) || defined(_WIN64) || defined(__LP64__)
#if defined(_WIN64)
@ -26,12 +28,30 @@ typedef unsigned char SYSTEM_CARD8;
typedef unsigned int size_t;
#endif
#define SYSTEM_ADRINT size_t
#define SYSTEM_ADDRESS size_t // Temporarily for bootstrap
#define _SIZE_T_DECLARED // For FreeBSD
#define _SIZE_T_DEFINED_ // For OpenBSD
void *memcpy(void *dest, const void *source, SYSTEM_ADRINT size);
void *memcpy(void *dest, const void *source, size_t size);
// Temporary while bootstrapping:
#define SYSTEM_INT8 int8
#define SYSTEM_INT16 int16
#define SYSTEM_INT32 int32
#define SYSTEM_INT64 int64
#define SYSTEM_ADDRESS size_t
#define U_SYSTEM_INT8 uint8
#define U_SYSTEM_INT16 uint16
#define U_SYSTEM_INT32 uint32
#define U_SYSTEM_INT64 uint64
#define U_int8 uint8
#define U_int16 uint16
#define U_int32 uint32
#define U_int64 uint64
@ -52,41 +72,53 @@ void *memcpy(void *dest, const void *source, SYSTEM_ADRINT size);
// Oberon types
typedef char BOOLEAN;
typedef unsigned char SYSTEM_BYTE;
typedef unsigned char CHAR;
typedef signed char SHORTINT;
typedef float REAL;
typedef double LONGREAL;
typedef void* SYSTEM_PTR;
// typedef char BOOLEAN;
// typedef unsigned char SYSTEM_BYTE;
// typedef unsigned char CHAR;
// typedef signed char SHORTINT;
// typedef float REAL;
// typedef double LONGREAL;
// typedef void* SYSTEM_PTR;
typedef int8 BOOLEAN;
typedef int8 SYSTEM_BYTE;
typedef uint8 U_SYSTEM_BYTE;
typedef uint8 CHAR;
typedef uint8 U_CHAR;
typedef int8 SHORTINT;
typedef uint8 U_SHORTINT;
typedef float REAL;
typedef double LONGREAL;
typedef void* SYSTEM_PTR;
typedef size_t SYSTEM_ADRINT;
// For 32 bit builds, the size of LONGINT depends on a make option:
#if (__SIZEOF_POINTER__ == 8) || defined(LARGE) || defined(_WIN64)
typedef int INTEGER; // INTEGER is 32 bit.
typedef long long LONGINT; // LONGINT is 64 bit. (long long is always 64 bits, while long can be 32 bits e.g. under MSC/MingW)
typedef unsigned int U_INTEGER;
typedef unsigned long long U_LONGINT;
typedef int32 INTEGER;
typedef int64 LONGINT;
typedef uint32 U_INTEGER;
typedef uint64 U_LONGINT;
#else
typedef short int INTEGER; // INTEGER is 16 bit.
typedef long LONGINT; // LONGINT is 32 bit.
typedef unsigned short int U_INTEGER;
typedef unsigned long U_LONGINT;
typedef int16 INTEGER;
typedef int32 LONGINT;
typedef uint16 U_INTEGER;
typedef uint32 U_LONGINT;
#endif
// Unsigned variants are for use by shift and rotate macros.
typedef unsigned char U_SYSTEM_BYTE;
typedef unsigned char U_CHAR;
typedef unsigned char U_SHORTINT;
typedef U_LONGINT SET;
typedef U_LONGINT U_SET;
typedef SYSTEM_CARD8 U_SYSTEM_INT8;
typedef SYSTEM_CARD16 U_SYSTEM_INT16;
typedef SYSTEM_CARD32 U_SYSTEM_INT32;
typedef SYSTEM_CARD64 U_SYSTEM_INT64;
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// OS Memory allocation interfaces are in PlatformXXX.Mod