mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 05:12:26 +00:00
Simplify parameterisable memory model variables.
This commit is contained in:
parent
20a97bb570
commit
1c94abedc6
201 changed files with 607 additions and 763 deletions
|
|
@ -1053,7 +1053,7 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
|
|||
OPT.movefn: (*SYSTEM.GET, SYSTEM.PUT, SYSTEM.BIT, SYSTEM.MOVE*)
|
||||
IF (x^.class = OPT.Ntype) OR (x^.class = OPT.Nproc) THEN err(126)
|
||||
ELSIF (x^.class = OPT.Nconst) & (f = OPT.Int) & (x.typ.size < OPT.linttyp.size) THEN Convert(x, OPT.linttyp)
|
||||
ELSIF ~((x.typ.form IN {OPT.Pointer, OPT.Int}) & (x.typ.size = OPM.PointerSize)) THEN err(111); x^.typ := OPT.linttyp
|
||||
ELSIF ~((x.typ.form IN {OPT.Pointer, OPT.Int}) & (x.typ.size = OPM.AddressSize)) THEN err(111); x^.typ := OPT.linttyp
|
||||
END
|
||||
|OPT.getrfn,
|
||||
OPT.putrfn: (*SYSTEM.GETREG, SYSTEM.PUTREG*)
|
||||
|
|
@ -1230,7 +1230,7 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
|
|||
|OPT.movefn: (*SYSTEM.MOVE*)
|
||||
IF (x^.class = OPT.Ntype) OR (x^.class = OPT.Nproc) THEN err(126)
|
||||
ELSIF (x^.class = OPT.Nconst) & (f = OPT.Int) & (x.typ.size < OPT.linttyp.size) THEN Convert(x, OPT.linttyp)
|
||||
ELSIF ~((x.typ.form IN {OPT.Pointer, OPT.Int}) & (x.typ.size = OPM.PointerSize)) THEN err(111); x^.typ := OPT.linttyp
|
||||
ELSIF ~((x.typ.form IN {OPT.Pointer, OPT.Int}) & (x.typ.size = OPM.AddressSize)) THEN err(111); x^.typ := OPT.linttyp
|
||||
END;
|
||||
p^.link := x
|
||||
|OPT.assertfn: (*ASSERT*)
|
||||
|
|
|
|||
|
|
@ -552,7 +552,7 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
|
|||
IF typ^.strobj # NIL THEN OPM.WriteStringVar(typ^.strobj^.name) END ;
|
||||
OPM.Write(DoubleQuote);
|
||||
Str1(', #), {', typ^.size);
|
||||
nofptrs := 0; PutPtrOffsets(typ, 0, nofptrs); Str1("#}}", -(nofptrs + 1) * OPM.PointerSize);
|
||||
nofptrs := 0; PutPtrOffsets(typ, 0, nofptrs); Str1("#}}", -(nofptrs + 1) * OPM.AddressSize);
|
||||
EndStat
|
||||
END TDescDecl;
|
||||
|
||||
|
|
@ -1303,7 +1303,7 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
|
|||
IF dim # 0 THEN OPM.WriteInt(dim) END
|
||||
ELSE (* array *)
|
||||
WHILE dim > 0 DO array := array^.BaseTyp; DEC(dim) END;
|
||||
IF ansi THEN OPM.WriteInt(array.n) ELSE IntLiteral(array.n, OPM.PointerSize) END
|
||||
IF ansi THEN OPM.WriteInt(array.n) ELSE IntLiteral(array.n, OPM.AddressSize) END
|
||||
END
|
||||
END Len;
|
||||
|
||||
|
|
|
|||
|
|
@ -88,10 +88,11 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
VAR
|
||||
SourceFileName : ARRAY 256 OF CHAR;
|
||||
|
||||
Alignment*: INTEGER;
|
||||
(* Parameter selectable sizes *)
|
||||
Alignment*,
|
||||
AddressSize*, SetSize*,
|
||||
ShortintSize*, IntegerSize*, LongintSize*: INTEGER;
|
||||
|
||||
ByteSize*, CharSize*, BoolSize*, SIntSize*, IntSize*,
|
||||
LIntSize*, SetSize*, RealSize*, LRealSize*, PointerSize*, ProcSize*, RecSize*,
|
||||
MaxSet*: INTEGER;
|
||||
|
||||
MaxIndex*: SYSTEM.INT64;
|
||||
|
|
@ -161,13 +162,21 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
| "t": opt := opt / {typchk}
|
||||
| "x": opt := opt / {inxchk}
|
||||
|
||||
| "B": IF s[i+1] # 0X THEN INC(i); IntSize := ORD(s[i]) - ORD('0') END;
|
||||
IF s[i+1] # 0X THEN INC(i); PointerSize := ORD(s[i]) - ORD('0') END;
|
||||
| "B": IF s[i+1] # 0X THEN INC(i); IntegerSize := ORD(s[i]) - ORD('0') END;
|
||||
IF s[i+1] # 0X THEN INC(i); AddressSize := ORD(s[i]) - ORD('0') END;
|
||||
IF s[i+1] # 0X THEN INC(i); Alignment := ORD(s[i]) - ORD('0') END;
|
||||
ASSERT((IntSize = 2) OR (IntSize = 4));
|
||||
ASSERT((PointerSize = 4) OR (PointerSize = 8));
|
||||
ASSERT((IntegerSize = 2) OR (IntegerSize = 4));
|
||||
ASSERT((AddressSize = 4) OR (AddressSize = 8));
|
||||
ASSERT((Alignment = 4) OR (Alignment = 8));
|
||||
IF IntegerSize = 2 THEN
|
||||
LongintSize := 4;
|
||||
SetSize := 4;
|
||||
ELSE
|
||||
LongintSize := 8;
|
||||
SetSize := 8;
|
||||
END;
|
||||
Files.SetSearchPath("")
|
||||
|
||||
| "F": opt := opt / {forcenewsym}
|
||||
| "M": opt := opt / {mainlinkstat}
|
||||
| "S": opt := opt / {dontasm}
|
||||
|
|
@ -529,20 +538,24 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
PROCEDURE VerboseListSizes;
|
||||
BEGIN
|
||||
LogWLn;
|
||||
LogWStr("Type Size Alignement"); LogWLn;
|
||||
(*LogWStr("Type Size Alignement"); LogWLn;*)
|
||||
LogWStr("Type Size"); LogWLn;
|
||||
(*
|
||||
LogWStr("CHAR "); LogWNum(CharSize, 4); (* LogWNum(CharAlign, 5); *) LogWLn;
|
||||
LogWStr("BOOLEAN "); LogWNum(BoolSize, 4); (* LogWNum(BoolAlign, 5); *) LogWLn;
|
||||
LogWStr("SHORTINT "); LogWNum(SIntSize, 4); (* LogWNum(SIntAlign, 5); *) LogWLn;
|
||||
LogWStr("INTEGER "); LogWNum(IntSize, 4); (* LogWNum(IntAlign, 5); *) LogWLn;
|
||||
LogWStr("LONGINT "); LogWNum(LIntSize, 4); (* LogWNum(LIntAlign, 5); *) LogWLn;
|
||||
LogWStr("SET "); LogWNum(SetSize, 4); (* LogWNum(SetAlign, 5); *) LogWLn;
|
||||
LogWStr("REAL "); LogWNum(RealSize, 4); (* LogWNum(RealAlign, 5); *) LogWLn;
|
||||
LogWStr("LONGREAL "); LogWNum(LRealSize, 4); (* LogWNum(LRealAlign, 5); *) LogWLn;
|
||||
LogWStr("PTR "); LogWNum(PointerSize, 4); (* LogWNum(PointerAlign, 5); *) LogWLn;
|
||||
LogWStr("PROC "); LogWNum(ProcSize, 4); (* LogWNum(ProcAlign, 5); *) LogWLn;
|
||||
LogWStr("RECORD "); LogWNum(RecSize, 4); (* LogWNum(RecAlign, 5); *) LogWLn;
|
||||
(*LogWStr("ENDIAN "); LogWNum(ByteOrder, 4); LogWNum(BitOrder, 5); LogWLn;*)
|
||||
LogWStr("PROC "); LogWNum(ProcSize, 4); (* LogWNum(ProcAlign, 5); *) LogWLn;
|
||||
LogWStr("ENDIAN "); LogWNum(ByteOrder, 4); LogWNum(BitOrder, 5); LogWLn;
|
||||
*)
|
||||
LogWStr("SHORTINT "); LogWNum(ShortintSize, 4); (* LogWNum(SIntAlign, 5); *) LogWLn;
|
||||
LogWStr("INTEGER "); LogWNum(IntegerSize, 4); (* LogWNum(IntAlign, 5); *) LogWLn;
|
||||
LogWStr("LONGINT "); LogWNum(LongintSize, 4); (* LogWNum(LIntAlign, 5); *) LogWLn;
|
||||
LogWStr("SET "); LogWNum(SetSize, 4); (* LogWNum(SetAlign, 5); *) LogWLn;
|
||||
LogWStr("ADDRESS "); LogWNum(AddressSize, 4); (* LogWNum(PointerAlign, 5); *) LogWLn;
|
||||
LogWLn;
|
||||
LogWStr("Alignment: "); LogWNum(Alignment, 4); LogWLn;
|
||||
(*
|
||||
LogWStr("Min shortint "); LogWNum(MinSInt, 4); LogWLn;
|
||||
LogWStr("Max shortint "); LogWNum(MaxSInt, 4); LogWLn;
|
||||
|
|
@ -582,25 +595,14 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
the module startup code, and maybe overridden by the -Bnnn bootstrap
|
||||
parameter *)
|
||||
|
||||
(* Derived sizes *)
|
||||
ProcSize := PointerSize;
|
||||
LIntSize := IntSize * 2;
|
||||
SetSize := LIntSize;
|
||||
|
||||
IF RealSize = 4 THEN MaxReal := 3.40282346D38
|
||||
ELSIF RealSize = 8 THEN MaxReal := 1.7976931348623157D307 * 9.999999
|
||||
MaxReal := 3.40282346D38; (* REAL is 4 bytes *)
|
||||
MaxLReal := 1.7976931348623157D307 * 9.999999; (* LONGREAL is 8 bytes *)
|
||||
(*should be 1.7976931348623157D308 *)
|
||||
END ;
|
||||
|
||||
IF LRealSize = 4 THEN MaxLReal := 3.40282346D38
|
||||
ELSIF LRealSize = 8 THEN MaxLReal := 1.7976931348623157D307 * 9.999999
|
||||
(*should be 1.7976931348623157D308 *)
|
||||
END ;
|
||||
|
||||
MinReal := -MaxReal;
|
||||
MinLReal := -MaxLReal;
|
||||
MaxSet := SetSize * 8 - 1;
|
||||
MaxIndex := SignedMaximum(PointerSize);
|
||||
MaxIndex := SignedMaximum(AddressSize);
|
||||
|
||||
IF Verbose THEN VerboseListSizes END;
|
||||
END GetProperties;
|
||||
|
|
@ -734,9 +736,7 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
PROCEDURE WriteInt* (i: SYSTEM.INT64);
|
||||
VAR s: ARRAY 24 OF CHAR; i1, k: SYSTEM.INT64;
|
||||
BEGIN
|
||||
IF (i = SignedMinimum(IntSize))
|
||||
OR (i = SignedMinimum(LIntSize))
|
||||
OR (i = SignedMinimum(8)) THEN
|
||||
IF (i = SignedMinimum(2)) OR (i = SignedMinimum(4)) OR (i = SignedMinimum(8)) THEN
|
||||
(* abs(minint) is one more than maxint, causing problems representing the value as a minus sign
|
||||
followed by absoute value. Therefore represent as -maxint - 1. For INTEGER this avoids a
|
||||
compiler warning 'this decimal constant is unsigned only in ISO C90', for LONGINT it is the
|
||||
|
|
@ -754,7 +754,7 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
VAR W: Texts.Writer; T: Texts.Text; R: Texts.Reader; s: ARRAY 32 OF CHAR; ch: CHAR; i: INTEGER;
|
||||
BEGIN
|
||||
(*should be improved *)
|
||||
IF (r < SignedMaximum(LIntSize)) & (r > SignedMinimum(LIntSize)) & (r = ENTIER(r)) THEN
|
||||
IF (r < SignedMaximum(LongintSize)) & (r > SignedMinimum(LongintSize)) & (r = ENTIER(r)) THEN
|
||||
IF suffx = "f" THEN WriteString("(REAL)") ELSE WriteString("(LONGREAL)") END ;
|
||||
WriteInt(ENTIER(r))
|
||||
ELSE
|
||||
|
|
@ -839,13 +839,19 @@ BEGIN
|
|||
|
||||
Files.SetSearchPath(OBERON);
|
||||
|
||||
(* Fixed type sizes *)
|
||||
CharSize := 1; BoolSize := 1; SIntSize := 1; RecSize := 1; ByteSize := 1;
|
||||
RealSize := 4; LRealSize := 8;
|
||||
|
||||
(* type sizes with configuration based defaults *)
|
||||
PointerSize := Configuration.addressSize;
|
||||
Alignment := Configuration.alignment;
|
||||
IntSize := Configuration.intsize;
|
||||
AddressSize := Configuration.addressSize;
|
||||
Alignment := Configuration.alignment;
|
||||
ShortintSize := 1;
|
||||
|
||||
IF Configuration.intsize = 2 THEN
|
||||
IntegerSize := 2;
|
||||
LongintSize := 4;
|
||||
SetSize := 4;
|
||||
ELSE
|
||||
IntegerSize := 4;
|
||||
LongintSize := 8;
|
||||
SetSize := 8;
|
||||
END;
|
||||
|
||||
END OPM.
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ VAR
|
|||
|
||||
undftyp*,
|
||||
bytetyp*, booltyp*, chartyp*,
|
||||
sinttyp*, inttyp*, linttyp*,
|
||||
sinttyp*, inttyp*, linttyp*, hinttyp*,
|
||||
adrtyp*,
|
||||
int8typ*, int16typ*, int32typ*, int64typ*,
|
||||
realtyp*, lrltyp*, settyp*, stringtyp*,
|
||||
|
|
@ -762,7 +762,7 @@ BEGIN
|
|||
tag := OPM.SymRInt();
|
||||
IF tag = Ssys THEN typ^.sysflag := SHORT(OPM.SymRInt()); tag := OPM.SymRInt() END;
|
||||
CASE tag OF
|
||||
| Sptr: typ^.form := Pointer; typ^.size := OPM.PointerSize;
|
||||
| Sptr: typ^.form := Pointer; typ^.size := OPM.AddressSize;
|
||||
typ^.n := 0; InStruct(typ^.BaseTyp)
|
||||
| Sarr: typ^.form := Comp; typ^.comp := Array;
|
||||
InStruct(typ^.BaseTyp); typ^.n := OPM.SymRInt();
|
||||
|
|
@ -796,7 +796,7 @@ BEGIN
|
|||
InsertImport(fld, typ^.link, dummy);
|
||||
impCtxt.nextTag := OPM.SymRInt()
|
||||
END
|
||||
| Spro: typ^.form := ProcTyp; typ^.size := OPM.ProcSize;
|
||||
| Spro: typ^.form := ProcTyp; typ^.size := OPM.AddressSize;
|
||||
InSign(mno, typ^.BaseTyp, typ^.link)
|
||||
ELSE OPM.LogWStr("unhandled case at InStruct, tag = "); OPM.LogWNum(tag, 0); OPM.LogWLn;
|
||||
END;
|
||||
|
|
@ -1163,7 +1163,7 @@ END Import;
|
|||
|
||||
PROCEDURE InitStruct(VAR typ: Struct; form: SHORTINT);
|
||||
BEGIN
|
||||
typ := NewStr(form, Basic); typ^.ref := form; typ^.size := OPM.ByteSize; typ^.allocated := TRUE;
|
||||
typ := NewStr(form, Basic); typ^.ref := form; typ^.size := 1; typ^.allocated := TRUE;
|
||||
typ^.strobj := NewObj(); typ^.pbfp := form; typ^.pvfp := form; typ^.fpdone := TRUE;
|
||||
typ^.idfp := form; typ^.idfpdone := TRUE
|
||||
END InitStruct;
|
||||
|
|
@ -1207,36 +1207,37 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
|
|||
InitStruct(niltyp, NilTyp);
|
||||
|
||||
(*initialization of module SYSTEM*)
|
||||
EnterTyp("BYTE", Byte, OPM.ByteSize, bytetyp);
|
||||
EnterTyp("PTR", Pointer, OPM.PointerSize, sysptrtyp);
|
||||
EnterTyp("ADDRESS", Int, OPM.PointerSize, adrtyp);
|
||||
EnterTyp("INT8", Int, 1, int8typ);
|
||||
EnterTyp("INT16", Int, 2, int16typ);
|
||||
EnterTyp("INT32", Int, 4, int32typ);
|
||||
EnterTyp("INT64", Int, 8, int64typ);
|
||||
EnterTyp("BYTE", Byte, 1, bytetyp);
|
||||
EnterTyp("PTR", Pointer, -1, sysptrtyp); (* Size set in Vishap.PropagateElementaryTypeSize *)
|
||||
EnterTyp("ADDRESS", Int, -1, adrtyp); (* Size set in Vishap.PropagateElementaryTypeSize *)
|
||||
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);
|
||||
EnterProc("ROT", rotfn);
|
||||
EnterProc("GET", getfn);
|
||||
EnterProc("PUT", putfn);
|
||||
EnterProc("ADR", adrfn);
|
||||
EnterProc("CC", ccfn);
|
||||
EnterProc("LSH", lshfn);
|
||||
EnterProc("ROT", rotfn);
|
||||
EnterProc("GET", getfn);
|
||||
EnterProc("PUT", putfn);
|
||||
EnterProc("GETREG", getrfn);
|
||||
EnterProc("PUTREG", putrfn);
|
||||
EnterProc("BIT", bitfn);
|
||||
EnterProc("VAL", valfn);
|
||||
EnterProc("NEW", sysnewfn);
|
||||
EnterProc("MOVE", movefn);
|
||||
EnterProc("BIT", bitfn);
|
||||
EnterProc("VAL", valfn);
|
||||
EnterProc("NEW", sysnewfn);
|
||||
EnterProc("MOVE", movefn);
|
||||
|
||||
syslink := topScope^.right;
|
||||
universe := topScope; topScope^.right := NIL;
|
||||
|
||||
|
||||
EnterTyp("BOOLEAN", Bool, OPM.BoolSize, booltyp);
|
||||
EnterTyp("CHAR", Char, OPM.CharSize, chartyp);
|
||||
EnterTyp("SET", Set, OPM.SetSize, settyp);
|
||||
EnterTyp("REAL", Real, OPM.RealSize, realtyp);
|
||||
EnterTyp("LONGREAL", LReal, OPM.LRealSize, lrltyp);
|
||||
EnterTyp("BOOLEAN", Bool, 1, booltyp);
|
||||
EnterTyp("CHAR", Char, 1, chartyp);
|
||||
EnterTyp("SET", Set, -1, settyp); (* Size set in Vishap.PropagateElementaryTypeSize *)
|
||||
EnterTyp("REAL", Real, 4, realtyp);
|
||||
EnterTyp("LONGREAL", LReal, 8, lrltyp);
|
||||
EnterTyp("HUGEINT", Int, 8, hinttyp);
|
||||
|
||||
EnterTypeAlias("SHORTINT", sintobj);
|
||||
EnterTypeAlias("INTEGER", intobj);
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
|||
ELSIF typ^.size = -1 THEN
|
||||
f := typ^.form; c := typ^.comp;
|
||||
IF c = OPT.Record THEN btyp := typ^.BaseTyp;
|
||||
IF btyp = NIL THEN offset := 0; base := (*OPM.RecAlign*)OPC.SizeAlignment(OPM.RecSize);
|
||||
IF btyp = NIL THEN offset := 0; base := 1;
|
||||
ELSE TypSize(btyp); offset := btyp^.size - btyp^.sysflag DIV 100H; base := btyp^.align;
|
||||
END;
|
||||
fld := typ^.link;
|
||||
|
|
@ -86,12 +86,12 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
|||
TypSize(typ^.BaseTyp);
|
||||
typ^.size := typ^.n * typ^.BaseTyp^.size;
|
||||
ELSIF f = OPT.Pointer THEN
|
||||
typ^.size := OPM.PointerSize;
|
||||
typ^.size := OPM.AddressSize;
|
||||
IF typ^.BaseTyp = OPT.undftyp THEN OPM.Mark(128, typ^.n)
|
||||
ELSE TypSize(typ^.BaseTyp)
|
||||
END
|
||||
ELSIF f = OPT.ProcTyp THEN
|
||||
typ^.size := OPM.ProcSize;
|
||||
typ^.size := OPM.AddressSize;
|
||||
ELSIF c = OPT.DynArr THEN
|
||||
btyp := typ^.BaseTyp; TypSize(btyp);
|
||||
IF btyp^.comp = OPT.DynArr THEN typ^.size := btyp^.size + 4 (* describes dim not size *)
|
||||
|
|
@ -187,21 +187,17 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
|||
topScope^.leaf := TRUE;
|
||||
Traverse(topScope^.right, topScope, TRUE); (* first pass only on exported types and procedures *)
|
||||
Traverse(topScope^.right, topScope, FALSE); (* second pass *)
|
||||
|
||||
(* mark basic types as predefined, OPC.Ident can avoid qualification*)
|
||||
OPT.chartyp^.strobj^.linkadr := PredefinedType;
|
||||
OPT.settyp^.strobj^.linkadr := PredefinedType;
|
||||
OPT.realtyp^.strobj^.linkadr := PredefinedType;
|
||||
|
||||
(* SHORTINT, INTEGER and LONGINT are alternate names for INT8, INT16, INT32 and INT64 and have not been set up yet.
|
||||
OPT.sinttyp^.strobj^.linkadr := PredefinedType;
|
||||
OPT.inttyp^.strobj^.linkadr := PredefinedType;
|
||||
OPT.linttyp^.strobj^.linkadr := PredefinedType;
|
||||
*)
|
||||
OPT.adrtyp^.strobj^.linkadr := PredefinedType;
|
||||
OPT.int8typ^.strobj^.linkadr := PredefinedType;
|
||||
OPT.int16typ^.strobj^.linkadr := PredefinedType;
|
||||
OPT.int32typ^.strobj^.linkadr := PredefinedType;
|
||||
OPT.int64typ^.strobj^.linkadr := PredefinedType;
|
||||
OPT.hinttyp.strobj.linkadr := PredefinedType;
|
||||
OPT.lrltyp^.strobj^.linkadr := PredefinedType;
|
||||
OPT.booltyp^.strobj^.linkadr := PredefinedType;
|
||||
OPT.bytetyp^.strobj^.linkadr := PredefinedType;
|
||||
|
|
@ -482,7 +478,7 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
|||
OPM.WriteString(", "); TypeOf(n)
|
||||
ELSIF comp = OPT.DynArr THEN
|
||||
IF n^.class = OPT.Nconst THEN (* ap is string constant *)
|
||||
OPM.WriteString(Comma); ParIntLiteral(n.conval.intval2, OPM.PointerSize)
|
||||
OPM.WriteString(Comma); ParIntLiteral(n.conval.intval2, OPM.AddressSize)
|
||||
ELSE
|
||||
aptyp := n^.typ; dim := 0;
|
||||
WHILE (typ^.comp = OPT.DynArr) & (typ^.BaseTyp^.form # OPT.Byte) DO
|
||||
|
|
@ -495,7 +491,7 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
|||
Len(n, dim); OPM.WriteString(" * "); INC(dim); aptyp := aptyp^.BaseTyp
|
||||
END ;
|
||||
(*OPM.WriteString("((LONGINT)("); OPM.WriteInt(aptyp^.size); OPM.WriteString("))");*)
|
||||
ParIntLiteral(aptyp.size, OPM.PointerSize)
|
||||
ParIntLiteral(aptyp.size, OPM.AddressSize)
|
||||
END
|
||||
END
|
||||
END ;
|
||||
|
|
@ -791,12 +787,12 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
|||
OPM.WriteString(", ");
|
||||
IF typ^.comp = OPT.DynArr THEN
|
||||
IF x^.class = OPT.Nconst THEN
|
||||
OPC.IntLiteral(x.conval.intval, OPM.PointerSize)
|
||||
OPC.IntLiteral(x.conval.intval, OPM.AddressSize)
|
||||
ELSE OPM.WriteString("((address)("); expr(x, 10); OPM.WriteString("))")
|
||||
END ;
|
||||
x := x^.link
|
||||
ELSE
|
||||
OPC.IntLiteral(typ.n, OPM.PointerSize)
|
||||
OPC.IntLiteral(typ.n, OPM.AddressSize)
|
||||
END ;
|
||||
typ := typ^.BaseTyp
|
||||
END ;
|
||||
|
|
|
|||
|
|
@ -51,23 +51,14 @@ MODULE Vishap; (* J. Templ 3.2.95 *)
|
|||
|
||||
PROCEDURE PropagateElementaryTypeSizes;
|
||||
BEGIN
|
||||
OPT.bytetyp.size := OPM.ByteSize;
|
||||
OPT.sysptrtyp.size := OPM.PointerSize;
|
||||
OPT.chartyp.size := OPM.CharSize;
|
||||
OPT.sysptrtyp.size := OPM.AddressSize;
|
||||
OPT.adrtyp.size := OPM.AddressSize;
|
||||
OPT.settyp.size := OPM.SetSize;
|
||||
OPT.realtyp.size := OPM.RealSize;
|
||||
OPT.adrtyp.size := OPM.PointerSize;
|
||||
OPT.lrltyp.size := OPM.LRealSize;
|
||||
OPT.booltyp.size := OPM.BoolSize;
|
||||
|
||||
OPT.sinttyp := OPT.int8typ;
|
||||
IF OPM.IntSize = 2 THEN
|
||||
OPT.inttyp := OPT.int16typ;
|
||||
OPT.linttyp := OPT.int32typ
|
||||
ELSE
|
||||
OPT.inttyp := OPT.int32typ;
|
||||
OPT.linttyp := OPT.int64typ
|
||||
END;
|
||||
OPT.sinttyp := OPT.IntType(OPM.ShortintSize);
|
||||
OPT.inttyp := OPT.IntType(OPM.IntegerSize);
|
||||
OPT.linttyp := OPT.IntType(OPM.LongintSize);
|
||||
|
||||
OPT.sintobj.typ := OPT.sinttyp;
|
||||
OPT.intobj.typ := OPT.inttyp;
|
||||
OPT.lintobj.typ := OPT.linttyp
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue