mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 02:52:24 +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
|
@make -f src/tools/make/oberon.mk -s browsercmd MODEL=2
|
||||||
@printf "\n\n--- Library build started ---\n\n"
|
@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 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"
|
@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 sourcechanges
|
||||||
@make -f src/tools/make/oberon.mk -s install
|
@make -f src/tools/make/oberon.mk -s install
|
||||||
|
|
@ -192,7 +192,13 @@ browsercmd: configuration
|
||||||
# library: build all directories under src/library
|
# library: build all directories under src/library
|
||||||
library: configuration
|
library: configuration
|
||||||
@make -f src/tools/make/oberon.mk -s O2library
|
@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
|
# Individual library components
|
||||||
v4: configuration
|
v4: configuration
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,6 @@ MODULE Compiler; (* J. Templ 3.2.95 *)
|
||||||
BEGIN
|
BEGIN
|
||||||
OPT.sysptrtyp.size := OPM.AddressSize;
|
OPT.sysptrtyp.size := OPM.AddressSize;
|
||||||
OPT.adrtyp.size := OPM.AddressSize;
|
OPT.adrtyp.size := OPM.AddressSize;
|
||||||
OPT.settyp.size := OPM.SetSize;
|
|
||||||
|
|
||||||
adrinttyp := OPT.IntType(OPM.AddressSize);
|
adrinttyp := OPT.IntType(OPM.AddressSize);
|
||||||
OPT.adrtyp.strobj := adrinttyp.strobj;
|
OPT.adrtyp.strobj := adrinttyp.strobj;
|
||||||
|
|
@ -68,6 +67,13 @@ MODULE Compiler; (* J. Templ 3.2.95 *)
|
||||||
OPT.intobj.typ := OPT.inttyp;
|
OPT.intobj.typ := OPT.inttyp;
|
||||||
OPT.lintobj.typ := OPT.linttyp;
|
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 *)
|
(* Enable or disable (non-system) BYTE type *)
|
||||||
IF OPM.Model = "C" THEN
|
IF OPM.Model = "C" THEN
|
||||||
OPT.cpbytetyp.strobj.name[4] := 0X (* Enable Component Pascal non-system BYTE type *)
|
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 hashtab[h] >= 0 THEN
|
||||||
IF keytab[hashtab[h]] = obj^.name THEN OPM.Write('_') END
|
IF keytab[hashtab[h]] = obj^.name THEN OPM.Write('_') END
|
||||||
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")
|
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
|
END
|
||||||
ELSE
|
ELSE
|
||||||
IF (mode # OPT.Typ) OR (obj^.linkadr # PredefinedType) THEN
|
IF (mode # OPT.Typ) OR (obj^.linkadr # PredefinedType) THEN
|
||||||
|
|
|
||||||
|
|
@ -155,10 +155,11 @@ VAR
|
||||||
bytetyp*, cpbytetyp*, booltyp*, chartyp*,
|
bytetyp*, cpbytetyp*, booltyp*, chartyp*,
|
||||||
sinttyp*, inttyp*, linttyp*, hinttyp*,
|
sinttyp*, inttyp*, linttyp*, hinttyp*,
|
||||||
int8typ*, int16typ*, int32typ*, int64typ*,
|
int8typ*, int16typ*, int32typ*, int64typ*,
|
||||||
realtyp*, lrltyp*, settyp*, stringtyp*,
|
settyp*, set32typ*, set64typ*,
|
||||||
|
realtyp*, lrltyp*, stringtyp*,
|
||||||
adrtyp*, sysptrtyp*: Struct;
|
adrtyp*, sysptrtyp*: Struct;
|
||||||
|
|
||||||
sintobj*, intobj*, lintobj*: Object;
|
sintobj*, intobj*, lintobj*, setobj*: Object;
|
||||||
|
|
||||||
nofGmod*: SHORTINT; (*nof imports*)
|
nofGmod*: SHORTINT; (*nof imports*)
|
||||||
GlbMod*: ARRAY maxImps OF Object; (* ^.right = first object, ^.name = module import name (not alias) *)
|
GlbMod*: ARRAY maxImps OF Object; (* ^.right = first object, ^.name = module import name (not alias) *)
|
||||||
|
|
@ -229,6 +230,12 @@ BEGIN
|
||||||
RETURN int64typ
|
RETURN int64typ
|
||||||
END IntType;
|
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;
|
PROCEDURE ShorterOrLongerType*(x: Struct; dir: INTEGER): Struct;
|
||||||
VAR i: INTEGER;
|
VAR i: INTEGER;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
@ -803,10 +810,9 @@ END InTProc;
|
||||||
|
|
||||||
PROCEDURE InTyp(tag: LONGINT): Struct;
|
PROCEDURE InTyp(tag: LONGINT): Struct;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF tag = Int THEN
|
IF tag = Int THEN RETURN IntType(OPM.SymRInt())
|
||||||
RETURN IntType(OPM.SymRInt())
|
ELSIF tag = Set THEN RETURN SetType(OPM.SymRInt())
|
||||||
ELSE
|
ELSE RETURN impCtxt.ref[tag]
|
||||||
RETURN impCtxt.ref[tag]
|
|
||||||
END
|
END
|
||||||
END InTyp;
|
END InTyp;
|
||||||
|
|
||||||
|
|
@ -1124,7 +1130,7 @@ END Import;
|
||||||
VAR strobj: Object;
|
VAR strobj: Object;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF (typ^.ref < expCtxt.ref) THEN OPM.SymWInt(-typ^.ref);
|
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
|
ELSE
|
||||||
OPM.SymWInt(Sstruct);
|
OPM.SymWInt(Sstruct);
|
||||||
typ^.ref := expCtxt.ref; INC(expCtxt.ref);
|
typ^.ref := expCtxt.ref; INC(expCtxt.ref);
|
||||||
|
|
@ -1170,7 +1176,7 @@ END Import;
|
||||||
| Bool,
|
| Bool,
|
||||||
Char: OPM.SymWCh(CHR(obj^.conval^.intval))
|
Char: OPM.SymWCh(CHR(obj^.conval^.intval))
|
||||||
| Int: OPM.SymWInt(obj^.conval^.intval); OPM.SymWInt(obj.typ.size)
|
| 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)
|
| Real: rval := SHORT(obj^.conval^.realval); OPM.SymWReal(rval)
|
||||||
| LReal: OPM.SymWLReal(obj^.conval^.realval)
|
| LReal: OPM.SymWLReal(obj^.conval^.realval)
|
||||||
| String: OutName(obj^.conval^.ext^)
|
| String: OutName(obj^.conval^.ext^)
|
||||||
|
|
@ -1301,6 +1307,8 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
|
||||||
EnterTyp("INT16", Int, 2, int16typ);
|
EnterTyp("INT16", Int, 2, int16typ);
|
||||||
EnterTyp("INT32", Int, 4, int32typ);
|
EnterTyp("INT32", Int, 4, int32typ);
|
||||||
EnterTyp("INT64", Int, 8, int64typ);
|
EnterTyp("INT64", Int, 8, int64typ);
|
||||||
|
EnterTyp("SET32", Set, 4, set32typ);
|
||||||
|
EnterTyp("SET64", Set, 8, set64typ);
|
||||||
|
|
||||||
EnterProc("ADR", adrfn);
|
EnterProc("ADR", adrfn);
|
||||||
EnterProc("CC", ccfn);
|
EnterProc("CC", ccfn);
|
||||||
|
|
@ -1321,7 +1329,7 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
|
||||||
|
|
||||||
EnterTyp("BOOLEAN", Bool, 1, booltyp);
|
EnterTyp("BOOLEAN", Bool, 1, booltyp);
|
||||||
EnterTyp("CHAR", Char, 1, chartyp);
|
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("REAL", Real, 4, realtyp);
|
||||||
EnterTyp("LONGREAL", LReal, 8, lrltyp);
|
EnterTyp("LONGREAL", LReal, 8, lrltyp);
|
||||||
EnterTyp("HUGEINT", Int, 8, hinttyp);
|
EnterTyp("HUGEINT", Int, 8, hinttyp);
|
||||||
|
|
@ -1330,6 +1338,8 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
|
||||||
EnterTypeAlias("SHORTINT", sintobj);
|
EnterTypeAlias("SHORTINT", sintobj);
|
||||||
EnterTypeAlias("INTEGER", intobj);
|
EnterTypeAlias("INTEGER", intobj);
|
||||||
EnterTypeAlias("LONGINT", lintobj);
|
EnterTypeAlias("LONGINT", lintobj);
|
||||||
|
EnterTypeAlias("SET", setobj);
|
||||||
|
|
||||||
|
|
||||||
EnterBoolConst("FALSE", 0); (* 0 and 1 are compiler internal representation only *)
|
EnterBoolConst("FALSE", 0); (* 0 and 1 are compiler internal representation only *)
|
||||||
EnterBoolConst("TRUE", 1);
|
EnterBoolConst("TRUE", 1);
|
||||||
|
|
|
||||||
|
|
@ -145,6 +145,8 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
||||||
OPT.int16typ^.strobj^.linkadr := PredefinedType;
|
OPT.int16typ^.strobj^.linkadr := PredefinedType;
|
||||||
OPT.int32typ^.strobj^.linkadr := PredefinedType;
|
OPT.int32typ^.strobj^.linkadr := PredefinedType;
|
||||||
OPT.int64typ^.strobj^.linkadr := PredefinedType;
|
OPT.int64typ^.strobj^.linkadr := PredefinedType;
|
||||||
|
OPT.set32typ^.strobj^.linkadr := PredefinedType;
|
||||||
|
OPT.set64typ^.strobj^.linkadr := PredefinedType;
|
||||||
OPT.hinttyp.strobj.linkadr := PredefinedType;
|
OPT.hinttyp.strobj.linkadr := PredefinedType;
|
||||||
OPT.lrltyp^.strobj^.linkadr := PredefinedType;
|
OPT.lrltyp^.strobj^.linkadr := PredefinedType;
|
||||||
OPT.booltyp^.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 -IdxTrap "__HALT(-1)";
|
||||||
|
PROCEDURE -ToAdr(x: SYSTEM.INT64): SYSTEM.ADDRESS "(address)x";
|
||||||
|
|
||||||
PROCEDURE^ Finalize(o: SYSTEM.PTR);
|
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;
|
restInBuf := buf.size - offset;
|
||||||
IF restInBuf = 0 THEN r.res := n; r.eof := TRUE; RETURN
|
IF restInBuf = 0 THEN r.res := n; r.eof := TRUE; RETURN
|
||||||
ELSIF n > restInBuf THEN min := restInBuf ELSE min := n END;
|
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)
|
INC(offset, min); r.offset := offset; INC(xpos, min); DEC(n, min)
|
||||||
END;
|
END;
|
||||||
r.res := 0; r.eof := FALSE
|
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;
|
END;
|
||||||
restInBuf := bufsize - offset;
|
restInBuf := bufsize - offset;
|
||||||
IF n > restInBuf THEN min := restInBuf ELSE min := n END;
|
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;
|
INC(offset, min); r.offset := offset;
|
||||||
IF offset > buf.size THEN INC(buf.f.len, offset - buf.size); buf.size := offset END;
|
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
|
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)";
|
"write(fd, (void*)(address)(p), l)";
|
||||||
|
|
||||||
PROCEDURE Write*(h: FileHandle; p: SYSTEM.ADDRESS; l: LONGINT): ErrorCode;
|
PROCEDURE Write*(h: FileHandle; p: SYSTEM.ADDRESS; l: LONGINT): ErrorCode;
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,9 @@ uninstall:
|
||||||
|
|
||||||
|
|
||||||
runtime:
|
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) && $(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/Platform$(PLATFORM).Mod
|
||||||
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Heap.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/MathL.Mod
|
||||||
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Texts.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
|
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:
|
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