mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-05 23:22:25 +00:00
Add SYSTEM.SET32 and 64 types. Fix 32 bit build.
This commit is contained in:
parent
212bcd58b9
commit
25d99fd36a
8 changed files with 51 additions and 26 deletions
10
makefile
10
makefile
|
|
@ -157,7 +157,7 @@ full: configuration
|
|||
@make -f src/tools/make/oberon.mk -s browsercmd MODEL=2
|
||||
@printf "\n\n--- Library build started ---\n\n"
|
||||
@make -f src/tools/make/oberon.mk -s O2library
|
||||
@make -f src/tools/make/oberon.mk -s OakwoodLibrary MODEL=C
|
||||
@make -f src/tools/make/oberon.mk -s runtime MODEL=C
|
||||
@printf "\n\n--- Library build successfull ---\n\n"
|
||||
@make -f src/tools/make/oberon.mk -s sourcechanges
|
||||
@make -f src/tools/make/oberon.mk -s install
|
||||
|
|
@ -192,7 +192,13 @@ browsercmd: configuration
|
|||
# library: build all directories under src/library
|
||||
library: configuration
|
||||
@make -f src/tools/make/oberon.mk -s O2library
|
||||
@make -f src/tools/make/oberon.mk -s OakwoodLibrary MODEL=C
|
||||
@make -f src/tools/make/oberon.mk -s runtime MODEL=C
|
||||
|
||||
runtime: configuration
|
||||
@make -f src/tools/make/oberon.mk -s runtime MODEL=C
|
||||
|
||||
|
||||
|
||||
|
||||
# Individual library components
|
||||
v4: configuration
|
||||
|
|
|
|||
|
|
@ -55,7 +55,6 @@ MODULE Compiler; (* J. Templ 3.2.95 *)
|
|||
BEGIN
|
||||
OPT.sysptrtyp.size := OPM.AddressSize;
|
||||
OPT.adrtyp.size := OPM.AddressSize;
|
||||
OPT.settyp.size := OPM.SetSize;
|
||||
|
||||
adrinttyp := OPT.IntType(OPM.AddressSize);
|
||||
OPT.adrtyp.strobj := adrinttyp.strobj;
|
||||
|
|
@ -68,6 +67,13 @@ MODULE Compiler; (* J. Templ 3.2.95 *)
|
|||
OPT.intobj.typ := OPT.inttyp;
|
||||
OPT.lintobj.typ := OPT.linttyp;
|
||||
|
||||
(*OPT.settyp.size := OPM.SetSize;*)
|
||||
CASE OPM.LongintSize OF
|
||||
|4: OPT.settyp := OPT.set32typ
|
||||
ELSE OPT.settyp := OPT.set64typ
|
||||
END;
|
||||
OPT.setobj.typ := OPT.settyp;
|
||||
|
||||
(* Enable or disable (non-system) BYTE type *)
|
||||
IF OPM.Model = "C" THEN
|
||||
OPT.cpbytetyp.strobj.name[4] := 0X (* Enable Component Pascal non-system BYTE type *)
|
||||
|
|
|
|||
|
|
@ -111,9 +111,11 @@ 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
|
||||
ELSIF (mode = OPT.Typ) & (obj.typ.form IN {OPT.Int, OPT.Set}) THEN
|
||||
IF obj.typ = OPT.adrtyp THEN OPM.WriteString("address")
|
||||
ELSE OPM.WriteString("int"); OPM.WriteInt(obj.typ.size*8)
|
||||
ELSE
|
||||
IF obj.typ.form = OPT.Int THEN OPM.WriteString("int") ELSE OPM.WriteString("uint") END;
|
||||
OPM.WriteInt(obj.typ.size*8)
|
||||
END
|
||||
ELSE
|
||||
IF (mode # OPT.Typ) OR (obj^.linkadr # PredefinedType) THEN
|
||||
|
|
|
|||
|
|
@ -155,10 +155,11 @@ VAR
|
|||
bytetyp*, cpbytetyp*, booltyp*, chartyp*,
|
||||
sinttyp*, inttyp*, linttyp*, hinttyp*,
|
||||
int8typ*, int16typ*, int32typ*, int64typ*,
|
||||
realtyp*, lrltyp*, settyp*, stringtyp*,
|
||||
settyp*, set32typ*, set64typ*,
|
||||
realtyp*, lrltyp*, stringtyp*,
|
||||
adrtyp*, sysptrtyp*: Struct;
|
||||
|
||||
sintobj*, intobj*, lintobj*: Object;
|
||||
sintobj*, intobj*, lintobj*, setobj*: Object;
|
||||
|
||||
nofGmod*: SHORTINT; (*nof imports*)
|
||||
GlbMod*: ARRAY maxImps OF Object; (* ^.right = first object, ^.name = module import name (not alias) *)
|
||||
|
|
@ -229,6 +230,12 @@ BEGIN
|
|||
RETURN int64typ
|
||||
END IntType;
|
||||
|
||||
PROCEDURE SetType*(size: LONGINT): Struct;
|
||||
BEGIN
|
||||
IF size = set32typ.size THEN RETURN set32typ END;
|
||||
RETURN set64typ
|
||||
END SetType;
|
||||
|
||||
PROCEDURE ShorterOrLongerType*(x: Struct; dir: INTEGER): Struct;
|
||||
VAR i: INTEGER;
|
||||
BEGIN
|
||||
|
|
@ -803,10 +810,9 @@ END InTProc;
|
|||
|
||||
PROCEDURE InTyp(tag: LONGINT): Struct;
|
||||
BEGIN
|
||||
IF tag = Int THEN
|
||||
RETURN IntType(OPM.SymRInt())
|
||||
ELSE
|
||||
RETURN impCtxt.ref[tag]
|
||||
IF tag = Int THEN RETURN IntType(OPM.SymRInt())
|
||||
ELSIF tag = Set THEN RETURN SetType(OPM.SymRInt())
|
||||
ELSE RETURN impCtxt.ref[tag]
|
||||
END
|
||||
END InTyp;
|
||||
|
||||
|
|
@ -1124,7 +1130,7 @@ END Import;
|
|||
VAR strobj: Object;
|
||||
BEGIN
|
||||
IF (typ^.ref < expCtxt.ref) THEN OPM.SymWInt(-typ^.ref);
|
||||
IF typ.ref = Int THEN OPM.SymWInt(typ.size) END
|
||||
IF typ.ref IN {Int, Set} THEN OPM.SymWInt(typ.size) END
|
||||
ELSE
|
||||
OPM.SymWInt(Sstruct);
|
||||
typ^.ref := expCtxt.ref; INC(expCtxt.ref);
|
||||
|
|
@ -1170,7 +1176,7 @@ END Import;
|
|||
| Bool,
|
||||
Char: OPM.SymWCh(CHR(obj^.conval^.intval))
|
||||
| Int: OPM.SymWInt(obj^.conval^.intval); OPM.SymWInt(obj.typ.size)
|
||||
| Set: OPM.SymWSet(obj^.conval^.setval)
|
||||
| Set: OPM.SymWSet(obj^.conval^.setval); OPM.SymWInt(obj.typ.size)
|
||||
| Real: rval := SHORT(obj^.conval^.realval); OPM.SymWReal(rval)
|
||||
| LReal: OPM.SymWLReal(obj^.conval^.realval)
|
||||
| String: OutName(obj^.conval^.ext^)
|
||||
|
|
@ -1301,6 +1307,8 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
|
|||
EnterTyp("INT16", Int, 2, int16typ);
|
||||
EnterTyp("INT32", Int, 4, int32typ);
|
||||
EnterTyp("INT64", Int, 8, int64typ);
|
||||
EnterTyp("SET32", Set, 4, set32typ);
|
||||
EnterTyp("SET64", Set, 8, set64typ);
|
||||
|
||||
EnterProc("ADR", adrfn);
|
||||
EnterProc("CC", ccfn);
|
||||
|
|
@ -1321,7 +1329,7 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
|
|||
|
||||
EnterTyp("BOOLEAN", Bool, 1, booltyp);
|
||||
EnterTyp("CHAR", Char, 1, chartyp);
|
||||
EnterTyp("SET", Set, -1, settyp); (* Size set in Compiler.PropagateElementaryTypeSize *)
|
||||
(*EnterTyp("SET", Set, -1, settyp);*) (* Size set in Compiler.PropagateElementaryTypeSize *)
|
||||
EnterTyp("REAL", Real, 4, realtyp);
|
||||
EnterTyp("LONGREAL", LReal, 8, lrltyp);
|
||||
EnterTyp("HUGEINT", Int, 8, hinttyp);
|
||||
|
|
@ -1330,6 +1338,8 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
|
|||
EnterTypeAlias("SHORTINT", sintobj);
|
||||
EnterTypeAlias("INTEGER", intobj);
|
||||
EnterTypeAlias("LONGINT", lintobj);
|
||||
EnterTypeAlias("SET", setobj);
|
||||
|
||||
|
||||
EnterBoolConst("FALSE", 0); (* 0 and 1 are compiler internal representation only *)
|
||||
EnterBoolConst("TRUE", 1);
|
||||
|
|
|
|||
|
|
@ -145,6 +145,8 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
|||
OPT.int16typ^.strobj^.linkadr := PredefinedType;
|
||||
OPT.int32typ^.strobj^.linkadr := PredefinedType;
|
||||
OPT.int64typ^.strobj^.linkadr := PredefinedType;
|
||||
OPT.set32typ^.strobj^.linkadr := PredefinedType;
|
||||
OPT.set64typ^.strobj^.linkadr := PredefinedType;
|
||||
OPT.hinttyp.strobj.linkadr := PredefinedType;
|
||||
OPT.lrltyp^.strobj^.linkadr := PredefinedType;
|
||||
OPT.booltyp^.strobj^.linkadr := PredefinedType;
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
|||
|
||||
|
||||
PROCEDURE -IdxTrap "__HALT(-1)";
|
||||
PROCEDURE -ToAdr(x: SYSTEM.INT64): SYSTEM.ADDRESS "(address)x";
|
||||
|
||||
PROCEDURE^ Finalize(o: SYSTEM.PTR);
|
||||
|
||||
|
|
@ -427,7 +428,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
|||
restInBuf := buf.size - offset;
|
||||
IF restInBuf = 0 THEN r.res := n; r.eof := TRUE; RETURN
|
||||
ELSIF n > restInBuf THEN min := restInBuf ELSE min := n END;
|
||||
SYSTEM.MOVE(SYSTEM.ADR(buf.data) + offset, SYSTEM.ADR(x) + xpos, min);
|
||||
SYSTEM.MOVE(SYSTEM.ADR(buf.data) + ToAdr(offset), SYSTEM.ADR(x) + ToAdr(xpos), min);
|
||||
INC(offset, min); r.offset := offset; INC(xpos, min); DEC(n, min)
|
||||
END;
|
||||
r.res := 0; r.eof := FALSE
|
||||
|
|
@ -465,7 +466,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
|||
END;
|
||||
restInBuf := bufsize - offset;
|
||||
IF n > restInBuf THEN min := restInBuf ELSE min := n END;
|
||||
SYSTEM.MOVE(SYSTEM.ADR(x) + xpos, SYSTEM.ADR(buf.data) + offset, min);
|
||||
SYSTEM.MOVE(SYSTEM.ADR(x) + ToAdr(xpos), SYSTEM.ADR(buf.data) + ToAdr(offset), min);
|
||||
INC(offset, min); r.offset := offset;
|
||||
IF offset > buf.size THEN INC(buf.f.len, offset - buf.size); buf.size := offset END;
|
||||
INC(xpos, min); DEC(n, min); buf.chg := TRUE
|
||||
|
|
|
|||
|
|
@ -389,7 +389,7 @@ END ReadBuf;
|
|||
|
||||
|
||||
|
||||
PROCEDURE -writefile(fd: LONGINT; p: SYSTEM.ADDRESS; l: SYSTEM.ADDRESS): SYSTEM.ADDRESS
|
||||
PROCEDURE -writefile(fd: LONGINT; p: SYSTEM.ADDRESS; l: LONGINT): SYSTEM.ADDRESS
|
||||
"write(fd, (void*)(address)(p), l)";
|
||||
|
||||
PROCEDURE Write*(h: FileHandle; p: SYSTEM.ADDRESS; l: LONGINT): ErrorCode;
|
||||
|
|
|
|||
|
|
@ -189,7 +189,9 @@ uninstall:
|
|||
|
||||
|
||||
runtime:
|
||||
@printf "\nMaking v4 library for -O$(MODEL)\n"
|
||||
@printf "\nMaking run time library for -O$(MODEL)\n"
|
||||
mkdir -p $(BUILDDIR)/$(MODEL)
|
||||
cp src/system/*.[ch] $(BUILDDIR)/$(MODEL)
|
||||
cd $(BUILDDIR)/$(MODEL) && $(COMPILE) -c SYSTEM.c
|
||||
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Platform$(PLATFORM).Mod
|
||||
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Heap.Mod
|
||||
|
|
@ -204,6 +206,10 @@ runtime:
|
|||
# cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/MathL.Mod
|
||||
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Texts.Mod
|
||||
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Oberon.Mod
|
||||
@printf "\nMaking lib$(ONAME)$(MODEL)\n"
|
||||
ar rcs "$(BUILDDIR)/$(MODEL)/lib$(ONAME)$(MODEL).a" $(BUILDDIR)/$(MODEL)/*.o
|
||||
@cd $(BUILDDIR)/$(MODEL) && $(COMPILE) -shared -o lib$(ONAME)$(MODEL).so *.o
|
||||
|
||||
|
||||
|
||||
v4:
|
||||
|
|
@ -369,14 +375,6 @@ O2library: v4 ooc2 ooc ulm pow32 misc s3
|
|||
|
||||
|
||||
|
||||
OakwoodLibrary:
|
||||
@printf "\nMaking lib$(ONAME)$(MODEL)\n"
|
||||
mkdir -p $(BUILDDIR)/$(MODEL)
|
||||
cp src/system/*.[ch] $(BUILDDIR)/$(MODEL)
|
||||
@make -f src/tools/make/oberon.mk -s runtime MODEL=$(MODEL)
|
||||
ar rcs "$(BUILDDIR)/$(MODEL)/lib$(ONAME)$(MODEL).a" $(BUILDDIR)/$(MODEL)/*.o
|
||||
@cd $(BUILDDIR)/$(MODEL) && $(COMPILE) -shared -o lib$(ONAME)$(MODEL).so *.o
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue