From 7df022d94ec3fc4d3b66582fe8c97523b556da9e Mon Sep 17 00:00:00 2001 From: David Brown Date: Fri, 26 Aug 2016 18:59:50 +0100 Subject: [PATCH] Add SYSTEM types INT8 through INT64. Define LINT as derived type of SYSTEM.INT64. --- bootstrap/unix-44/OPC.c | 2 +- bootstrap/unix-44/OPT.c | 89 ++++++++++++++++++++++------------- bootstrap/unix-44/OPT.h | 2 +- bootstrap/unix-44/OPV.c | 4 ++ bootstrap/unix-44/Vishap.c | 2 +- bootstrap/unix-48/OPC.c | 2 +- bootstrap/unix-48/OPT.c | 89 ++++++++++++++++++++++------------- bootstrap/unix-48/OPT.h | 2 +- bootstrap/unix-48/OPV.c | 4 ++ bootstrap/unix-48/Vishap.c | 2 +- bootstrap/unix-88/OPC.c | 2 +- bootstrap/unix-88/OPT.c | 89 ++++++++++++++++++++++------------- bootstrap/unix-88/OPT.h | 2 +- bootstrap/unix-88/OPV.c | 4 ++ bootstrap/unix-88/Vishap.c | 2 +- bootstrap/windows-48/OPC.c | 2 +- bootstrap/windows-48/OPT.c | 89 ++++++++++++++++++++++------------- bootstrap/windows-48/OPT.h | 2 +- bootstrap/windows-48/OPV.c | 4 ++ bootstrap/windows-48/Vishap.c | 2 +- bootstrap/windows-88/OPC.c | 2 +- bootstrap/windows-88/OPT.c | 89 ++++++++++++++++++++++------------- bootstrap/windows-88/OPT.h | 2 +- bootstrap/windows-88/OPV.c | 4 ++ bootstrap/windows-88/Vishap.c | 2 +- src/compiler/OPC.Mod | 4 ++ src/compiler/OPT.Mod | 31 +++++++++--- src/compiler/OPV.Mod | 4 ++ src/compiler/Vishap.Mod | 2 +- 29 files changed, 344 insertions(+), 192 deletions(-) diff --git a/bootstrap/unix-44/OPC.c b/bootstrap/unix-44/OPC.c index fce9997f..02a24b4d 100644 --- a/bootstrap/unix-44/OPC.c +++ b/bootstrap/unix-44/OPC.c @@ -211,7 +211,7 @@ void OPC_Ident (OPT_Object obj) OPM_WriteStringVar((void*)OPM_modName, ((LONGINT)(32))); } OPM_Write('_'); - } else if ((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_bytetyp->strobj) { + } else if ((((((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_int8typ->strobj) || obj == OPT_int16typ->strobj) || obj == OPT_int32typ->strobj) || obj == OPT_int64typ->strobj) || obj == OPT_bytetyp->strobj) { OPM_WriteString((CHAR*)"SYSTEM_", (LONGINT)8); } OPM_WriteStringVar((void*)obj->name, ((LONGINT)(256))); diff --git a/bootstrap/unix-44/OPT.c b/bootstrap/unix-44/OPT.c index 4b76312b..cbd147e6 100644 --- a/bootstrap/unix-44/OPT.c +++ b/bootstrap/unix-44/OPT.c @@ -83,7 +83,8 @@ typedef export void (*OPT_typSize)(OPT_Struct); export OPT_Object OPT_topScope; -export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +static OPT_Object OPT_LIntObj; export SHORTINT OPT_nofGmod; export OPT_Object OPT_GlbMod[64]; export OPS_Name OPT_SelfName; @@ -105,6 +106,7 @@ export void OPT_Close (void); export void OPT_CloseScope (void); static void OPT_DebugStruct (OPT_Struct btyp); static void OPT_EnterBoolConst (OPS_Name name, LONGINT value); +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj); static void OPT_EnterProc (OPS_Name name, INTEGER num); static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res); export void OPT_Export (BOOLEAN *ext, BOOLEAN *new); @@ -465,21 +467,21 @@ void OPT_IdFPrint (OPT_Struct typ) } } -static struct FPrintStr__12 { +static struct FPrintStr__13 { LONGINT *pbfp, *pvfp; - struct FPrintStr__12 *lnk; -} *FPrintStr__12_s; + struct FPrintStr__13 *lnk; +} *FPrintStr__13_s; -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr); -static void FPrintTProcs__17 (OPT_Object obj); +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible); +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr); +static void FPrintTProcs__18 (OPT_Object obj); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr) { LONGINT i, j, n; OPT_Struct btyp = NIL; if (typ->comp == 4) { - FPrintFlds__13(typ->link, adr, 0); + FPrintFlds__14(typ->link, adr, 0); } else if (typ->comp == 2) { btyp = typ->BaseTyp; n = typ->n; @@ -489,53 +491,53 @@ static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) } if (btyp->form == 13 || btyp->comp == 4) { j = OPT_nofhdfld; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); if (j != OPT_nofhdfld) { i = 1; while ((i < n && OPT_nofhdfld <= 2048)) { adr += btyp->size; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); i += 1; } } } } else if (typ->form == 13 || __STRCMP(fld->name, "@ptr") == 0) { - OPM_FPrint(&*FPrintStr__12_s->pvfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pvfp, adr); + OPM_FPrint(&*FPrintStr__13_s->pvfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pvfp, adr); OPT_nofhdfld += 1; } } -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible) +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible) { while ((fld != NIL && fld->mode == 4)) { if ((fld->vis != 0 && visible)) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->vis); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)fld->name, ((LONGINT)(256))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->adr); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->vis); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)fld->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->adr); OPT_FPrintStr(fld->typ); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->typ->pbfp); - OPM_FPrint(&*FPrintStr__12_s->pvfp, fld->typ->pvfp); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->typ->pbfp); + OPM_FPrint(&*FPrintStr__13_s->pvfp, fld->typ->pvfp); } else { - FPrintHdFld__15(fld->typ, fld, fld->adr + adr); + FPrintHdFld__16(fld->typ, fld, fld->adr + adr); } fld = fld->link; } } -static void FPrintTProcs__17 (OPT_Object obj) +static void FPrintTProcs__18 (OPT_Object obj) { if (obj != NIL) { - FPrintTProcs__17(obj->left); + FPrintTProcs__18(obj->left); if (obj->mode == 13) { if (obj->vis != 0) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, __ASHR(obj->adr, 16)); - OPT_FPrintSign(&*FPrintStr__12_s->pbfp, obj->typ, obj->link); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)obj->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, __ASHR(obj->adr, 16)); + OPT_FPrintSign(&*FPrintStr__13_s->pbfp, obj->typ, obj->link); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)obj->name, ((LONGINT)(256))); } } - FPrintTProcs__17(obj->right); + FPrintTProcs__18(obj->right); } } @@ -545,11 +547,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPT_Struct btyp = NIL; OPT_Object strobj = NIL, bstrobj = NIL; LONGINT pbfp, pvfp; - struct FPrintStr__12 _s; + struct FPrintStr__13 _s; _s.pbfp = &pbfp; _s.pvfp = &pvfp; - _s.lnk = FPrintStr__12_s; - FPrintStr__12_s = &_s; + _s.lnk = FPrintStr__13_s; + FPrintStr__13_s = &_s; if (!typ->fpdone) { OPT_IdFPrint(typ); pbfp = typ->idfp; @@ -586,11 +588,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPM_FPrint(&pvfp, typ->align); OPM_FPrint(&pvfp, typ->n); OPT_nofhdfld = 0; - FPrintFlds__13(typ->link, ((LONGINT)(0)), 1); + FPrintFlds__14(typ->link, ((LONGINT)(0)), 1); if (OPT_nofhdfld > 2048) { OPM_Mark(225, typ->txtpos); } - FPrintTProcs__17(typ->link); + FPrintTProcs__18(typ->link); OPM_FPrint(&pvfp, pbfp); strobj = typ->strobj; if (strobj == NIL || strobj->name[0] == 0x00) { @@ -600,7 +602,7 @@ void OPT_FPrintStr (OPT_Struct typ) typ->pbfp = pbfp; typ->pvfp = pvfp; } - FPrintStr__12_s = _s.lnk; + FPrintStr__13_s = _s.lnk; } void OPT_FPrintObj (OPT_Object obj) @@ -1697,6 +1699,15 @@ static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res = typ; } +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj) +{ + OPS_Name name__copy; + __DUPARR(name, OPS_Name); + OPT_Insert(name, &*obj); + (*obj)->mode = 5; + (*obj)->typ = typ; +} + static void OPT_EnterProc (OPS_Name name, INTEGER num) { OPT_Object obj = NIL; @@ -1719,6 +1730,10 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_inttyp); P(OPT_linttyp); P(OPT_ainttyp); + P(OPT_int8typ); + P(OPT_int16typ); + P(OPT_int32typ); + P(OPT_int64typ); P(OPT_realtyp); P(OPT_lrltyp); P(OPT_settyp); @@ -1726,6 +1741,7 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_niltyp); P(OPT_notyp); P(OPT_sysptrtyp); + P(OPT_LIntObj); __ENUMP(OPT_GlbMod, 64, P); P(OPT_universe); P(OPT_syslink); @@ -1789,13 +1805,17 @@ export void *OPT__init(void) OPT_OpenScope(0, NIL); OPM_errpos = 0; OPT_InitStruct(&OPT_undftyp, 0); + OPT_undftyp->BaseTyp = OPT_undftyp; OPT_InitStruct(&OPT_notyp, 12); OPT_InitStruct(&OPT_stringtyp, 10); OPT_InitStruct(&OPT_niltyp, 11); - OPT_undftyp->BaseTyp = OPT_undftyp; OPT_EnterTyp((CHAR*)"BYTE", 1, OPM_ByteSize, &OPT_bytetyp); OPT_EnterTyp((CHAR*)"PTR", 13, OPM_PointerSize, &OPT_sysptrtyp); OPT_EnterTyp((CHAR*)"ADRINT", 5, OPM_LIntSize, &OPT_ainttyp); + OPT_EnterTyp((CHAR*)"INT8", 5, 1, &OPT_int8typ); + OPT_EnterTyp((CHAR*)"INT16", 5, 2, &OPT_int16typ); + OPT_EnterTyp((CHAR*)"INT32", 5, 4, &OPT_int32typ); + OPT_EnterTyp((CHAR*)"INT64", 5, 8, &OPT_int64typ); OPT_EnterProc((CHAR*)"ADR", 20); OPT_EnterProc((CHAR*)"CC", 21); OPT_EnterProc((CHAR*)"LSH", 22); @@ -1819,6 +1839,7 @@ export void *OPT__init(void) OPT_EnterTyp((CHAR*)"LONGINT", 6, OPM_LIntSize, &OPT_linttyp); OPT_EnterTyp((CHAR*)"LONGREAL", 8, OPM_LRealSize, &OPT_lrltyp); OPT_EnterTyp((CHAR*)"SHORTINT", 4, OPM_SIntSize, &OPT_sinttyp); + OPT_EnterDerivedType((CHAR*)"LINT", OPT_int64typ, &OPT_LIntObj); OPT_EnterBoolConst((CHAR*)"FALSE", ((LONGINT)(0))); OPT_EnterBoolConst((CHAR*)"TRUE", ((LONGINT)(1))); OPT_EnterProc((CHAR*)"HALT", 0); diff --git a/bootstrap/unix-44/OPT.h b/bootstrap/unix-44/OPT.h index 7187f687..c4975398 100644 --- a/bootstrap/unix-44/OPT.h +++ b/bootstrap/unix-44/OPT.h @@ -67,7 +67,7 @@ typedef import void (*OPT_typSize)(OPT_Struct); import OPT_Object OPT_topScope; -import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; import SHORTINT OPT_nofGmod; import OPT_Object OPT_GlbMod[64]; import OPS_Name OPT_SelfName; diff --git a/bootstrap/unix-44/OPV.c b/bootstrap/unix-44/OPV.c index 8b98e5f9..2172dee5 100644 --- a/bootstrap/unix-44/OPV.c +++ b/bootstrap/unix-44/OPV.c @@ -285,6 +285,10 @@ void OPV_AdrAndSize (OPT_Object topScope) OPT_inttyp->strobj->linkadr = 2; OPT_linttyp->strobj->linkadr = 2; OPT_ainttyp->strobj->linkadr = 2; + OPT_int8typ->strobj->linkadr = 2; + OPT_int16typ->strobj->linkadr = 2; + OPT_int32typ->strobj->linkadr = 2; + OPT_int64typ->strobj->linkadr = 2; OPT_lrltyp->strobj->linkadr = 2; OPT_sinttyp->strobj->linkadr = 2; OPT_booltyp->strobj->linkadr = 2; diff --git a/bootstrap/unix-44/Vishap.c b/bootstrap/unix-44/Vishap.c index 0feff79c..66a97f5d 100644 --- a/bootstrap/unix-44/Vishap.c +++ b/bootstrap/unix-44/Vishap.c @@ -81,7 +81,7 @@ static void Vishap_PropagateElementaryTypeSizes (void) OPT_realtyp->size = OPM_RealSize; OPT_inttyp->size = OPM_IntSize; OPT_linttyp->size = OPM_LIntSize; - OPT_ainttyp->size = OPM_LIntSize; + OPT_ainttyp->size = OPM_PointerSize; OPT_lrltyp->size = OPM_LRealSize; OPT_sinttyp->size = OPM_SIntSize; OPT_booltyp->size = OPM_BoolSize; diff --git a/bootstrap/unix-48/OPC.c b/bootstrap/unix-48/OPC.c index fce9997f..02a24b4d 100644 --- a/bootstrap/unix-48/OPC.c +++ b/bootstrap/unix-48/OPC.c @@ -211,7 +211,7 @@ void OPC_Ident (OPT_Object obj) OPM_WriteStringVar((void*)OPM_modName, ((LONGINT)(32))); } OPM_Write('_'); - } else if ((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_bytetyp->strobj) { + } else if ((((((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_int8typ->strobj) || obj == OPT_int16typ->strobj) || obj == OPT_int32typ->strobj) || obj == OPT_int64typ->strobj) || obj == OPT_bytetyp->strobj) { OPM_WriteString((CHAR*)"SYSTEM_", (LONGINT)8); } OPM_WriteStringVar((void*)obj->name, ((LONGINT)(256))); diff --git a/bootstrap/unix-48/OPT.c b/bootstrap/unix-48/OPT.c index 4b76312b..cbd147e6 100644 --- a/bootstrap/unix-48/OPT.c +++ b/bootstrap/unix-48/OPT.c @@ -83,7 +83,8 @@ typedef export void (*OPT_typSize)(OPT_Struct); export OPT_Object OPT_topScope; -export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +static OPT_Object OPT_LIntObj; export SHORTINT OPT_nofGmod; export OPT_Object OPT_GlbMod[64]; export OPS_Name OPT_SelfName; @@ -105,6 +106,7 @@ export void OPT_Close (void); export void OPT_CloseScope (void); static void OPT_DebugStruct (OPT_Struct btyp); static void OPT_EnterBoolConst (OPS_Name name, LONGINT value); +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj); static void OPT_EnterProc (OPS_Name name, INTEGER num); static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res); export void OPT_Export (BOOLEAN *ext, BOOLEAN *new); @@ -465,21 +467,21 @@ void OPT_IdFPrint (OPT_Struct typ) } } -static struct FPrintStr__12 { +static struct FPrintStr__13 { LONGINT *pbfp, *pvfp; - struct FPrintStr__12 *lnk; -} *FPrintStr__12_s; + struct FPrintStr__13 *lnk; +} *FPrintStr__13_s; -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr); -static void FPrintTProcs__17 (OPT_Object obj); +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible); +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr); +static void FPrintTProcs__18 (OPT_Object obj); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr) { LONGINT i, j, n; OPT_Struct btyp = NIL; if (typ->comp == 4) { - FPrintFlds__13(typ->link, adr, 0); + FPrintFlds__14(typ->link, adr, 0); } else if (typ->comp == 2) { btyp = typ->BaseTyp; n = typ->n; @@ -489,53 +491,53 @@ static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) } if (btyp->form == 13 || btyp->comp == 4) { j = OPT_nofhdfld; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); if (j != OPT_nofhdfld) { i = 1; while ((i < n && OPT_nofhdfld <= 2048)) { adr += btyp->size; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); i += 1; } } } } else if (typ->form == 13 || __STRCMP(fld->name, "@ptr") == 0) { - OPM_FPrint(&*FPrintStr__12_s->pvfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pvfp, adr); + OPM_FPrint(&*FPrintStr__13_s->pvfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pvfp, adr); OPT_nofhdfld += 1; } } -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible) +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible) { while ((fld != NIL && fld->mode == 4)) { if ((fld->vis != 0 && visible)) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->vis); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)fld->name, ((LONGINT)(256))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->adr); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->vis); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)fld->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->adr); OPT_FPrintStr(fld->typ); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->typ->pbfp); - OPM_FPrint(&*FPrintStr__12_s->pvfp, fld->typ->pvfp); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->typ->pbfp); + OPM_FPrint(&*FPrintStr__13_s->pvfp, fld->typ->pvfp); } else { - FPrintHdFld__15(fld->typ, fld, fld->adr + adr); + FPrintHdFld__16(fld->typ, fld, fld->adr + adr); } fld = fld->link; } } -static void FPrintTProcs__17 (OPT_Object obj) +static void FPrintTProcs__18 (OPT_Object obj) { if (obj != NIL) { - FPrintTProcs__17(obj->left); + FPrintTProcs__18(obj->left); if (obj->mode == 13) { if (obj->vis != 0) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, __ASHR(obj->adr, 16)); - OPT_FPrintSign(&*FPrintStr__12_s->pbfp, obj->typ, obj->link); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)obj->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, __ASHR(obj->adr, 16)); + OPT_FPrintSign(&*FPrintStr__13_s->pbfp, obj->typ, obj->link); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)obj->name, ((LONGINT)(256))); } } - FPrintTProcs__17(obj->right); + FPrintTProcs__18(obj->right); } } @@ -545,11 +547,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPT_Struct btyp = NIL; OPT_Object strobj = NIL, bstrobj = NIL; LONGINT pbfp, pvfp; - struct FPrintStr__12 _s; + struct FPrintStr__13 _s; _s.pbfp = &pbfp; _s.pvfp = &pvfp; - _s.lnk = FPrintStr__12_s; - FPrintStr__12_s = &_s; + _s.lnk = FPrintStr__13_s; + FPrintStr__13_s = &_s; if (!typ->fpdone) { OPT_IdFPrint(typ); pbfp = typ->idfp; @@ -586,11 +588,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPM_FPrint(&pvfp, typ->align); OPM_FPrint(&pvfp, typ->n); OPT_nofhdfld = 0; - FPrintFlds__13(typ->link, ((LONGINT)(0)), 1); + FPrintFlds__14(typ->link, ((LONGINT)(0)), 1); if (OPT_nofhdfld > 2048) { OPM_Mark(225, typ->txtpos); } - FPrintTProcs__17(typ->link); + FPrintTProcs__18(typ->link); OPM_FPrint(&pvfp, pbfp); strobj = typ->strobj; if (strobj == NIL || strobj->name[0] == 0x00) { @@ -600,7 +602,7 @@ void OPT_FPrintStr (OPT_Struct typ) typ->pbfp = pbfp; typ->pvfp = pvfp; } - FPrintStr__12_s = _s.lnk; + FPrintStr__13_s = _s.lnk; } void OPT_FPrintObj (OPT_Object obj) @@ -1697,6 +1699,15 @@ static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res = typ; } +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj) +{ + OPS_Name name__copy; + __DUPARR(name, OPS_Name); + OPT_Insert(name, &*obj); + (*obj)->mode = 5; + (*obj)->typ = typ; +} + static void OPT_EnterProc (OPS_Name name, INTEGER num) { OPT_Object obj = NIL; @@ -1719,6 +1730,10 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_inttyp); P(OPT_linttyp); P(OPT_ainttyp); + P(OPT_int8typ); + P(OPT_int16typ); + P(OPT_int32typ); + P(OPT_int64typ); P(OPT_realtyp); P(OPT_lrltyp); P(OPT_settyp); @@ -1726,6 +1741,7 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_niltyp); P(OPT_notyp); P(OPT_sysptrtyp); + P(OPT_LIntObj); __ENUMP(OPT_GlbMod, 64, P); P(OPT_universe); P(OPT_syslink); @@ -1789,13 +1805,17 @@ export void *OPT__init(void) OPT_OpenScope(0, NIL); OPM_errpos = 0; OPT_InitStruct(&OPT_undftyp, 0); + OPT_undftyp->BaseTyp = OPT_undftyp; OPT_InitStruct(&OPT_notyp, 12); OPT_InitStruct(&OPT_stringtyp, 10); OPT_InitStruct(&OPT_niltyp, 11); - OPT_undftyp->BaseTyp = OPT_undftyp; OPT_EnterTyp((CHAR*)"BYTE", 1, OPM_ByteSize, &OPT_bytetyp); OPT_EnterTyp((CHAR*)"PTR", 13, OPM_PointerSize, &OPT_sysptrtyp); OPT_EnterTyp((CHAR*)"ADRINT", 5, OPM_LIntSize, &OPT_ainttyp); + OPT_EnterTyp((CHAR*)"INT8", 5, 1, &OPT_int8typ); + OPT_EnterTyp((CHAR*)"INT16", 5, 2, &OPT_int16typ); + OPT_EnterTyp((CHAR*)"INT32", 5, 4, &OPT_int32typ); + OPT_EnterTyp((CHAR*)"INT64", 5, 8, &OPT_int64typ); OPT_EnterProc((CHAR*)"ADR", 20); OPT_EnterProc((CHAR*)"CC", 21); OPT_EnterProc((CHAR*)"LSH", 22); @@ -1819,6 +1839,7 @@ export void *OPT__init(void) OPT_EnterTyp((CHAR*)"LONGINT", 6, OPM_LIntSize, &OPT_linttyp); OPT_EnterTyp((CHAR*)"LONGREAL", 8, OPM_LRealSize, &OPT_lrltyp); OPT_EnterTyp((CHAR*)"SHORTINT", 4, OPM_SIntSize, &OPT_sinttyp); + OPT_EnterDerivedType((CHAR*)"LINT", OPT_int64typ, &OPT_LIntObj); OPT_EnterBoolConst((CHAR*)"FALSE", ((LONGINT)(0))); OPT_EnterBoolConst((CHAR*)"TRUE", ((LONGINT)(1))); OPT_EnterProc((CHAR*)"HALT", 0); diff --git a/bootstrap/unix-48/OPT.h b/bootstrap/unix-48/OPT.h index 7187f687..c4975398 100644 --- a/bootstrap/unix-48/OPT.h +++ b/bootstrap/unix-48/OPT.h @@ -67,7 +67,7 @@ typedef import void (*OPT_typSize)(OPT_Struct); import OPT_Object OPT_topScope; -import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; import SHORTINT OPT_nofGmod; import OPT_Object OPT_GlbMod[64]; import OPS_Name OPT_SelfName; diff --git a/bootstrap/unix-48/OPV.c b/bootstrap/unix-48/OPV.c index 8b98e5f9..2172dee5 100644 --- a/bootstrap/unix-48/OPV.c +++ b/bootstrap/unix-48/OPV.c @@ -285,6 +285,10 @@ void OPV_AdrAndSize (OPT_Object topScope) OPT_inttyp->strobj->linkadr = 2; OPT_linttyp->strobj->linkadr = 2; OPT_ainttyp->strobj->linkadr = 2; + OPT_int8typ->strobj->linkadr = 2; + OPT_int16typ->strobj->linkadr = 2; + OPT_int32typ->strobj->linkadr = 2; + OPT_int64typ->strobj->linkadr = 2; OPT_lrltyp->strobj->linkadr = 2; OPT_sinttyp->strobj->linkadr = 2; OPT_booltyp->strobj->linkadr = 2; diff --git a/bootstrap/unix-48/Vishap.c b/bootstrap/unix-48/Vishap.c index 0feff79c..66a97f5d 100644 --- a/bootstrap/unix-48/Vishap.c +++ b/bootstrap/unix-48/Vishap.c @@ -81,7 +81,7 @@ static void Vishap_PropagateElementaryTypeSizes (void) OPT_realtyp->size = OPM_RealSize; OPT_inttyp->size = OPM_IntSize; OPT_linttyp->size = OPM_LIntSize; - OPT_ainttyp->size = OPM_LIntSize; + OPT_ainttyp->size = OPM_PointerSize; OPT_lrltyp->size = OPM_LRealSize; OPT_sinttyp->size = OPM_SIntSize; OPT_booltyp->size = OPM_BoolSize; diff --git a/bootstrap/unix-88/OPC.c b/bootstrap/unix-88/OPC.c index 7e9ddb90..0813dca9 100644 --- a/bootstrap/unix-88/OPC.c +++ b/bootstrap/unix-88/OPC.c @@ -212,7 +212,7 @@ void OPC_Ident (OPT_Object obj) OPM_WriteStringVar((void*)OPM_modName, ((LONGINT)(32))); } OPM_Write('_'); - } else if ((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_bytetyp->strobj) { + } else if ((((((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_int8typ->strobj) || obj == OPT_int16typ->strobj) || obj == OPT_int32typ->strobj) || obj == OPT_int64typ->strobj) || obj == OPT_bytetyp->strobj) { OPM_WriteString((CHAR*)"SYSTEM_", (LONGINT)8); } OPM_WriteStringVar((void*)obj->name, ((LONGINT)(256))); diff --git a/bootstrap/unix-88/OPT.c b/bootstrap/unix-88/OPT.c index daf5051d..20234e22 100644 --- a/bootstrap/unix-88/OPT.c +++ b/bootstrap/unix-88/OPT.c @@ -84,7 +84,8 @@ typedef export void (*OPT_typSize)(OPT_Struct); export OPT_Object OPT_topScope; -export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +static OPT_Object OPT_LIntObj; export SHORTINT OPT_nofGmod; export OPT_Object OPT_GlbMod[64]; export OPS_Name OPT_SelfName; @@ -106,6 +107,7 @@ export void OPT_Close (void); export void OPT_CloseScope (void); static void OPT_DebugStruct (OPT_Struct btyp); static void OPT_EnterBoolConst (OPS_Name name, LONGINT value); +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj); static void OPT_EnterProc (OPS_Name name, INTEGER num); static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res); export void OPT_Export (BOOLEAN *ext, BOOLEAN *new); @@ -466,21 +468,21 @@ void OPT_IdFPrint (OPT_Struct typ) } } -static struct FPrintStr__12 { +static struct FPrintStr__13 { LONGINT *pbfp, *pvfp; - struct FPrintStr__12 *lnk; -} *FPrintStr__12_s; + struct FPrintStr__13 *lnk; +} *FPrintStr__13_s; -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr); -static void FPrintTProcs__17 (OPT_Object obj); +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible); +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr); +static void FPrintTProcs__18 (OPT_Object obj); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr) { LONGINT i, j, n; OPT_Struct btyp = NIL; if (typ->comp == 4) { - FPrintFlds__13(typ->link, adr, 0); + FPrintFlds__14(typ->link, adr, 0); } else if (typ->comp == 2) { btyp = typ->BaseTyp; n = typ->n; @@ -490,53 +492,53 @@ static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) } if (btyp->form == 13 || btyp->comp == 4) { j = OPT_nofhdfld; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); if (j != OPT_nofhdfld) { i = 1; while ((i < n && OPT_nofhdfld <= 2048)) { adr += btyp->size; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); i += 1; } } } } else if (typ->form == 13 || __STRCMP(fld->name, "@ptr") == 0) { - OPM_FPrint(&*FPrintStr__12_s->pvfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pvfp, adr); + OPM_FPrint(&*FPrintStr__13_s->pvfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pvfp, adr); OPT_nofhdfld += 1; } } -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible) +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible) { while ((fld != NIL && fld->mode == 4)) { if ((fld->vis != 0 && visible)) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->vis); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)fld->name, ((LONGINT)(256))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->adr); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->vis); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)fld->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->adr); OPT_FPrintStr(fld->typ); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->typ->pbfp); - OPM_FPrint(&*FPrintStr__12_s->pvfp, fld->typ->pvfp); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->typ->pbfp); + OPM_FPrint(&*FPrintStr__13_s->pvfp, fld->typ->pvfp); } else { - FPrintHdFld__15(fld->typ, fld, fld->adr + adr); + FPrintHdFld__16(fld->typ, fld, fld->adr + adr); } fld = fld->link; } } -static void FPrintTProcs__17 (OPT_Object obj) +static void FPrintTProcs__18 (OPT_Object obj) { if (obj != NIL) { - FPrintTProcs__17(obj->left); + FPrintTProcs__18(obj->left); if (obj->mode == 13) { if (obj->vis != 0) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, __ASHR(obj->adr, 16)); - OPT_FPrintSign(&*FPrintStr__12_s->pbfp, obj->typ, obj->link); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)obj->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, __ASHR(obj->adr, 16)); + OPT_FPrintSign(&*FPrintStr__13_s->pbfp, obj->typ, obj->link); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)obj->name, ((LONGINT)(256))); } } - FPrintTProcs__17(obj->right); + FPrintTProcs__18(obj->right); } } @@ -546,11 +548,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPT_Struct btyp = NIL; OPT_Object strobj = NIL, bstrobj = NIL; LONGINT pbfp, pvfp; - struct FPrintStr__12 _s; + struct FPrintStr__13 _s; _s.pbfp = &pbfp; _s.pvfp = &pvfp; - _s.lnk = FPrintStr__12_s; - FPrintStr__12_s = &_s; + _s.lnk = FPrintStr__13_s; + FPrintStr__13_s = &_s; if (!typ->fpdone) { OPT_IdFPrint(typ); pbfp = typ->idfp; @@ -587,11 +589,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPM_FPrint(&pvfp, typ->align); OPM_FPrint(&pvfp, typ->n); OPT_nofhdfld = 0; - FPrintFlds__13(typ->link, ((LONGINT)(0)), 1); + FPrintFlds__14(typ->link, ((LONGINT)(0)), 1); if (OPT_nofhdfld > 2048) { OPM_Mark(225, typ->txtpos); } - FPrintTProcs__17(typ->link); + FPrintTProcs__18(typ->link); OPM_FPrint(&pvfp, pbfp); strobj = typ->strobj; if (strobj == NIL || strobj->name[0] == 0x00) { @@ -601,7 +603,7 @@ void OPT_FPrintStr (OPT_Struct typ) typ->pbfp = pbfp; typ->pvfp = pvfp; } - FPrintStr__12_s = _s.lnk; + FPrintStr__13_s = _s.lnk; } void OPT_FPrintObj (OPT_Object obj) @@ -1698,6 +1700,15 @@ static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res = typ; } +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj) +{ + OPS_Name name__copy; + __DUPARR(name, OPS_Name); + OPT_Insert(name, &*obj); + (*obj)->mode = 5; + (*obj)->typ = typ; +} + static void OPT_EnterProc (OPS_Name name, INTEGER num) { OPT_Object obj = NIL; @@ -1720,6 +1731,10 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_inttyp); P(OPT_linttyp); P(OPT_ainttyp); + P(OPT_int8typ); + P(OPT_int16typ); + P(OPT_int32typ); + P(OPT_int64typ); P(OPT_realtyp); P(OPT_lrltyp); P(OPT_settyp); @@ -1727,6 +1742,7 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_niltyp); P(OPT_notyp); P(OPT_sysptrtyp); + P(OPT_LIntObj); __ENUMP(OPT_GlbMod, 64, P); P(OPT_universe); P(OPT_syslink); @@ -1790,13 +1806,17 @@ export void *OPT__init(void) OPT_OpenScope(0, NIL); OPM_errpos = 0; OPT_InitStruct(&OPT_undftyp, 0); + OPT_undftyp->BaseTyp = OPT_undftyp; OPT_InitStruct(&OPT_notyp, 12); OPT_InitStruct(&OPT_stringtyp, 10); OPT_InitStruct(&OPT_niltyp, 11); - OPT_undftyp->BaseTyp = OPT_undftyp; OPT_EnterTyp((CHAR*)"BYTE", 1, OPM_ByteSize, &OPT_bytetyp); OPT_EnterTyp((CHAR*)"PTR", 13, OPM_PointerSize, &OPT_sysptrtyp); OPT_EnterTyp((CHAR*)"ADRINT", 5, OPM_LIntSize, &OPT_ainttyp); + OPT_EnterTyp((CHAR*)"INT8", 5, 1, &OPT_int8typ); + OPT_EnterTyp((CHAR*)"INT16", 5, 2, &OPT_int16typ); + OPT_EnterTyp((CHAR*)"INT32", 5, 4, &OPT_int32typ); + OPT_EnterTyp((CHAR*)"INT64", 5, 8, &OPT_int64typ); OPT_EnterProc((CHAR*)"ADR", 20); OPT_EnterProc((CHAR*)"CC", 21); OPT_EnterProc((CHAR*)"LSH", 22); @@ -1820,6 +1840,7 @@ export void *OPT__init(void) OPT_EnterTyp((CHAR*)"LONGINT", 6, OPM_LIntSize, &OPT_linttyp); OPT_EnterTyp((CHAR*)"LONGREAL", 8, OPM_LRealSize, &OPT_lrltyp); OPT_EnterTyp((CHAR*)"SHORTINT", 4, OPM_SIntSize, &OPT_sinttyp); + OPT_EnterDerivedType((CHAR*)"LINT", OPT_int64typ, &OPT_LIntObj); OPT_EnterBoolConst((CHAR*)"FALSE", ((LONGINT)(0))); OPT_EnterBoolConst((CHAR*)"TRUE", ((LONGINT)(1))); OPT_EnterProc((CHAR*)"HALT", 0); diff --git a/bootstrap/unix-88/OPT.h b/bootstrap/unix-88/OPT.h index 550ea673..f1865573 100644 --- a/bootstrap/unix-88/OPT.h +++ b/bootstrap/unix-88/OPT.h @@ -68,7 +68,7 @@ typedef import void (*OPT_typSize)(OPT_Struct); import OPT_Object OPT_topScope; -import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; import SHORTINT OPT_nofGmod; import OPT_Object OPT_GlbMod[64]; import OPS_Name OPT_SelfName; diff --git a/bootstrap/unix-88/OPV.c b/bootstrap/unix-88/OPV.c index fe8d848a..638891f1 100644 --- a/bootstrap/unix-88/OPV.c +++ b/bootstrap/unix-88/OPV.c @@ -286,6 +286,10 @@ void OPV_AdrAndSize (OPT_Object topScope) OPT_inttyp->strobj->linkadr = 2; OPT_linttyp->strobj->linkadr = 2; OPT_ainttyp->strobj->linkadr = 2; + OPT_int8typ->strobj->linkadr = 2; + OPT_int16typ->strobj->linkadr = 2; + OPT_int32typ->strobj->linkadr = 2; + OPT_int64typ->strobj->linkadr = 2; OPT_lrltyp->strobj->linkadr = 2; OPT_sinttyp->strobj->linkadr = 2; OPT_booltyp->strobj->linkadr = 2; diff --git a/bootstrap/unix-88/Vishap.c b/bootstrap/unix-88/Vishap.c index 7e1eba78..a487fe66 100644 --- a/bootstrap/unix-88/Vishap.c +++ b/bootstrap/unix-88/Vishap.c @@ -82,7 +82,7 @@ static void Vishap_PropagateElementaryTypeSizes (void) OPT_realtyp->size = OPM_RealSize; OPT_inttyp->size = OPM_IntSize; OPT_linttyp->size = OPM_LIntSize; - OPT_ainttyp->size = OPM_LIntSize; + OPT_ainttyp->size = OPM_PointerSize; OPT_lrltyp->size = OPM_LRealSize; OPT_sinttyp->size = OPM_SIntSize; OPT_booltyp->size = OPM_BoolSize; diff --git a/bootstrap/windows-48/OPC.c b/bootstrap/windows-48/OPC.c index fce9997f..02a24b4d 100644 --- a/bootstrap/windows-48/OPC.c +++ b/bootstrap/windows-48/OPC.c @@ -211,7 +211,7 @@ void OPC_Ident (OPT_Object obj) OPM_WriteStringVar((void*)OPM_modName, ((LONGINT)(32))); } OPM_Write('_'); - } else if ((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_bytetyp->strobj) { + } else if ((((((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_int8typ->strobj) || obj == OPT_int16typ->strobj) || obj == OPT_int32typ->strobj) || obj == OPT_int64typ->strobj) || obj == OPT_bytetyp->strobj) { OPM_WriteString((CHAR*)"SYSTEM_", (LONGINT)8); } OPM_WriteStringVar((void*)obj->name, ((LONGINT)(256))); diff --git a/bootstrap/windows-48/OPT.c b/bootstrap/windows-48/OPT.c index 4b76312b..cbd147e6 100644 --- a/bootstrap/windows-48/OPT.c +++ b/bootstrap/windows-48/OPT.c @@ -83,7 +83,8 @@ typedef export void (*OPT_typSize)(OPT_Struct); export OPT_Object OPT_topScope; -export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +static OPT_Object OPT_LIntObj; export SHORTINT OPT_nofGmod; export OPT_Object OPT_GlbMod[64]; export OPS_Name OPT_SelfName; @@ -105,6 +106,7 @@ export void OPT_Close (void); export void OPT_CloseScope (void); static void OPT_DebugStruct (OPT_Struct btyp); static void OPT_EnterBoolConst (OPS_Name name, LONGINT value); +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj); static void OPT_EnterProc (OPS_Name name, INTEGER num); static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res); export void OPT_Export (BOOLEAN *ext, BOOLEAN *new); @@ -465,21 +467,21 @@ void OPT_IdFPrint (OPT_Struct typ) } } -static struct FPrintStr__12 { +static struct FPrintStr__13 { LONGINT *pbfp, *pvfp; - struct FPrintStr__12 *lnk; -} *FPrintStr__12_s; + struct FPrintStr__13 *lnk; +} *FPrintStr__13_s; -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr); -static void FPrintTProcs__17 (OPT_Object obj); +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible); +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr); +static void FPrintTProcs__18 (OPT_Object obj); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr) { LONGINT i, j, n; OPT_Struct btyp = NIL; if (typ->comp == 4) { - FPrintFlds__13(typ->link, adr, 0); + FPrintFlds__14(typ->link, adr, 0); } else if (typ->comp == 2) { btyp = typ->BaseTyp; n = typ->n; @@ -489,53 +491,53 @@ static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) } if (btyp->form == 13 || btyp->comp == 4) { j = OPT_nofhdfld; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); if (j != OPT_nofhdfld) { i = 1; while ((i < n && OPT_nofhdfld <= 2048)) { adr += btyp->size; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); i += 1; } } } } else if (typ->form == 13 || __STRCMP(fld->name, "@ptr") == 0) { - OPM_FPrint(&*FPrintStr__12_s->pvfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pvfp, adr); + OPM_FPrint(&*FPrintStr__13_s->pvfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pvfp, adr); OPT_nofhdfld += 1; } } -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible) +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible) { while ((fld != NIL && fld->mode == 4)) { if ((fld->vis != 0 && visible)) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->vis); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)fld->name, ((LONGINT)(256))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->adr); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->vis); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)fld->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->adr); OPT_FPrintStr(fld->typ); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->typ->pbfp); - OPM_FPrint(&*FPrintStr__12_s->pvfp, fld->typ->pvfp); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->typ->pbfp); + OPM_FPrint(&*FPrintStr__13_s->pvfp, fld->typ->pvfp); } else { - FPrintHdFld__15(fld->typ, fld, fld->adr + adr); + FPrintHdFld__16(fld->typ, fld, fld->adr + adr); } fld = fld->link; } } -static void FPrintTProcs__17 (OPT_Object obj) +static void FPrintTProcs__18 (OPT_Object obj) { if (obj != NIL) { - FPrintTProcs__17(obj->left); + FPrintTProcs__18(obj->left); if (obj->mode == 13) { if (obj->vis != 0) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, __ASHR(obj->adr, 16)); - OPT_FPrintSign(&*FPrintStr__12_s->pbfp, obj->typ, obj->link); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)obj->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, __ASHR(obj->adr, 16)); + OPT_FPrintSign(&*FPrintStr__13_s->pbfp, obj->typ, obj->link); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)obj->name, ((LONGINT)(256))); } } - FPrintTProcs__17(obj->right); + FPrintTProcs__18(obj->right); } } @@ -545,11 +547,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPT_Struct btyp = NIL; OPT_Object strobj = NIL, bstrobj = NIL; LONGINT pbfp, pvfp; - struct FPrintStr__12 _s; + struct FPrintStr__13 _s; _s.pbfp = &pbfp; _s.pvfp = &pvfp; - _s.lnk = FPrintStr__12_s; - FPrintStr__12_s = &_s; + _s.lnk = FPrintStr__13_s; + FPrintStr__13_s = &_s; if (!typ->fpdone) { OPT_IdFPrint(typ); pbfp = typ->idfp; @@ -586,11 +588,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPM_FPrint(&pvfp, typ->align); OPM_FPrint(&pvfp, typ->n); OPT_nofhdfld = 0; - FPrintFlds__13(typ->link, ((LONGINT)(0)), 1); + FPrintFlds__14(typ->link, ((LONGINT)(0)), 1); if (OPT_nofhdfld > 2048) { OPM_Mark(225, typ->txtpos); } - FPrintTProcs__17(typ->link); + FPrintTProcs__18(typ->link); OPM_FPrint(&pvfp, pbfp); strobj = typ->strobj; if (strobj == NIL || strobj->name[0] == 0x00) { @@ -600,7 +602,7 @@ void OPT_FPrintStr (OPT_Struct typ) typ->pbfp = pbfp; typ->pvfp = pvfp; } - FPrintStr__12_s = _s.lnk; + FPrintStr__13_s = _s.lnk; } void OPT_FPrintObj (OPT_Object obj) @@ -1697,6 +1699,15 @@ static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res = typ; } +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj) +{ + OPS_Name name__copy; + __DUPARR(name, OPS_Name); + OPT_Insert(name, &*obj); + (*obj)->mode = 5; + (*obj)->typ = typ; +} + static void OPT_EnterProc (OPS_Name name, INTEGER num) { OPT_Object obj = NIL; @@ -1719,6 +1730,10 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_inttyp); P(OPT_linttyp); P(OPT_ainttyp); + P(OPT_int8typ); + P(OPT_int16typ); + P(OPT_int32typ); + P(OPT_int64typ); P(OPT_realtyp); P(OPT_lrltyp); P(OPT_settyp); @@ -1726,6 +1741,7 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_niltyp); P(OPT_notyp); P(OPT_sysptrtyp); + P(OPT_LIntObj); __ENUMP(OPT_GlbMod, 64, P); P(OPT_universe); P(OPT_syslink); @@ -1789,13 +1805,17 @@ export void *OPT__init(void) OPT_OpenScope(0, NIL); OPM_errpos = 0; OPT_InitStruct(&OPT_undftyp, 0); + OPT_undftyp->BaseTyp = OPT_undftyp; OPT_InitStruct(&OPT_notyp, 12); OPT_InitStruct(&OPT_stringtyp, 10); OPT_InitStruct(&OPT_niltyp, 11); - OPT_undftyp->BaseTyp = OPT_undftyp; OPT_EnterTyp((CHAR*)"BYTE", 1, OPM_ByteSize, &OPT_bytetyp); OPT_EnterTyp((CHAR*)"PTR", 13, OPM_PointerSize, &OPT_sysptrtyp); OPT_EnterTyp((CHAR*)"ADRINT", 5, OPM_LIntSize, &OPT_ainttyp); + OPT_EnterTyp((CHAR*)"INT8", 5, 1, &OPT_int8typ); + OPT_EnterTyp((CHAR*)"INT16", 5, 2, &OPT_int16typ); + OPT_EnterTyp((CHAR*)"INT32", 5, 4, &OPT_int32typ); + OPT_EnterTyp((CHAR*)"INT64", 5, 8, &OPT_int64typ); OPT_EnterProc((CHAR*)"ADR", 20); OPT_EnterProc((CHAR*)"CC", 21); OPT_EnterProc((CHAR*)"LSH", 22); @@ -1819,6 +1839,7 @@ export void *OPT__init(void) OPT_EnterTyp((CHAR*)"LONGINT", 6, OPM_LIntSize, &OPT_linttyp); OPT_EnterTyp((CHAR*)"LONGREAL", 8, OPM_LRealSize, &OPT_lrltyp); OPT_EnterTyp((CHAR*)"SHORTINT", 4, OPM_SIntSize, &OPT_sinttyp); + OPT_EnterDerivedType((CHAR*)"LINT", OPT_int64typ, &OPT_LIntObj); OPT_EnterBoolConst((CHAR*)"FALSE", ((LONGINT)(0))); OPT_EnterBoolConst((CHAR*)"TRUE", ((LONGINT)(1))); OPT_EnterProc((CHAR*)"HALT", 0); diff --git a/bootstrap/windows-48/OPT.h b/bootstrap/windows-48/OPT.h index 7187f687..c4975398 100644 --- a/bootstrap/windows-48/OPT.h +++ b/bootstrap/windows-48/OPT.h @@ -67,7 +67,7 @@ typedef import void (*OPT_typSize)(OPT_Struct); import OPT_Object OPT_topScope; -import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; import SHORTINT OPT_nofGmod; import OPT_Object OPT_GlbMod[64]; import OPS_Name OPT_SelfName; diff --git a/bootstrap/windows-48/OPV.c b/bootstrap/windows-48/OPV.c index 8b98e5f9..2172dee5 100644 --- a/bootstrap/windows-48/OPV.c +++ b/bootstrap/windows-48/OPV.c @@ -285,6 +285,10 @@ void OPV_AdrAndSize (OPT_Object topScope) OPT_inttyp->strobj->linkadr = 2; OPT_linttyp->strobj->linkadr = 2; OPT_ainttyp->strobj->linkadr = 2; + OPT_int8typ->strobj->linkadr = 2; + OPT_int16typ->strobj->linkadr = 2; + OPT_int32typ->strobj->linkadr = 2; + OPT_int64typ->strobj->linkadr = 2; OPT_lrltyp->strobj->linkadr = 2; OPT_sinttyp->strobj->linkadr = 2; OPT_booltyp->strobj->linkadr = 2; diff --git a/bootstrap/windows-48/Vishap.c b/bootstrap/windows-48/Vishap.c index 0feff79c..66a97f5d 100644 --- a/bootstrap/windows-48/Vishap.c +++ b/bootstrap/windows-48/Vishap.c @@ -81,7 +81,7 @@ static void Vishap_PropagateElementaryTypeSizes (void) OPT_realtyp->size = OPM_RealSize; OPT_inttyp->size = OPM_IntSize; OPT_linttyp->size = OPM_LIntSize; - OPT_ainttyp->size = OPM_LIntSize; + OPT_ainttyp->size = OPM_PointerSize; OPT_lrltyp->size = OPM_LRealSize; OPT_sinttyp->size = OPM_SIntSize; OPT_booltyp->size = OPM_BoolSize; diff --git a/bootstrap/windows-88/OPC.c b/bootstrap/windows-88/OPC.c index 7e9ddb90..0813dca9 100644 --- a/bootstrap/windows-88/OPC.c +++ b/bootstrap/windows-88/OPC.c @@ -212,7 +212,7 @@ void OPC_Ident (OPT_Object obj) OPM_WriteStringVar((void*)OPM_modName, ((LONGINT)(32))); } OPM_Write('_'); - } else if ((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_bytetyp->strobj) { + } else if ((((((obj == OPT_sysptrtyp->strobj || obj == OPT_ainttyp->strobj) || obj == OPT_int8typ->strobj) || obj == OPT_int16typ->strobj) || obj == OPT_int32typ->strobj) || obj == OPT_int64typ->strobj) || obj == OPT_bytetyp->strobj) { OPM_WriteString((CHAR*)"SYSTEM_", (LONGINT)8); } OPM_WriteStringVar((void*)obj->name, ((LONGINT)(256))); diff --git a/bootstrap/windows-88/OPT.c b/bootstrap/windows-88/OPT.c index daf5051d..20234e22 100644 --- a/bootstrap/windows-88/OPT.c +++ b/bootstrap/windows-88/OPT.c @@ -84,7 +84,8 @@ typedef export void (*OPT_typSize)(OPT_Struct); export OPT_Object OPT_topScope; -export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +export OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +static OPT_Object OPT_LIntObj; export SHORTINT OPT_nofGmod; export OPT_Object OPT_GlbMod[64]; export OPS_Name OPT_SelfName; @@ -106,6 +107,7 @@ export void OPT_Close (void); export void OPT_CloseScope (void); static void OPT_DebugStruct (OPT_Struct btyp); static void OPT_EnterBoolConst (OPS_Name name, LONGINT value); +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj); static void OPT_EnterProc (OPS_Name name, INTEGER num); static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res); export void OPT_Export (BOOLEAN *ext, BOOLEAN *new); @@ -466,21 +468,21 @@ void OPT_IdFPrint (OPT_Struct typ) } } -static struct FPrintStr__12 { +static struct FPrintStr__13 { LONGINT *pbfp, *pvfp; - struct FPrintStr__12 *lnk; -} *FPrintStr__12_s; + struct FPrintStr__13 *lnk; +} *FPrintStr__13_s; -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr); -static void FPrintTProcs__17 (OPT_Object obj); +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible); +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr); +static void FPrintTProcs__18 (OPT_Object obj); -static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) +static void FPrintHdFld__16 (OPT_Struct typ, OPT_Object fld, LONGINT adr) { LONGINT i, j, n; OPT_Struct btyp = NIL; if (typ->comp == 4) { - FPrintFlds__13(typ->link, adr, 0); + FPrintFlds__14(typ->link, adr, 0); } else if (typ->comp == 2) { btyp = typ->BaseTyp; n = typ->n; @@ -490,53 +492,53 @@ static void FPrintHdFld__15 (OPT_Struct typ, OPT_Object fld, LONGINT adr) } if (btyp->form == 13 || btyp->comp == 4) { j = OPT_nofhdfld; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); if (j != OPT_nofhdfld) { i = 1; while ((i < n && OPT_nofhdfld <= 2048)) { adr += btyp->size; - FPrintHdFld__15(btyp, fld, adr); + FPrintHdFld__16(btyp, fld, adr); i += 1; } } } } else if (typ->form == 13 || __STRCMP(fld->name, "@ptr") == 0) { - OPM_FPrint(&*FPrintStr__12_s->pvfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pvfp, adr); + OPM_FPrint(&*FPrintStr__13_s->pvfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pvfp, adr); OPT_nofhdfld += 1; } } -static void FPrintFlds__13 (OPT_Object fld, LONGINT adr, BOOLEAN visible) +static void FPrintFlds__14 (OPT_Object fld, LONGINT adr, BOOLEAN visible) { while ((fld != NIL && fld->mode == 4)) { if ((fld->vis != 0 && visible)) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->vis); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)fld->name, ((LONGINT)(256))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->adr); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->vis); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)fld->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->adr); OPT_FPrintStr(fld->typ); - OPM_FPrint(&*FPrintStr__12_s->pbfp, fld->typ->pbfp); - OPM_FPrint(&*FPrintStr__12_s->pvfp, fld->typ->pvfp); + OPM_FPrint(&*FPrintStr__13_s->pbfp, fld->typ->pbfp); + OPM_FPrint(&*FPrintStr__13_s->pvfp, fld->typ->pvfp); } else { - FPrintHdFld__15(fld->typ, fld, fld->adr + adr); + FPrintHdFld__16(fld->typ, fld, fld->adr + adr); } fld = fld->link; } } -static void FPrintTProcs__17 (OPT_Object obj) +static void FPrintTProcs__18 (OPT_Object obj) { if (obj != NIL) { - FPrintTProcs__17(obj->left); + FPrintTProcs__18(obj->left); if (obj->mode == 13) { if (obj->vis != 0) { - OPM_FPrint(&*FPrintStr__12_s->pbfp, ((LONGINT)(13))); - OPM_FPrint(&*FPrintStr__12_s->pbfp, __ASHR(obj->adr, 16)); - OPT_FPrintSign(&*FPrintStr__12_s->pbfp, obj->typ, obj->link); - OPT_FPrintName(&*FPrintStr__12_s->pbfp, (void*)obj->name, ((LONGINT)(256))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, ((LONGINT)(13))); + OPM_FPrint(&*FPrintStr__13_s->pbfp, __ASHR(obj->adr, 16)); + OPT_FPrintSign(&*FPrintStr__13_s->pbfp, obj->typ, obj->link); + OPT_FPrintName(&*FPrintStr__13_s->pbfp, (void*)obj->name, ((LONGINT)(256))); } } - FPrintTProcs__17(obj->right); + FPrintTProcs__18(obj->right); } } @@ -546,11 +548,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPT_Struct btyp = NIL; OPT_Object strobj = NIL, bstrobj = NIL; LONGINT pbfp, pvfp; - struct FPrintStr__12 _s; + struct FPrintStr__13 _s; _s.pbfp = &pbfp; _s.pvfp = &pvfp; - _s.lnk = FPrintStr__12_s; - FPrintStr__12_s = &_s; + _s.lnk = FPrintStr__13_s; + FPrintStr__13_s = &_s; if (!typ->fpdone) { OPT_IdFPrint(typ); pbfp = typ->idfp; @@ -587,11 +589,11 @@ void OPT_FPrintStr (OPT_Struct typ) OPM_FPrint(&pvfp, typ->align); OPM_FPrint(&pvfp, typ->n); OPT_nofhdfld = 0; - FPrintFlds__13(typ->link, ((LONGINT)(0)), 1); + FPrintFlds__14(typ->link, ((LONGINT)(0)), 1); if (OPT_nofhdfld > 2048) { OPM_Mark(225, typ->txtpos); } - FPrintTProcs__17(typ->link); + FPrintTProcs__18(typ->link); OPM_FPrint(&pvfp, pbfp); strobj = typ->strobj; if (strobj == NIL || strobj->name[0] == 0x00) { @@ -601,7 +603,7 @@ void OPT_FPrintStr (OPT_Struct typ) typ->pbfp = pbfp; typ->pvfp = pvfp; } - FPrintStr__12_s = _s.lnk; + FPrintStr__13_s = _s.lnk; } void OPT_FPrintObj (OPT_Object obj) @@ -1698,6 +1700,15 @@ static void OPT_EnterTyp (OPS_Name name, SHORTINT form, INTEGER size, OPT_Struct *res = typ; } +static void OPT_EnterDerivedType (OPS_Name name, OPT_Struct typ, OPT_Object *obj) +{ + OPS_Name name__copy; + __DUPARR(name, OPS_Name); + OPT_Insert(name, &*obj); + (*obj)->mode = 5; + (*obj)->typ = typ; +} + static void OPT_EnterProc (OPS_Name name, INTEGER num) { OPT_Object obj = NIL; @@ -1720,6 +1731,10 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_inttyp); P(OPT_linttyp); P(OPT_ainttyp); + P(OPT_int8typ); + P(OPT_int16typ); + P(OPT_int32typ); + P(OPT_int64typ); P(OPT_realtyp); P(OPT_lrltyp); P(OPT_settyp); @@ -1727,6 +1742,7 @@ static void EnumPtrs(void (*P)(void*)) P(OPT_niltyp); P(OPT_notyp); P(OPT_sysptrtyp); + P(OPT_LIntObj); __ENUMP(OPT_GlbMod, 64, P); P(OPT_universe); P(OPT_syslink); @@ -1790,13 +1806,17 @@ export void *OPT__init(void) OPT_OpenScope(0, NIL); OPM_errpos = 0; OPT_InitStruct(&OPT_undftyp, 0); + OPT_undftyp->BaseTyp = OPT_undftyp; OPT_InitStruct(&OPT_notyp, 12); OPT_InitStruct(&OPT_stringtyp, 10); OPT_InitStruct(&OPT_niltyp, 11); - OPT_undftyp->BaseTyp = OPT_undftyp; OPT_EnterTyp((CHAR*)"BYTE", 1, OPM_ByteSize, &OPT_bytetyp); OPT_EnterTyp((CHAR*)"PTR", 13, OPM_PointerSize, &OPT_sysptrtyp); OPT_EnterTyp((CHAR*)"ADRINT", 5, OPM_LIntSize, &OPT_ainttyp); + OPT_EnterTyp((CHAR*)"INT8", 5, 1, &OPT_int8typ); + OPT_EnterTyp((CHAR*)"INT16", 5, 2, &OPT_int16typ); + OPT_EnterTyp((CHAR*)"INT32", 5, 4, &OPT_int32typ); + OPT_EnterTyp((CHAR*)"INT64", 5, 8, &OPT_int64typ); OPT_EnterProc((CHAR*)"ADR", 20); OPT_EnterProc((CHAR*)"CC", 21); OPT_EnterProc((CHAR*)"LSH", 22); @@ -1820,6 +1840,7 @@ export void *OPT__init(void) OPT_EnterTyp((CHAR*)"LONGINT", 6, OPM_LIntSize, &OPT_linttyp); OPT_EnterTyp((CHAR*)"LONGREAL", 8, OPM_LRealSize, &OPT_lrltyp); OPT_EnterTyp((CHAR*)"SHORTINT", 4, OPM_SIntSize, &OPT_sinttyp); + OPT_EnterDerivedType((CHAR*)"LINT", OPT_int64typ, &OPT_LIntObj); OPT_EnterBoolConst((CHAR*)"FALSE", ((LONGINT)(0))); OPT_EnterBoolConst((CHAR*)"TRUE", ((LONGINT)(1))); OPT_EnterProc((CHAR*)"HALT", 0); diff --git a/bootstrap/windows-88/OPT.h b/bootstrap/windows-88/OPT.h index 550ea673..f1865573 100644 --- a/bootstrap/windows-88/OPT.h +++ b/bootstrap/windows-88/OPT.h @@ -68,7 +68,7 @@ typedef import void (*OPT_typSize)(OPT_Struct); import OPT_Object OPT_topScope; -import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; +import OPT_Struct OPT_undftyp, OPT_bytetyp, OPT_booltyp, OPT_chartyp, OPT_sinttyp, OPT_inttyp, OPT_linttyp, OPT_ainttyp, OPT_int8typ, OPT_int16typ, OPT_int32typ, OPT_int64typ, OPT_realtyp, OPT_lrltyp, OPT_settyp, OPT_stringtyp, OPT_niltyp, OPT_notyp, OPT_sysptrtyp; import SHORTINT OPT_nofGmod; import OPT_Object OPT_GlbMod[64]; import OPS_Name OPT_SelfName; diff --git a/bootstrap/windows-88/OPV.c b/bootstrap/windows-88/OPV.c index fe8d848a..638891f1 100644 --- a/bootstrap/windows-88/OPV.c +++ b/bootstrap/windows-88/OPV.c @@ -286,6 +286,10 @@ void OPV_AdrAndSize (OPT_Object topScope) OPT_inttyp->strobj->linkadr = 2; OPT_linttyp->strobj->linkadr = 2; OPT_ainttyp->strobj->linkadr = 2; + OPT_int8typ->strobj->linkadr = 2; + OPT_int16typ->strobj->linkadr = 2; + OPT_int32typ->strobj->linkadr = 2; + OPT_int64typ->strobj->linkadr = 2; OPT_lrltyp->strobj->linkadr = 2; OPT_sinttyp->strobj->linkadr = 2; OPT_booltyp->strobj->linkadr = 2; diff --git a/bootstrap/windows-88/Vishap.c b/bootstrap/windows-88/Vishap.c index 7e1eba78..a487fe66 100644 --- a/bootstrap/windows-88/Vishap.c +++ b/bootstrap/windows-88/Vishap.c @@ -82,7 +82,7 @@ static void Vishap_PropagateElementaryTypeSizes (void) OPT_realtyp->size = OPM_RealSize; OPT_inttyp->size = OPM_IntSize; OPT_linttyp->size = OPM_LIntSize; - OPT_ainttyp->size = OPM_LIntSize; + OPT_ainttyp->size = OPM_PointerSize; OPT_lrltyp->size = OPM_LRealSize; OPT_sinttyp->size = OPM_SIntSize; OPT_booltyp->size = OPM_BoolSize; diff --git a/src/compiler/OPC.Mod b/src/compiler/OPC.Mod index 849c04e9..b8244fd3 100644 --- a/src/compiler/OPC.Mod +++ b/src/compiler/OPC.Mod @@ -128,6 +128,10 @@ 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; diff --git a/src/compiler/OPT.Mod b/src/compiler/OPT.Mod index 62a0d4b7..cf4c39ac 100644 --- a/src/compiler/OPT.Mod +++ b/src/compiler/OPT.Mod @@ -156,9 +156,12 @@ VAR bytetyp*, booltyp*, chartyp*, sinttyp*, inttyp*, linttyp*, ainttyp*, + int8typ*, int16typ*, int32typ*, int64typ*, realtyp*, lrltyp*, settyp*, stringtyp*, niltyp*, notyp*, sysptrtyp*: Struct; + LIntObj: Object; + nofGmod*: SHORTINT; (*nof imports*) GlbMod*: ARRAY maxImps OF Object; (* ^.right = first object, ^.name = module import name (not alias) *) @@ -1135,6 +1138,13 @@ END Import; typ^.idfp := form; typ^.idfpdone := TRUE; res := typ END EnterTyp; + PROCEDURE EnterDerivedType(name: OPS.Name; typ: Struct; VAR obj: Object); + BEGIN + Insert(name, obj); + obj.mode := Typ; + obj.typ := typ; + END EnterDerivedType; + PROCEDURE EnterProc(name: OPS.Name; num: INTEGER); VAR obj: Object; BEGIN Insert(name, obj); @@ -1142,14 +1152,19 @@ END Import; END EnterProc; BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0; - InitStruct(undftyp, Undef); InitStruct(notyp, NoTyp); - InitStruct(stringtyp, String); InitStruct(niltyp, NilTyp); - undftyp^.BaseTyp := undftyp; + InitStruct(undftyp, Undef); undftyp^.BaseTyp := undftyp; + InitStruct(notyp, NoTyp); + InitStruct(stringtyp, String); + InitStruct(niltyp, NilTyp); (*initialization of module SYSTEM*) - EnterTyp("BYTE", Byte, OPM.ByteSize, bytetyp); - EnterTyp("PTR", Pointer, OPM.PointerSize, sysptrtyp); - EnterTyp("ADRINT", Int, OPM.LIntSize, ainttyp); + EnterTyp("BYTE", Byte, OPM.ByteSize, bytetyp); + EnterTyp("PTR", Pointer, OPM.PointerSize, sysptrtyp); + EnterTyp("ADRINT", Int, OPM.LIntSize, ainttyp); + EnterTyp("INT8", Int, 1, int8typ); + EnterTyp("INT16", Int, 2, int16typ); + EnterTyp("INT32", Int, 4, int32typ); + EnterTyp("INT64", Int, 8, int64typ); EnterProc("ADR", adrfn); EnterProc("CC", ccfn); EnterProc("LSH", lshfn); @@ -1174,6 +1189,10 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0; EnterTyp("LONGREAL", LReal, OPM.LRealSize, lrltyp); EnterTyp("SHORTINT", SInt, OPM.SIntSize, sinttyp); + (* Create LINT type as TYPE LINT = SYSTEM.INT64 *) + EnterDerivedType("LINT", int64typ, LIntObj); + + EnterBoolConst("FALSE", 0); (* 0 and 1 are compiler internal representation only *) EnterBoolConst("TRUE", 1); diff --git a/src/compiler/OPV.Mod b/src/compiler/OPV.Mod index 529c1aa9..7518f811 100644 --- a/src/compiler/OPV.Mod +++ b/src/compiler/OPV.Mod @@ -206,6 +206,10 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96 OPT.inttyp^.strobj^.linkadr := PredefinedType; OPT.linttyp^.strobj^.linkadr := PredefinedType; OPT.ainttyp^.strobj^.linkadr := PredefinedType; + OPT.int8typ^.strobj^.linkadr := PredefinedType; + OPT.int16typ^.strobj^.linkadr := PredefinedType; + OPT.int32typ^.strobj^.linkadr := PredefinedType; + OPT.int64typ^.strobj^.linkadr := PredefinedType; OPT.lrltyp^.strobj^.linkadr := PredefinedType; OPT.sinttyp^.strobj^.linkadr := PredefinedType; OPT.booltyp^.strobj^.linkadr := PredefinedType; diff --git a/src/compiler/Vishap.Mod b/src/compiler/Vishap.Mod index 216533a1..25f0aa59 100644 --- a/src/compiler/Vishap.Mod +++ b/src/compiler/Vishap.Mod @@ -58,7 +58,7 @@ MODULE Vishap; (* J. Templ 3.2.95 *) OPT.realtyp.size := OPM.RealSize; OPT.inttyp.size := OPM.IntSize; OPT.linttyp.size := OPM.LIntSize; - OPT.ainttyp.size := OPM.LIntSize; + OPT.ainttyp.size := OPM.PointerSize; OPT.lrltyp.size := OPM.LRealSize; OPT.sinttyp.size := OPM.SIntSize; OPT.booltyp.size := OPM.BoolSize;