mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 08:42:24 +00:00
Tidy (#41)
* Deduplicate common constants into OPM and do some source format tidying. * Fix postpush buildall script to force checkout of updated buildall. * Show enlistment branch in makefiles * Support non-printables in string literals and tidy case alignment and constant literals. * Common code for MIN and MAX of integer types. * Common code for SInt/Int/LInt in ConstOp parameter preparation. * Common code for SInt/Int/LInt in Op parameter preparation. * Refactor SetIntType to work with byte size directly. Prepare to revert my incorrect VAL changes. * Original meaning of VAL restored. Many library files disabled until use of VAL in 64 bits fixed. * Make Reals.Mod independent of INTEGER size and add reals tests. * Implement fraction, IsInfinity and IsNaN in oocLowReal.Mod. * OPB little simplifications and ShorterSize/LongerSize functions. * Add test for alignment computability * Replace alignment constants with calculated alignment. * typ.size aware OPV.Convert * Add SYSTEM_INT64 and make tests name independent. * Remove SYSTEM.H includes (string.h and stdint.h). * Replace uses of uintptr_t and size_t with SYSTEM_ADDRESS. * Sad hack to make FreeBSD and OpenBSD happy with memcpy declaration. * Detect 64 bit on FreeBSD, and size_t defined on OpenBSD. * %zd not supportd by mingw, cast strnlen return to int. * Add debug for intermittent failure only on OpenBSD. * Add textTexts as a confidence test and tidy up a couple of other tests. * Update binary test process.
This commit is contained in:
parent
1f41d80b1e
commit
da88496c5f
224 changed files with 7494 additions and 8065 deletions
1944
src/compiler/OPB.Mod
1944
src/compiler/OPB.Mod
File diff suppressed because it is too large
Load diff
2710
src/compiler/OPC.Mod
2710
src/compiler/OPC.Mod
File diff suppressed because it is too large
Load diff
|
|
@ -79,6 +79,9 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
HFext = ".h"; (* header file extension *)
|
||||
SFtag = 0F7X; (* symbol file tag *)
|
||||
|
||||
|
||||
|
||||
|
||||
TYPE
|
||||
FileName = ARRAY 32 OF CHAR;
|
||||
|
||||
|
|
@ -89,11 +92,9 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
|
||||
ByteSize*, CharSize*, BoolSize*, SIntSize*, IntSize*,
|
||||
LIntSize*, SetSize*, RealSize*, LRealSize*, PointerSize*, ProcSize*, RecSize*,
|
||||
CharAlign*, BoolAlign*, SIntAlign*, IntAlign*,
|
||||
LIntAlign*, SetAlign*, RealAlign*, LRealAlign*, PointerAlign*, ProcAlign*, RecAlign*,
|
||||
MaxSet*: INTEGER;
|
||||
|
||||
MinSInt*, MinInt*, MinLInt*, MaxSInt*, MaxInt*, MaxLInt*, MaxIndex*: LONGINT;
|
||||
MaxIndex*: LONGINT;
|
||||
|
||||
MinReal*, MaxReal*, MinLReal*, MaxLReal*: LONGREAL;
|
||||
|
||||
|
|
@ -142,27 +143,30 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
i := 1; (* skip - *)
|
||||
WHILE s[i] # 0X DO
|
||||
CASE s[i] OF
|
||||
| "e": opt := opt / {extsf}
|
||||
| "s": opt := opt / {newsf}
|
||||
| "m": opt := opt / {mainprog}
|
||||
| "x": opt := opt / {inxchk}
|
||||
| "r": opt := opt / {ranchk}
|
||||
| "t": opt := opt / {typchk}
|
||||
|
||||
| "a": opt := opt / {assert}
|
||||
| "k": opt := opt / {ansi} (* undocumented *)
|
||||
| "p": opt := opt / {ptrinit}
|
||||
| "S": opt := opt / {dontasm}
|
||||
| "c": opt := opt / {dontlink}
|
||||
| "M": opt := opt / {mainlinkstat}
|
||||
| "e": opt := opt / {extsf}
|
||||
| "f": opt := opt / {notcoloroutput}
|
||||
| "F": opt := opt / {forcenewsym}
|
||||
| "V": opt := opt / {verbose}
|
||||
| "k": opt := opt / {ansi} (* undocumented *)
|
||||
| "m": opt := opt / {mainprog}
|
||||
| "p": opt := opt / {ptrinit}
|
||||
| "r": opt := opt / {ranchk}
|
||||
| "s": opt := opt / {newsf}
|
||||
| "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;
|
||||
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((Alignment = 4) OR (Alignment = 8))
|
||||
ASSERT((Alignment = 4) OR (Alignment = 8));
|
||||
Files.SetSearchPath("")
|
||||
| "F": opt := opt / {forcenewsym}
|
||||
| "M": opt := opt / {mainlinkstat}
|
||||
| "S": opt := opt / {dontasm}
|
||||
| "V": opt := opt / {verbose}
|
||||
ELSE
|
||||
LogWStr(" warning: option ");
|
||||
LogW(OptionChar);
|
||||
|
|
@ -458,15 +462,28 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
|
||||
|
||||
PROCEDURE FPrintReal*(VAR fp: LONGINT; real: REAL);
|
||||
BEGIN FPrint(fp, SYSTEM.VAL(LONGINT, real))
|
||||
VAR i: INTEGER; l: LONGINT;
|
||||
BEGIN
|
||||
IF SIZE(REAL) = SIZE(INTEGER) THEN
|
||||
SYSTEM.GET(SYSTEM.ADR(real), i); l := i;
|
||||
ELSE
|
||||
SYSTEM.GET(SYSTEM.ADR(real), l);
|
||||
END;
|
||||
FPrint(fp, l)
|
||||
END FPrintReal;
|
||||
|
||||
|
||||
PROCEDURE FPrintLReal*(VAR fp: LONGINT; lr: LONGREAL);
|
||||
VAR l, h: LONGINT;
|
||||
BEGIN
|
||||
SYSTEM.GET(SYSTEM.ADR(lr), l); SYSTEM.GET(SYSTEM.ADR(lr)+4, h);
|
||||
FPrint(fp, l); FPrint(fp, h)
|
||||
IF SIZE(LONGREAL) = SIZE(LONGINT) THEN
|
||||
(* 64 bit LONGINT *)
|
||||
FPrint(fp, SYSTEM.VAL(LONGINT, lr))
|
||||
ELSE
|
||||
(* 32 bit LONGINT *)
|
||||
SYSTEM.GET(SYSTEM.ADR(lr), l); SYSTEM.GET(SYSTEM.ADR(lr)+4, h);
|
||||
FPrint(fp, l); FPrint(fp, h)
|
||||
END
|
||||
END FPrintLReal;
|
||||
|
||||
|
||||
|
|
@ -484,10 +501,10 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
END GetProperty;
|
||||
|
||||
|
||||
PROCEDURE minus(i: LONGINT): LONGINT;
|
||||
PROCEDURE minusop(i: LONGINT): LONGINT;
|
||||
BEGIN
|
||||
RETURN -i;
|
||||
END minus;
|
||||
END minusop;
|
||||
|
||||
|
||||
PROCEDURE power0(i, j : LONGINT) : LONGINT; (* we would like to calculate exact Min Max values in GetProperties, not hardcode em, noch *)
|
||||
|
|
@ -508,34 +525,63 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
BEGIN
|
||||
LogWLn;
|
||||
LogWStr("Type Size Alignement"); 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("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;*)
|
||||
LogWLn;
|
||||
(*
|
||||
LogWStr("Min shortint "); LogWNum(MinSInt, 4); LogWLn;
|
||||
LogWStr("Max shortint "); LogWNum(MaxSInt, 4); LogWLn;
|
||||
LogWStr("Min integer "); LogWNum(MinInt, 4); LogWLn;
|
||||
LogWStr("Max integer "); LogWNum(MaxInt, 4); LogWLn;
|
||||
LogWStr("Min longint "); LogWNum(MinLInt, 4); LogWLn;
|
||||
*)
|
||||
END VerboseListSizes;
|
||||
|
||||
|
||||
PROCEDURE Min(a,b: INTEGER): INTEGER;
|
||||
BEGIN IF a<b THEN RETURN a ELSE RETURN b END
|
||||
END Min;
|
||||
(*
|
||||
PROCEDURE AlignSize*(size: LONGINT): INTEGER;
|
||||
VAR align: INTEGER;
|
||||
BEGIN
|
||||
IF size < Alignment THEN
|
||||
IF size > 8 THEN align := 16
|
||||
ELSIF size > 4 THEN align := 8
|
||||
ELSIF size > 2 THEN align := 4
|
||||
ELSE align := SHORT(size)
|
||||
END
|
||||
ELSE
|
||||
align := Alignment
|
||||
END;
|
||||
RETURN align
|
||||
END AlignSize;
|
||||
*)
|
||||
|
||||
PROCEDURE SignedMaximum*(bytecount: LONGINT): LONGINT;
|
||||
VAR result: LONGINT;
|
||||
BEGIN
|
||||
result := 1;
|
||||
result := SYSTEM.LSH(result, bytecount*8-1);
|
||||
RETURN result - 1;
|
||||
END SignedMaximum;
|
||||
|
||||
PROCEDURE SignedMinimum*(bytecount: LONGINT): LONGINT;
|
||||
BEGIN RETURN -SignedMaximum(bytecount) - 1
|
||||
END SignedMinimum;
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE GetProperties();
|
||||
VAR
|
||||
base: LONGINT;
|
||||
(* VAR base: LONGINT; *)
|
||||
BEGIN
|
||||
(* Fixed and Configuration.Mod based sizes have been initialised in
|
||||
the module startup code, and maybe overridden by the -Bnnn bootstrap
|
||||
|
|
@ -546,30 +592,6 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
LIntSize := IntSize * 2;
|
||||
SetSize := LIntSize;
|
||||
|
||||
(* Calculate all type alignments *)
|
||||
CharAlign := Min(Alignment, CharSize);
|
||||
BoolAlign := Min(Alignment, BoolSize);
|
||||
SIntAlign := Min(Alignment, SIntSize);
|
||||
RecAlign := Min(Alignment, RecSize);
|
||||
RealAlign := Min(Alignment, RealSize);
|
||||
LRealAlign := Min(Alignment, LRealSize);
|
||||
PointerAlign := Min(Alignment, PointerSize);
|
||||
ProcAlign := Min(Alignment, ProcSize);
|
||||
IntAlign := Min(Alignment, IntSize);
|
||||
LIntAlign := Min(Alignment, LIntSize);
|
||||
SetAlign := Min(Alignment, SetSize);
|
||||
|
||||
(* and I'd like to calculate it, not hardcode constants *)
|
||||
base := -2;
|
||||
MinSInt := ASH(base, SIntSize*8-2);
|
||||
MaxSInt := minus(MinSInt + 1);
|
||||
|
||||
MinInt := ASH(base, IntSize*8-2);
|
||||
MaxInt := minus(MinInt + 1);
|
||||
|
||||
MinLInt := ASH(base, LIntSize*8-2);
|
||||
MaxLInt := minus(MinLInt +1);
|
||||
|
||||
IF RealSize = 4 THEN MaxReal := 3.40282346D38
|
||||
ELSIF RealSize = 8 THEN MaxReal := 1.7976931348623157D307 * 9.999999
|
||||
(*should be 1.7976931348623157D308 *)
|
||||
|
|
@ -580,20 +602,17 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
(*should be 1.7976931348623157D308 *)
|
||||
END ;
|
||||
|
||||
MinReal := -MaxReal;
|
||||
MinReal := -MaxReal;
|
||||
MinLReal := -MaxLReal;
|
||||
|
||||
MaxSet := SetSize * 8 - 1;
|
||||
MaxIndex := MaxLInt; (* shouldn't it be like max(int)? so that for loop will be safe, noch *)
|
||||
MaxSet := SetSize * 8 - 1;
|
||||
MaxIndex := SignedMaximum(PointerSize);
|
||||
|
||||
IF Verbose THEN VerboseListSizes END;
|
||||
END GetProperties;
|
||||
|
||||
|
||||
|
||||
|
||||
(* ------------------------- Read Symbol File ------------------------- *)
|
||||
|
||||
|
||||
PROCEDURE SymRCh*(VAR ch: CHAR);
|
||||
BEGIN Files.Read(oldSF, ch)
|
||||
END SymRCh;
|
||||
|
|
@ -715,7 +734,7 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
PROCEDURE WriteInt* (i: LONGINT);
|
||||
VAR s: ARRAY 20 OF CHAR; i1, k: LONGINT;
|
||||
BEGIN
|
||||
IF (i = MinInt) OR (i = MinLInt) THEN
|
||||
IF (i = SignedMinimum(IntSize)) OR (i = SignedMinimum(LIntSize)) 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
|
||||
|
|
@ -733,7 +752,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 < MaxLInt) & (r > MinLInt) & (r = ENTIER(r)) THEN
|
||||
IF (r < SignedMaximum(LIntSize)) & (r > SignedMinimum(LIntSize)) & (r = ENTIER(r)) THEN
|
||||
IF suffx = "f" THEN WriteString("(REAL)") ELSE WriteString("(LONGREAL)") END ;
|
||||
WriteInt(ENTIER(r))
|
||||
ELSE
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -6,13 +6,49 @@ MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *)
|
|||
MaxStrLen* = 256;
|
||||
MaxIdLen = 256;
|
||||
|
||||
|
||||
(* Symbols values (also used as op values):
|
||||
| 0 1 2 3 4
|
||||
---|--------------------------------------------------------
|
||||
0 | null * / DIV MOD
|
||||
5 | & + - OR =
|
||||
10 | # < <= > >=
|
||||
15 | IN IS ^ . ,
|
||||
20 | : .. ) ] }
|
||||
25 | OF THEN DO TO BY
|
||||
30 | ( [ { ~ :=
|
||||
35 | number NIL string ident ;
|
||||
40 | | END ELSE ELSIF UNTIL
|
||||
45 | IF CASE WHILE REPEAT FOR
|
||||
50 | LOOP WITH EXIT RETURN ARRAY
|
||||
55 | RECORD POINTER BEGIN CONST TYPE
|
||||
60 | VAR PROCEDURE IMPORT MODULE eof
|
||||
*)
|
||||
|
||||
null* = 0; times* = 1; slash* = 2; div* = 3; mod* = 4;
|
||||
and* = 5; plus* = 6; minus* = 7; or* = 8; eql* = 9;
|
||||
neq* = 10; lss* = 11; leq* = 12; gtr* = 13; geq* = 14;
|
||||
in* = 15; is* = 16; arrow* = 17; period* = 18; comma* = 19;
|
||||
colon* = 20; upto* = 21; rparen* = 22; rbrak* = 23; rbrace* = 24;
|
||||
of* = 25; then* = 26; do* = 27; to* = 28; by* = 29;
|
||||
lparen* = 30; lbrak* = 31; lbrace* = 32; not* = 33; becomes* = 34;
|
||||
number* = 35; nil* = 36; string* = 37; ident* = 38; semicolon* = 39;
|
||||
bar* = 40; end* = 41; else* = 42; elsif* = 43; until* = 44;
|
||||
if* = 45; case* = 46; while* = 47; repeat* = 48; for* = 49;
|
||||
loop* = 50; with* = 51; exit* = 52; return* = 53; array* = 54;
|
||||
record* = 55; pointer* = 56; begin* = 57; const* = 58; type* = 59;
|
||||
var* = 60; procedure* = 61; import* = 62; module* = 63; eof* = 64;
|
||||
|
||||
(* Symbol numtyp values *)
|
||||
char* = 1; integer* = 2; real* = 3; longreal* = 4;
|
||||
|
||||
|
||||
TYPE
|
||||
Name* = ARRAY MaxIdLen OF CHAR;
|
||||
String* = ARRAY MaxStrLen OF CHAR;
|
||||
|
||||
(* name, str, numtyp, intval, realval, lrlval are implicit results of Get *)
|
||||
|
||||
VAR
|
||||
(* name, str, numtyp, intval, realval, lrlval are implicit results of Get *)
|
||||
name*: Name;
|
||||
str*: String;
|
||||
numtyp*: INTEGER; (* 1 = char, 2 = integer, 3 = real, 4 = longreal *)
|
||||
|
|
@ -20,43 +56,6 @@ MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *)
|
|||
realval*: REAL;
|
||||
lrlval*: LONGREAL;
|
||||
|
||||
(*symbols:
|
||||
| 0 1 2 3 4
|
||||
---|--------------------------------------------------------
|
||||
0 | null * / DIV MOD
|
||||
5 | & + - OR =
|
||||
10 | # < <= > >=
|
||||
15 | IN IS ^ . ,
|
||||
20 | : .. ) ] }
|
||||
25 | OF THEN DO TO BY
|
||||
30 | ( [ { ~ :=
|
||||
35 | number NIL string ident ;
|
||||
40 | | END ELSE ELSIF UNTIL
|
||||
45 | IF CASE WHILE REPEAT FOR
|
||||
50 | LOOP WITH EXIT RETURN ARRAY
|
||||
55 | RECORD POINTER BEGIN CONST TYPE
|
||||
60 | VAR PROCEDURE IMPORT MODULE eof *)
|
||||
|
||||
CONST
|
||||
(* numtyp values *)
|
||||
char = 1; integer = 2; real = 3; longreal = 4;
|
||||
|
||||
(*symbol values*)
|
||||
null = 0; times = 1; slash = 2; div = 3; mod = 4;
|
||||
and = 5; plus = 6; minus = 7; or = 8; eql = 9;
|
||||
neq = 10; lss = 11; leq = 12; gtr = 13; geq = 14;
|
||||
in = 15; is = 16; arrow = 17; period = 18; comma = 19;
|
||||
colon = 20; upto = 21; rparen = 22; rbrak = 23; rbrace = 24;
|
||||
of = 25; then = 26; do = 27; to = 28; by = 29;
|
||||
lparen = 30; lbrak = 31; lbrace = 32; not = 33; becomes = 34;
|
||||
number = 35; nil = 36; string = 37; ident = 38; semicolon = 39;
|
||||
bar = 40; end = 41; else = 42; elsif = 43; until = 44;
|
||||
if = 45; case = 46; while = 47; repeat = 48; for = 49;
|
||||
loop = 50; with = 51; exit = 52; return = 53; array = 54;
|
||||
record = 55; pointer = 56; begin = 57; const = 58; type = 59;
|
||||
var = 60; procedure = 61; import = 62; module = 63; eof = 64;
|
||||
|
||||
VAR
|
||||
ch: CHAR; (*current character*)
|
||||
|
||||
PROCEDURE err(n: INTEGER);
|
||||
|
|
@ -214,97 +213,99 @@ MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *)
|
|||
END
|
||||
END ;
|
||||
CASE ch OF (* ch > " " *)
|
||||
| 22X, 27X : Str(s)
|
||||
| "#" : s := neq; OPM.Get(ch)
|
||||
| "&" : s := and; OPM.Get(ch)
|
||||
| "(" : OPM.Get(ch);
|
||||
IF ch = "*" THEN Comment; Get(s)
|
||||
ELSE s := lparen
|
||||
END
|
||||
| ")" : s := rparen; OPM.Get(ch)
|
||||
| "*" : s := times; OPM.Get(ch)
|
||||
| "+" : s := plus; OPM.Get(ch)
|
||||
| "," : s := comma; OPM.Get(ch)
|
||||
| "-" : s := minus; OPM.Get(ch)
|
||||
| "." : OPM.Get(ch);
|
||||
IF ch = "." THEN OPM.Get(ch); s := upto ELSE s := period END
|
||||
| "/" : s := slash; OPM.Get(ch)
|
||||
| "0".."9": Number; s := number
|
||||
| ":" : OPM.Get(ch);
|
||||
IF ch = "=" THEN OPM.Get(ch); s := becomes ELSE s := colon END
|
||||
| ";" : s := semicolon; OPM.Get(ch)
|
||||
| "<" : OPM.Get(ch);
|
||||
IF ch = "=" THEN OPM.Get(ch); s := leq ELSE s := lss END
|
||||
| "=" : s := eql; OPM.Get(ch)
|
||||
| ">" : OPM.Get(ch);
|
||||
IF ch = "=" THEN OPM.Get(ch); s := geq ELSE s := gtr END
|
||||
| "A": Identifier(s); IF name = "ARRAY" THEN s := array END
|
||||
| "B": Identifier(s);
|
||||
IF name = "BEGIN" THEN s := begin
|
||||
ELSIF name = "BY" THEN s := by
|
||||
END
|
||||
| "C": Identifier(s);
|
||||
IF name = "CASE" THEN s := case
|
||||
ELSIF name = "CONST" THEN s := const
|
||||
END
|
||||
| "D": Identifier(s);
|
||||
IF name = "DO" THEN s := do
|
||||
ELSIF name = "DIV" THEN s := div
|
||||
END
|
||||
| "E": Identifier(s);
|
||||
IF name = "END" THEN s := end
|
||||
ELSIF name = "ELSE" THEN s := else
|
||||
ELSIF name = "ELSIF" THEN s := elsif
|
||||
ELSIF name = "EXIT" THEN s := exit
|
||||
END
|
||||
| "F": Identifier(s); IF name = "FOR" THEN s := for END
|
||||
| "I": Identifier(s);
|
||||
IF name = "IF" THEN s := if
|
||||
ELSIF name = "IN" THEN s := in
|
||||
ELSIF name = "IS" THEN s := is
|
||||
ELSIF name = "IMPORT" THEN s := import
|
||||
END
|
||||
| "L": Identifier(s); IF name = "LOOP" THEN s := loop END
|
||||
| "M": Identifier(s);
|
||||
IF name = "MOD" THEN s := mod
|
||||
ELSIF name = "MODULE" THEN s := module
|
||||
END
|
||||
| "N": Identifier(s); IF name = "NIL" THEN s := nil END
|
||||
| "O": Identifier(s);
|
||||
IF name = "OR" THEN s := or
|
||||
ELSIF name = "OF" THEN s := of
|
||||
END
|
||||
| "P": Identifier(s);
|
||||
IF name = "PROCEDURE" THEN s := procedure
|
||||
ELSIF name = "POINTER" THEN s := pointer
|
||||
END
|
||||
| "R": Identifier(s);
|
||||
IF name = "RECORD" THEN s := record
|
||||
ELSIF name = "REPEAT" THEN s := repeat
|
||||
ELSIF name = "RETURN" THEN s := return
|
||||
END
|
||||
| "T": Identifier(s);
|
||||
IF name = "THEN" THEN s := then
|
||||
ELSIF name = "TO" THEN s := to
|
||||
ELSIF name = "TYPE" THEN s := type
|
||||
END
|
||||
| "U": Identifier(s); IF name = "UNTIL" THEN s := until END
|
||||
| "V": Identifier(s); IF name = "VAR" THEN s := var END
|
||||
| "W": Identifier(s);
|
||||
IF name = "WHILE" THEN s := while
|
||||
ELSIF name = "WITH" THEN s := with
|
||||
END
|
||||
| "G".."H", "J", "K", "Q", "S", "X".."Z": Identifier(s)
|
||||
| "[" : s := lbrak; OPM.Get(ch)
|
||||
| "]" : s := rbrak; OPM.Get(ch)
|
||||
| "^" : s := arrow; OPM.Get(ch)
|
||||
| "a".."z": Identifier(s)
|
||||
| "{" : s := lbrace; OPM.Get(ch)
|
||||
| "|" : s := bar; OPM.Get(ch)
|
||||
| "}" : s := rbrace; OPM.Get(ch)
|
||||
| "~" : s := not; OPM.Get(ch)
|
||||
| 7FX : s := upto; OPM.Get(ch)
|
||||
ELSE s := null; OPM.Get(ch)
|
||||
| 22X,
|
||||
27X: Str(s)
|
||||
| "#": s := neq; OPM.Get(ch)
|
||||
| "&": s := and; OPM.Get(ch)
|
||||
| "(": OPM.Get(ch);
|
||||
IF ch = "*" THEN Comment; Get(s) ELSE s := lparen END
|
||||
| ")": s := rparen; OPM.Get(ch)
|
||||
| "*": s := times; OPM.Get(ch)
|
||||
| "+": s := plus; OPM.Get(ch)
|
||||
| ",": s := comma; OPM.Get(ch)
|
||||
| "-": s := minus; OPM.Get(ch)
|
||||
| ".": OPM.Get(ch);
|
||||
IF ch = "." THEN OPM.Get(ch); s := upto ELSE s := period END
|
||||
| "/": s := slash; OPM.Get(ch)
|
||||
| "0".."9": Number; s := number
|
||||
| ":": OPM.Get(ch);
|
||||
IF ch = "=" THEN OPM.Get(ch); s := becomes ELSE s := colon END
|
||||
| ";": s := semicolon; OPM.Get(ch)
|
||||
| "<": OPM.Get(ch);
|
||||
IF ch = "=" THEN OPM.Get(ch); s := leq ELSE s := lss END
|
||||
| "=": s := eql; OPM.Get(ch)
|
||||
| ">": OPM.Get(ch);
|
||||
IF ch = "=" THEN OPM.Get(ch); s := geq ELSE s := gtr END
|
||||
| "A": Identifier(s); IF name = "ARRAY" THEN s := array END
|
||||
| "B": Identifier(s);
|
||||
IF name = "BEGIN" THEN s := begin
|
||||
ELSIF name = "BY" THEN s := by
|
||||
END
|
||||
| "C": Identifier(s);
|
||||
IF name = "CASE" THEN s := case
|
||||
ELSIF name = "CONST" THEN s := const
|
||||
END
|
||||
| "D": Identifier(s);
|
||||
IF name = "DO" THEN s := do
|
||||
ELSIF name = "DIV" THEN s := div
|
||||
END
|
||||
| "E": Identifier(s);
|
||||
IF name = "END" THEN s := end
|
||||
ELSIF name = "ELSE" THEN s := else
|
||||
ELSIF name = "ELSIF" THEN s := elsif
|
||||
ELSIF name = "EXIT" THEN s := exit
|
||||
END
|
||||
| "F": Identifier(s); IF name = "FOR" THEN s := for END
|
||||
| "I": Identifier(s);
|
||||
IF name = "IF" THEN s := if
|
||||
ELSIF name = "IN" THEN s := in
|
||||
ELSIF name = "IS" THEN s := is
|
||||
ELSIF name = "IMPORT" THEN s := import
|
||||
END
|
||||
| "L": Identifier(s); IF name = "LOOP" THEN s := loop END
|
||||
| "M": Identifier(s);
|
||||
IF name = "MOD" THEN s := mod
|
||||
ELSIF name = "MODULE" THEN s := module
|
||||
END
|
||||
| "N": Identifier(s); IF name = "NIL" THEN s := nil END
|
||||
| "O": Identifier(s);
|
||||
IF name = "OR" THEN s := or
|
||||
ELSIF name = "OF" THEN s := of
|
||||
END
|
||||
| "P": Identifier(s);
|
||||
IF name = "PROCEDURE" THEN s := procedure
|
||||
ELSIF name = "POINTER" THEN s := pointer
|
||||
END
|
||||
| "R": Identifier(s);
|
||||
IF name = "RECORD" THEN s := record
|
||||
ELSIF name = "REPEAT" THEN s := repeat
|
||||
ELSIF name = "RETURN" THEN s := return
|
||||
END
|
||||
| "T": Identifier(s);
|
||||
IF name = "THEN" THEN s := then
|
||||
ELSIF name = "TO" THEN s := to
|
||||
ELSIF name = "TYPE" THEN s := type
|
||||
END
|
||||
| "U": Identifier(s); IF name = "UNTIL" THEN s := until END
|
||||
| "V": Identifier(s); IF name = "VAR" THEN s := var END
|
||||
| "W": Identifier(s);
|
||||
IF name = "WHILE" THEN s := while
|
||||
ELSIF name = "WITH" THEN s := with
|
||||
END
|
||||
| "G".."H",
|
||||
"J".."K",
|
||||
"Q", "S",
|
||||
"X".."Z": Identifier(s)
|
||||
| "[": s := lbrak; OPM.Get(ch)
|
||||
| "]": s := rbrak; OPM.Get(ch)
|
||||
| "^": s := arrow; OPM.Get(ch)
|
||||
| "a".."z": Identifier(s)
|
||||
| "{": s := lbrace; OPM.Get(ch)
|
||||
| "|": s := bar; OPM.Get(ch)
|
||||
| "}": s := rbrace; OPM.Get(ch)
|
||||
| "~": s := not; OPM.Get(ch)
|
||||
| 7FX: s := upto; OPM.Get(ch)
|
||||
ELSE s := null; OPM.Get(ch)
|
||||
END ;
|
||||
sym := s
|
||||
END Get;
|
||||
|
|
|
|||
1448
src/compiler/OPT.Mod
1448
src/compiler/OPT.Mod
File diff suppressed because it is too large
Load diff
1112
src/compiler/OPV.Mod
1112
src/compiler/OPV.Mod
File diff suppressed because it is too large
Load diff
|
|
@ -188,6 +188,7 @@ errors[245] := "guarded pointer variable may be manipulated by non-local operati
|
|||
errors[301] := "implicit type cast";
|
||||
errors[306] := "inappropriate symbol file ignored";
|
||||
errors[307] := "no ELSE symbol after CASE statement sequence may lead to trap"; (* new warning, -- noch *)
|
||||
errors[308] := "SYSTEM.VAL result includes memory past end of source variable"; (* DCWB *)
|
||||
|
||||
END errors.
|
||||
(*
|
||||
|
|
@ -196,8 +197,8 @@ Run-time Error Messages
|
|||
0 silent HALT(0)
|
||||
1..255 HALT(n), cf. SYSTEM_halt
|
||||
-1 assertion failed, cf. SYSTEM_assert
|
||||
-2 invalid array index
|
||||
-3 function procedure without RETURN statement
|
||||
-2 invalid array index
|
||||
-3 function procedure without RETURN statement
|
||||
-4 invalid case in CASE statement
|
||||
-5 type guard failed
|
||||
-6 implicit type guard in record assignment failed
|
||||
|
|
|
|||
|
|
@ -615,9 +615,12 @@ Especially Length would become fairly complex.
|
|||
END ReadLInt;
|
||||
|
||||
PROCEDURE ReadSet* (VAR R: Rider; VAR x: SET);
|
||||
VAR b: ARRAY 4 OF CHAR;
|
||||
(* Reads 32 bits as a SET value (even on 64 bit systems. See Oakwood appendix 1.2.5.4 *)
|
||||
VAR b: ARRAY 4 OF CHAR; l: LONGINT;
|
||||
BEGIN ReadBytes(R, b, 4);
|
||||
x := SYSTEM.VAL(SET, ORD(b[0]) + ORD(b[1])*100H + ORD(b[2])*10000H + ORD(b[3])*1000000H)
|
||||
(* Need to read via a LONGINT to provide correct behaviour for 64 bit sets. *)
|
||||
l := ORD(b[0]) + ORD(b[1])*100H + ORD(b[2])*10000H + ORD(b[3])*1000000H;
|
||||
x := SYSTEM.VAL(SET, l)
|
||||
END ReadSet;
|
||||
|
||||
PROCEDURE ReadReal* (VAR R: Rider; VAR x: REAL);
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ MODULE Heap;
|
|||
correctly regardless of the size of an address. Specifically on 32 bit address
|
||||
architectures with 64 bit LONGINT, it loads 32 bits and extends it to LONGINT
|
||||
rather than loading 64 bits. *)
|
||||
PROCEDURE -FetchAddress(pointer: LONGINT): LONGINT "(LONGINT)(uintptr_t)(*((void**)((uintptr_t)pointer)))";
|
||||
PROCEDURE -FetchAddress(pointer: LONGINT): LONGINT "(LONGINT)(SYSTEM_ADDRESS)(*((void**)((SYSTEM_ADDRESS)pointer)))";
|
||||
|
||||
PROCEDURE ExtendHeap(blksz: LONGINT);
|
||||
VAR size, chnk, j, next: LONGINT;
|
||||
|
|
|
|||
|
|
@ -106,10 +106,10 @@ BEGIN RETURN (e = ECONNREFUSED()) OR (e = ECONNABORTED())
|
|||
|
||||
(* OS memory allocaton *)
|
||||
|
||||
PROCEDURE -allocate(size: LONGINT): LONGINT "(LONGINT)(uintptr_t)((void*)malloc((size_t)size))";
|
||||
PROCEDURE -allocate(size: LONGINT): LONGINT "(LONGINT)(SYSTEM_ADDRESS)((void*)malloc((size_t)size))";
|
||||
PROCEDURE OSAllocate*(size: LONGINT): LONGINT; BEGIN RETURN allocate(size) END OSAllocate;
|
||||
|
||||
PROCEDURE -free(address: LONGINT) "free((void*)(uintptr_t)address)";
|
||||
PROCEDURE -free(address: LONGINT) "free((void*)(SYSTEM_ADDRESS)address)";
|
||||
PROCEDURE OSFree*(address: LONGINT); BEGIN free(address) END OSFree;
|
||||
|
||||
|
||||
|
|
@ -189,7 +189,7 @@ END ArgPos;
|
|||
|
||||
(* Signals and traps *)
|
||||
|
||||
PROCEDURE -sethandler(s: INTEGER; h: SignalHandler) "SystemSetHandler(s, (uintptr_t)h)";
|
||||
PROCEDURE -sethandler(s: INTEGER; h: SignalHandler) "SystemSetHandler(s, (SYSTEM_ADDRESS)h)";
|
||||
|
||||
PROCEDURE SetInterruptHandler*(handler: SignalHandler);
|
||||
BEGIN sethandler(2, handler); END SetInterruptHandler;
|
||||
|
|
@ -369,7 +369,7 @@ END Size;
|
|||
|
||||
|
||||
PROCEDURE -readfile (fd: LONGINT; p: LONGINT; l: LONGINT): LONGINT
|
||||
"read(fd, (void*)(uintptr_t)(p), l)";
|
||||
"read(fd, (void*)(SYSTEM_ADDRESS)(p), l)";
|
||||
|
||||
PROCEDURE Read*(h: FileHandle; p: LONGINT; l: LONGINT; VAR n: LONGINT): ErrorCode;
|
||||
BEGIN
|
||||
|
|
@ -386,7 +386,7 @@ END ReadBuf;
|
|||
|
||||
|
||||
PROCEDURE -writefile(fd: LONGINT; p: LONGINT; l: LONGINT): LONGINT
|
||||
"write(fd, (void*)(uintptr_t)(p), l)";
|
||||
"write(fd, (void*)(SYSTEM_ADDRESS)(p), l)";
|
||||
|
||||
PROCEDURE Write*(h: FileHandle; p: LONGINT; l: LONGINT): ErrorCode;
|
||||
VAR written: LONGINT;
|
||||
|
|
|
|||
|
|
@ -104,10 +104,10 @@ BEGIN RETURN (e = ECONNREFUSED()) OR (e = ECONNABORTED())
|
|||
|
||||
(* OS memory allocaton *)
|
||||
|
||||
PROCEDURE -allocate(size: LONGINT): LONGINT "(LONGINT)(uintptr_t)((void*)HeapAlloc(GetProcessHeap(), 0, (size_t)size))";
|
||||
PROCEDURE -allocate(size: LONGINT): LONGINT "(LONGINT)(SYSTEM_ADDRESS)((void*)HeapAlloc(GetProcessHeap(), 0, (size_t)size))";
|
||||
PROCEDURE OSAllocate*(size: LONGINT): LONGINT; BEGIN RETURN allocate(size) END OSAllocate;
|
||||
|
||||
PROCEDURE -free(address: LONGINT) "HeapFree(GetProcessHeap(), 0, (void*)(uintptr_t)address)";
|
||||
PROCEDURE -free(address: LONGINT) "HeapFree(GetProcessHeap(), 0, (void*)(SYSTEM_ADDRESS)address)";
|
||||
PROCEDURE OSFree*(address: LONGINT); BEGIN free(address) END OSFree;
|
||||
|
||||
|
||||
|
|
@ -200,8 +200,8 @@ END ArgPos;
|
|||
|
||||
(* Ctrl/c handling *)
|
||||
|
||||
PROCEDURE -SetInterruptHandler*(h: SignalHandler) "SystemSetInterruptHandler((uintptr_t)h)";
|
||||
PROCEDURE -SetQuitHandler* (h: SignalHandler) "SystemSetQuitHandler((uintptr_t)h)";
|
||||
PROCEDURE -SetInterruptHandler*(h: SignalHandler) "SystemSetInterruptHandler((SYSTEM_ADDRESS)h)";
|
||||
PROCEDURE -SetQuitHandler* (h: SignalHandler) "SystemSetQuitHandler((SYSTEM_ADDRESS)h)";
|
||||
|
||||
PROCEDURE SetBadInstructionHandler*(handler: SignalHandler);
|
||||
BEGIN (* TODO *) END SetBadInstructionHandler;
|
||||
|
|
@ -232,7 +232,7 @@ BEGIN
|
|||
YMDHMStoClock(styear(), stmon(), stmday(), sthour(), stmin(), stsec(), t, d);
|
||||
END GetClock;
|
||||
|
||||
PROCEDURE -GetTickCount(): LONGINT "(LONGINT)(uint32_t)GetTickCount()";
|
||||
PROCEDURE -GetTickCount(): LONGINT "(LONGINT)(SYSTEM_CARD32)GetTickCount()";
|
||||
|
||||
PROCEDURE Time*(): LONGINT;
|
||||
VAR ms: LONGINT;
|
||||
|
|
@ -293,16 +293,16 @@ PROCEDURE Error*(): ErrorCode; BEGIN RETURN err() END Error;
|
|||
|
||||
(* File system *)
|
||||
|
||||
PROCEDURE -invalidHandleValue(): LONGINT "((LONGINT)(uintptr_t)INVALID_HANDLE_VALUE)";
|
||||
PROCEDURE -invalidHandleValue(): LONGINT "((LONGINT)(SYSTEM_ADDRESS)INVALID_HANDLE_VALUE)";
|
||||
|
||||
PROCEDURE -openrw (n: ARRAY OF CHAR): LONGINT
|
||||
"(LONGINT)(uintptr_t)CreateFile((char*)n, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)";
|
||||
"(LONGINT)(SYSTEM_ADDRESS)CreateFile((char*)n, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)";
|
||||
|
||||
PROCEDURE -openro (n: ARRAY OF CHAR): LONGINT
|
||||
"(LONGINT)(uintptr_t)CreateFile((char*)n, GENERIC_READ , FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)";
|
||||
"(LONGINT)(SYSTEM_ADDRESS)CreateFile((char*)n, GENERIC_READ , FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)";
|
||||
|
||||
PROCEDURE -opennew(n: ARRAY OF CHAR): LONGINT
|
||||
"(LONGINT)(uintptr_t)CreateFile((char*)n, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)";
|
||||
"(LONGINT)(SYSTEM_ADDRESS)CreateFile((char*)n, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)";
|
||||
|
||||
|
||||
|
||||
|
|
@ -332,7 +332,7 @@ END New;
|
|||
|
||||
|
||||
|
||||
PROCEDURE -closeHandle(h: FileHandle): INTEGER "(INTEGER)CloseHandle((HANDLE)(uintptr_t)h)";
|
||||
PROCEDURE -closeHandle(h: FileHandle): INTEGER "(INTEGER)CloseHandle((HANDLE)(SYSTEM_ADDRESS)h)";
|
||||
|
||||
PROCEDURE Close*(h: FileHandle): ErrorCode;
|
||||
BEGIN
|
||||
|
|
@ -342,7 +342,7 @@ END Close;
|
|||
|
||||
|
||||
PROCEDURE -byHandleFileInformation "BY_HANDLE_FILE_INFORMATION bhfi";
|
||||
PROCEDURE -getFileInformationByHandle(h: FileHandle): INTEGER "(INTEGER)GetFileInformationByHandle((HANDLE)(uintptr_t)h, &bhfi)";
|
||||
PROCEDURE -getFileInformationByHandle(h: FileHandle): INTEGER "(INTEGER)GetFileInformationByHandle((HANDLE)(SYSTEM_ADDRESS)h, &bhfi)";
|
||||
PROCEDURE -bhfiMtimeHigh(): LONGINT "(LONGINT)bhfi.ftLastWriteTime.dwHighDateTime";
|
||||
PROCEDURE -bhfiMtimeLow(): LONGINT "(LONGINT)bhfi.ftLastWriteTime.dwLowDateTime";
|
||||
PROCEDURE -bhfiVsn(): LONGINT "(LONGINT)bhfi.dwVolumeSerialNumber";
|
||||
|
|
@ -401,7 +401,7 @@ END MTimeAsClock;
|
|||
|
||||
PROCEDURE -largeInteger "LARGE_INTEGER li";
|
||||
PROCEDURE -liLongint(): LONGINT "(LONGINT)li.QuadPart";
|
||||
PROCEDURE -getFileSize(h: FileHandle): INTEGER "(INTEGER)GetFileSizeEx((HANDLE)(uintptr_t)h, &li)";
|
||||
PROCEDURE -getFileSize(h: FileHandle): INTEGER "(INTEGER)GetFileSizeEx((HANDLE)(SYSTEM_ADDRESS)h, &li)";
|
||||
|
||||
PROCEDURE Size*(h: FileHandle; VAR l: LONGINT): ErrorCode;
|
||||
BEGIN
|
||||
|
|
@ -413,7 +413,7 @@ END Size;
|
|||
|
||||
|
||||
PROCEDURE -readfile (fd: LONGINT; p: LONGINT; l: LONGINT; VAR n: LONGINT): INTEGER
|
||||
"(INTEGER)ReadFile ((HANDLE)(uintptr_t)fd, (void*)(uintptr_t)(p), (DWORD)l, (DWORD*)n, 0)";
|
||||
"(INTEGER)ReadFile ((HANDLE)(SYSTEM_ADDRESS)fd, (void*)(SYSTEM_ADDRESS)(p), (DWORD)l, (DWORD*)n, 0)";
|
||||
|
||||
PROCEDURE Read*(h: FileHandle; p: LONGINT; l: LONGINT; VAR n: LONGINT): ErrorCode;
|
||||
VAR result: INTEGER;
|
||||
|
|
@ -434,7 +434,7 @@ END ReadBuf;
|
|||
|
||||
|
||||
PROCEDURE -writefile(fd: LONGINT; p: LONGINT; l: LONGINT): INTEGER
|
||||
"(INTEGER)WriteFile((HANDLE)(uintptr_t)fd, (void*)(uintptr_t)(p), (DWORD)l, 0,0)";
|
||||
"(INTEGER)WriteFile((HANDLE)(SYSTEM_ADDRESS)fd, (void*)(SYSTEM_ADDRESS)(p), (DWORD)l, 0,0)";
|
||||
|
||||
PROCEDURE Write*(h: FileHandle; p: LONGINT; l: LONGINT): ErrorCode;
|
||||
BEGIN
|
||||
|
|
@ -443,7 +443,7 @@ END Write;
|
|||
|
||||
|
||||
|
||||
PROCEDURE -flushFileBuffers(h: FileHandle): INTEGER "(INTEGER)FlushFileBuffers((HANDLE)(uintptr_t)h)";
|
||||
PROCEDURE -flushFileBuffers(h: FileHandle): INTEGER "(INTEGER)FlushFileBuffers((HANDLE)(SYSTEM_ADDRESS)h)";
|
||||
|
||||
PROCEDURE Sync*(h: FileHandle): ErrorCode;
|
||||
BEGIN
|
||||
|
|
@ -453,7 +453,7 @@ END Sync;
|
|||
|
||||
|
||||
PROCEDURE -setFilePointerEx(h: FileHandle; o: LONGINT; r: INTEGER; VAR rc: INTEGER)
|
||||
"li.QuadPart=o; *rc = (INTEGER)SetFilePointerEx((HANDLE)(uintptr_t)h, li, 0, (DWORD)r)";
|
||||
"li.QuadPart=o; *rc = (INTEGER)SetFilePointerEx((HANDLE)(SYSTEM_ADDRESS)h, li, 0, (DWORD)r)";
|
||||
|
||||
PROCEDURE -seekset(): INTEGER "FILE_BEGIN";
|
||||
PROCEDURE -seekcur(): INTEGER "FILE_CURRENT";
|
||||
|
|
@ -469,9 +469,9 @@ END Seek;
|
|||
|
||||
|
||||
|
||||
PROCEDURE -setEndOfFile(h: FileHandle): INTEGER "(INTEGER)SetEndOfFile((HANDLE)(uintptr_t)h)";
|
||||
PROCEDURE -setEndOfFile(h: FileHandle): INTEGER "(INTEGER)SetEndOfFile((HANDLE)(SYSTEM_ADDRESS)h)";
|
||||
PROCEDURE -getFilePos(h: FileHandle; VAR r: LONGINT; VAR rc: INTEGER)
|
||||
"LARGE_INTEGER liz = {0}; *rc = (INTEGER)SetFilePointerEx((HANDLE)(uintptr_t)h, liz, &li, FILE_CURRENT); *r = (LONGINT)li.QuadPart";
|
||||
"LARGE_INTEGER liz = {0}; *rc = (INTEGER)SetFilePointerEx((HANDLE)(SYSTEM_ADDRESS)h, liz, &li, FILE_CURRENT); *r = (LONGINT)li.QuadPart";
|
||||
|
||||
PROCEDURE Truncate*(h: FileHandle; limit: LONGINT): ErrorCode;
|
||||
VAR rc: INTEGER; oldpos: LONGINT;
|
||||
|
|
@ -529,8 +529,8 @@ PROCEDURE Exit*(code: INTEGER);
|
|||
BEGIN exit(code) END Exit;
|
||||
|
||||
|
||||
PROCEDURE -errstring(s: ARRAY OF CHAR) 'WriteFile((HANDLE)(uintptr_t)Platform_StdOut, s, s__len-1, 0,0)';
|
||||
PROCEDURE -errc (c: CHAR) 'WriteFile((HANDLE)(uintptr_t)Platform_StdOut, &c, 1, 0,0)';
|
||||
PROCEDURE -errstring(s: ARRAY OF CHAR) 'WriteFile((HANDLE)(SYSTEM_ADDRESS)Platform_StdOut, s, s__len-1, 0,0)';
|
||||
PROCEDURE -errc (c: CHAR) 'WriteFile((HANDLE)(SYSTEM_ADDRESS)Platform_StdOut, &c, 1, 0,0)';
|
||||
PROCEDURE errch(c: CHAR); BEGIN errc(c) END errch;
|
||||
PROCEDURE errln; BEGIN errch(0DX); errch(0AX) END errln;
|
||||
|
||||
|
|
@ -589,9 +589,9 @@ PROCEDURE TestLittleEndian;
|
|||
BEGIN i := 1; SYSTEM.GET(SYSTEM.ADR(i), LittleEndian); END TestLittleEndian;
|
||||
|
||||
|
||||
PROCEDURE -getstdinhandle(): FileHandle "(uintptr_t)GetStdHandle(STD_INPUT_HANDLE)";
|
||||
PROCEDURE -getstdouthandle(): FileHandle "(uintptr_t)GetStdHandle(STD_OUTPUT_HANDLE)";
|
||||
PROCEDURE -getstderrhandle(): FileHandle "(uintptr_t)GetStdHandle(STD_ERROR_HANDLE)";
|
||||
PROCEDURE -getstdinhandle(): FileHandle "(SYSTEM_ADDRESS)GetStdHandle(STD_INPUT_HANDLE)";
|
||||
PROCEDURE -getstdouthandle(): FileHandle "(SYSTEM_ADDRESS)GetStdHandle(STD_OUTPUT_HANDLE)";
|
||||
PROCEDURE -getstderrhandle(): FileHandle "(SYSTEM_ADDRESS)GetStdHandle(STD_ERROR_HANDLE)";
|
||||
PROCEDURE -getpid(): INTEGER "(INTEGER)GetCurrentProcessId()";
|
||||
|
||||
BEGIN
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ void SYSTEM_INHERIT(LONGINT *t, LONGINT *t0)
|
|||
void SYSTEM_ENUMP(void *adr, LONGINT n, void (*P)())
|
||||
{
|
||||
while (n > 0) {
|
||||
P((LONGINT)(uintptr_t)(*((void**)(adr))));
|
||||
P((LONGINT)(SYSTEM_ADDRESS)(*((void**)(adr))));
|
||||
adr = ((void**)adr) + 1;
|
||||
n--;
|
||||
}
|
||||
|
|
@ -106,7 +106,7 @@ SYSTEM_PTR SYSTEM_NEWARR(LONGINT *typ, LONGINT elemsz, int elemalgn, int nofdim,
|
|||
else if (typ == (LONGINT*)POINTER__typ) {
|
||||
/* element type is a pointer */
|
||||
x = Heap_NEWBLK(size + nofelems * sizeof(LONGINT));
|
||||
p = (LONGINT*)(uintptr_t)x[-1];
|
||||
p = (LONGINT*)(SYSTEM_ADDRESS)x[-1];
|
||||
p[-nofelems] = *p; /* build new type desc in situ: 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */
|
||||
p -= nofelems - 1; n = 1; /* n =1 for skipping the size field */
|
||||
while (n <= nofelems) {*p = n*sizeof(LONGINT); p++; n++;}
|
||||
|
|
@ -119,7 +119,7 @@ SYSTEM_PTR SYSTEM_NEWARR(LONGINT *typ, LONGINT elemsz, int elemalgn, int nofdim,
|
|||
while (ptab[nofptrs] >= 0) {nofptrs++;} /* number of pointers per element */
|
||||
nptr = nofelems * nofptrs; /* total number of pointers */
|
||||
x = Heap_NEWBLK(size + nptr * sizeof(LONGINT));
|
||||
p = (LONGINT*)(uintptr_t)x[- 1];
|
||||
p = (LONGINT*)(SYSTEM_ADDRESS)x[- 1];
|
||||
p[-nptr] = *p; /* build new type desc in situ; 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */
|
||||
p -= nptr - 1; n = 0; off = dataoff;
|
||||
while (n < nofelems) {i = 0;
|
||||
|
|
@ -155,7 +155,7 @@ typedef void (*SystemSignalHandler)(INTEGER); // = Platform_SignalHandler
|
|||
// (Ignore other signals)
|
||||
}
|
||||
|
||||
void SystemSetHandler(int s, uintptr_t h) {
|
||||
void SystemSetHandler(int s, SYSTEM_ADDRESS h) {
|
||||
if (s >= 2 && s <= 4) {
|
||||
int needtosetsystemhandler = handler[s-2] == 0;
|
||||
handler[s-2] = (SystemSignalHandler)h;
|
||||
|
|
@ -194,12 +194,12 @@ typedef void (*SystemSignalHandler)(INTEGER); // = Platform_SignalHandler
|
|||
}
|
||||
}
|
||||
|
||||
void SystemSetInterruptHandler(uintptr_t h) {
|
||||
void SystemSetInterruptHandler(SYSTEM_ADDRESS h) {
|
||||
EnsureConsoleCtrlHandler();
|
||||
SystemInterruptHandler = (SystemSignalHandler)h;
|
||||
}
|
||||
|
||||
void SystemSetQuitHandler(uintptr_t h) {
|
||||
void SystemSetQuitHandler(SYSTEM_ADDRESS h) {
|
||||
EnsureConsoleCtrlHandler();
|
||||
SystemQuitHandler = (SystemSignalHandler)h;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,28 +1,38 @@
|
|||
#ifndef SYSTEM__h
|
||||
#define SYSTEM__h
|
||||
|
||||
#ifndef _WIN32
|
||||
|
||||
// Building for a Unix/Linux based system
|
||||
#include <string.h> // For memcpy ...
|
||||
#include <stdint.h> // For uintptr_t ...
|
||||
|
||||
#if defined(_WIN64)
|
||||
typedef long long SYSTEM_INT64;
|
||||
typedef unsigned long long SYSTEM_CARD64;
|
||||
#else
|
||||
|
||||
// Building for Windows platform with either mingw under cygwin, or the MS C compiler
|
||||
#ifdef _WIN64
|
||||
typedef unsigned long long size_t;
|
||||
typedef unsigned long long uintptr_t;
|
||||
#else
|
||||
typedef unsigned int size_t;
|
||||
typedef unsigned int uintptr_t;
|
||||
#endif /* _WIN64 */
|
||||
|
||||
typedef unsigned int uint32_t;
|
||||
void * __cdecl memcpy(void * dest, const void * source, size_t size);
|
||||
|
||||
typedef long SYSTEM_INT64;
|
||||
typedef unsigned long SYSTEM_CARD64;
|
||||
#endif
|
||||
|
||||
typedef int SYSTEM_INT32;
|
||||
typedef unsigned int SYSTEM_CARD32;
|
||||
typedef short int SYSTEM_INT16;
|
||||
typedef unsigned short int SYSTEM_CARD16;
|
||||
typedef signed char SYSTEM_INT8;
|
||||
typedef unsigned char SYSTEM_CARD8;
|
||||
|
||||
#if (__SIZEOF_POINTER__ == 8) || defined(_WIN64) || defined(__LP64__)
|
||||
#if defined(_WIN64)
|
||||
typedef unsigned long long size_t;
|
||||
#else
|
||||
typedef unsigned long size_t;
|
||||
#endif
|
||||
#else
|
||||
typedef unsigned int size_t;
|
||||
#endif
|
||||
|
||||
#define SYSTEM_ADDRESS size_t
|
||||
#define _SIZE_T_DECLARED // For FreeBSD
|
||||
#define _SIZE_T_DEFINED_ // For OpenBSD
|
||||
|
||||
void *memcpy(void *dest, const void *source, SYSTEM_ADDRESS size);
|
||||
|
||||
|
||||
|
||||
// The compiler uses 'import' and 'export' which translate to 'extern' and
|
||||
// nothing respectively.
|
||||
|
|
@ -70,6 +80,7 @@ typedef unsigned char U_SHORTINT;
|
|||
#endif
|
||||
|
||||
typedef U_LONGINT SET;
|
||||
typedef U_LONGINT U_SET;
|
||||
|
||||
|
||||
// OS Memory allocation interfaces are in PlatformXXX.Mod
|
||||
|
|
@ -96,10 +107,10 @@ extern LONGINT SYSTEM_ENTIER (double x);
|
|||
// Signal handling in SYSTEM.c
|
||||
|
||||
#ifndef _WIN32
|
||||
extern void SystemSetHandler(int s, uintptr_t h);
|
||||
extern void SystemSetHandler(int s, SYSTEM_ADDRESS h);
|
||||
#else
|
||||
extern void SystemSetInterruptHandler(uintptr_t h);
|
||||
extern void SystemSetQuitHandler (uintptr_t h);
|
||||
extern void SystemSetInterruptHandler(SYSTEM_ADDRESS h);
|
||||
extern void SystemSetQuitHandler (SYSTEM_ADDRESS h);
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -122,20 +133,20 @@ static int __str_cmp(CHAR *x, CHAR *y){
|
|||
|
||||
#define __COPY(s, d, n) {char*_a=(void*)s,*_b=(void*)d; LONGINT _i=0,_t=n-1; \
|
||||
while(_i<_t&&((_b[_i]=_a[_i])!=0)){_i++;};_b[_i]=0;}
|
||||
#define __DUP(x, l, t) x=(void*)memcpy((void*)(uintptr_t)Platform_OSAllocate(l*sizeof(t)),x,l*sizeof(t))
|
||||
#define __DUP(x, l, t) x=(void*)memcpy((void*)(SYSTEM_ADDRESS)Platform_OSAllocate(l*sizeof(t)),x,l*sizeof(t))
|
||||
#define __DUPARR(v, t) v=(void*)memcpy(v##__copy,v,sizeof(t))
|
||||
#define __DEL(x) Platform_OSFree((LONGINT)(uintptr_t)x)
|
||||
#define __DEL(x) Platform_OSFree((LONGINT)(SYSTEM_ADDRESS)x)
|
||||
|
||||
|
||||
|
||||
|
||||
/* SYSTEM ops */
|
||||
|
||||
#define __VAL(t, x) ((t)(x))
|
||||
#define __VALP(t, x) ((t)(uintptr_t)(x))
|
||||
#define __VAL(t, x) (*(t*)&(x))
|
||||
|
||||
#define __GET(a, x, t) x= *(t*)(uintptr_t)(a)
|
||||
#define __PUT(a, x, t) *(t*)(uintptr_t)(a)=x
|
||||
|
||||
#define __GET(a, x, t) x= *(t*)(SYSTEM_ADDRESS)(a)
|
||||
#define __PUT(a, x, t) *(t*)(SYSTEM_ADDRESS)(a)=x
|
||||
|
||||
#define __LSHL(x, n, t) ((t)((U_##t)(x)<<(n)))
|
||||
#define __LSHR(x, n, t) ((t)((U_##t)(x)>>(n)))
|
||||
|
|
@ -150,7 +161,7 @@ static int __str_cmp(CHAR *x, CHAR *y){
|
|||
#define __ROT(x, n, t) ((n)>=0? __ROTL(x, n, t): __ROTR(x, -(n), t))
|
||||
|
||||
#define __BIT(x, n) (*(U_LONGINT*)(x)>>(n)&1)
|
||||
#define __MOVE(s, d, n) memcpy((char*)(uintptr_t)(d),(char*)(uintptr_t)(s),n)
|
||||
#define __MOVE(s, d, n) memcpy((char*)(SYSTEM_ADDRESS)(d),(char*)(SYSTEM_ADDRESS)(s),n)
|
||||
#define __ASHF(x, n) SYSTEM_ASH((LONGINT)(x), (LONGINT)(n))
|
||||
#define __SHORT(x, y) ((int)((U_LONGINT)(x)+(y)<(y)+(y)?(x):(__HALT(-8),0)))
|
||||
#define __SHORTF(x, y) ((int)(__RF((x)+(y),(y)+(y))-(y)))
|
||||
|
|
@ -211,7 +222,7 @@ extern void Heap_INCREF();
|
|||
extern void Platform_Init(INTEGER argc, LONGINT argv);
|
||||
extern void Heap_FINALL();
|
||||
|
||||
#define __INIT(argc, argv) static void *m; Platform_Init((INTEGER)argc, (LONGINT)(uintptr_t)&argv);
|
||||
#define __INIT(argc, argv) static void *m; Platform_Init((INTEGER)argc, (LONGINT)(SYSTEM_ADDRESS)&argv);
|
||||
#define __REGMAIN(name, enum) m = Heap_REGMOD((CHAR*)name,enum)
|
||||
#define __FINI Heap_FINALL(); return 0
|
||||
|
||||
|
|
@ -232,7 +243,7 @@ extern SYSTEM_PTR Heap_NEWREC (LONGINT tag);
|
|||
extern SYSTEM_PTR SYSTEM_NEWARR(LONGINT*, LONGINT, int, int, int, ...);
|
||||
|
||||
#define __SYSNEW(p, len) p = Heap_NEWBLK((LONGINT)(len))
|
||||
#define __NEW(p, t) p = Heap_NEWREC((LONGINT)(uintptr_t)t##__typ)
|
||||
#define __NEW(p, t) p = Heap_NEWREC((LONGINT)(SYSTEM_ADDRESS)t##__typ)
|
||||
#define __NEWARR SYSTEM_NEWARR
|
||||
|
||||
|
||||
|
|
@ -263,20 +274,20 @@ extern SYSTEM_PTR SYSTEM_NEWARR(LONGINT*, LONGINT, int, int, int, ...);
|
|||
#define __INITYP(t, t0, level) \
|
||||
t##__typ = (LONGINT*)&t##__desc.blksz; \
|
||||
memcpy(t##__desc.basep, t0##__typ - __BASEOFF, level*sizeof(LONGINT)); \
|
||||
t##__desc.basep[level] = (LONGINT)(uintptr_t)t##__typ; \
|
||||
t##__desc.module = (LONGINT)(uintptr_t)m; \
|
||||
t##__desc.basep[level] = (LONGINT)(SYSTEM_ADDRESS)t##__typ; \
|
||||
t##__desc.module = (LONGINT)(SYSTEM_ADDRESS)m; \
|
||||
if(t##__desc.blksz!=sizeof(struct t)) __HALT(-15); \
|
||||
t##__desc.blksz = (t##__desc.blksz+5*sizeof(LONGINT)-1)/(4*sizeof(LONGINT))*(4*sizeof(LONGINT)); \
|
||||
Heap_REGTYP(m, (LONGINT)(uintptr_t)&t##__desc.next); \
|
||||
Heap_REGTYP(m, (LONGINT)(SYSTEM_ADDRESS)&t##__desc.next); \
|
||||
SYSTEM_INHERIT(t##__typ, t0##__typ)
|
||||
|
||||
#define __IS(tag, typ, level) (*(tag-(__BASEOFF-level))==(LONGINT)(uintptr_t)typ##__typ)
|
||||
#define __TYPEOF(p) ((LONGINT*)(uintptr_t)(*(((LONGINT*)(p))-1)))
|
||||
#define __IS(tag, typ, level) (*(tag-(__BASEOFF-level))==(LONGINT)(SYSTEM_ADDRESS)typ##__typ)
|
||||
#define __TYPEOF(p) ((LONGINT*)(SYSTEM_ADDRESS)(*(((LONGINT*)(p))-1)))
|
||||
#define __ISP(p, typ, level) __IS(__TYPEOF(p),typ,level)
|
||||
|
||||
// Oberon-2 type bound procedures support
|
||||
#define __INITBP(t, proc, num) *(t##__typ-(__TPROC0OFF+num))=(LONGINT)(uintptr_t)proc
|
||||
#define __SEND(typ, num, funtyp, parlist) ((funtyp)((uintptr_t)*(typ-(__TPROC0OFF+num))))parlist
|
||||
#define __INITBP(t, proc, num) *(t##__typ-(__TPROC0OFF+num))=(LONGINT)(SYSTEM_ADDRESS)proc
|
||||
#define __SEND(typ, num, funtyp, parlist) ((funtyp)((SYSTEM_ADDRESS)*(typ-(__TPROC0OFF+num))))parlist
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,54 +2,43 @@ MODULE clb;
|
|||
|
||||
IMPORT Console;
|
||||
|
||||
TYPE OnSomething = PROCEDURE (x, y : INTEGER);
|
||||
|
||||
PROCEDURE ProcessEvents(x, y : INTEGER; onsomething : OnSomething);
|
||||
TYPE OnSomething = PROCEDURE (x, y: INTEGER);
|
||||
|
||||
PROCEDURE ProcessEvents(x, y: INTEGER; onsomething: OnSomething);
|
||||
BEGIN
|
||||
|
||||
IF onsomething # NIL THEN onsomething(x, y)
|
||||
ELSE
|
||||
Console.String("didn't happen"); Console.Ln
|
||||
END;
|
||||
|
||||
IF onsomething # NIL THEN
|
||||
onsomething(x, y)
|
||||
ELSE
|
||||
Console.String("didn't happen"); Console.Ln
|
||||
END
|
||||
END ProcessEvents;
|
||||
|
||||
|
||||
PROCEDURE OnEvent(x, y : INTEGER);
|
||||
|
||||
BEGIN
|
||||
|
||||
Console.String("event happened"); Console.Ln
|
||||
|
||||
Console.String("event happened"); Console.Ln
|
||||
END OnEvent;
|
||||
|
||||
PROCEDURE OnEvent2(x, y : INTEGER);
|
||||
|
||||
BEGIN
|
||||
|
||||
Console.String("happened"); Console.Ln
|
||||
|
||||
Console.String("event 2 happened"); Console.Ln
|
||||
END OnEvent2;
|
||||
|
||||
PROCEDURE Something;
|
||||
VAR onsmth : OnSomething;
|
||||
|
||||
VAR onsmth: OnSomething;
|
||||
BEGIN
|
||||
|
||||
onsmth := NIL;
|
||||
ProcessEvents(0, 0, onsmth);
|
||||
|
||||
onsmth := OnEvent;
|
||||
ProcessEvents(0, 0, onsmth);
|
||||
|
||||
END Something;
|
||||
|
||||
BEGIN
|
||||
Something;
|
||||
(*
|
||||
ProcessEvents(0, 0, NIL);
|
||||
ProcessEvents(0, 0, OnEvent);
|
||||
ProcessEvents(0, 0, OnEvent2);
|
||||
*)
|
||||
Something;
|
||||
(*
|
||||
ProcessEvents(0, 0, NIL);
|
||||
ProcessEvents(0, 0, OnEvent);
|
||||
ProcessEvents(0, 0, OnEvent2);
|
||||
*)
|
||||
END clb.
|
||||
|
|
|
|||
|
|
@ -5,31 +5,24 @@ IMPORT Files, Texts, Console;
|
|||
|
||||
CONST file="testFiles.Mod";
|
||||
|
||||
VAR
|
||||
VAR
|
||||
T : Texts.Text;
|
||||
R : Texts.Reader;
|
||||
F : Files.File;
|
||||
ch : CHAR;
|
||||
BEGIN
|
||||
F := Files.Old (file);
|
||||
IF F # NIL THEN
|
||||
NEW(T);
|
||||
Texts.Open(T, file);
|
||||
Texts.OpenReader(R, T, 0);
|
||||
Texts.Read (R, ch);
|
||||
|
||||
F := Files.Old (file);
|
||||
IF F # NIL THEN
|
||||
NEW(T);
|
||||
Texts.Open(T, file);
|
||||
Texts.OpenReader(R, T, 0);
|
||||
Texts.Read (R, ch);
|
||||
|
||||
WHILE ~R.eot DO
|
||||
Console.Char(ch);
|
||||
IF ch = 0DX THEN Console.Char(0AX) END;
|
||||
WHILE ~R.eot DO
|
||||
IF ch = 0DX THEN Console.Ln ELSE Console.Char(ch) END;
|
||||
Texts.Read (R, ch);
|
||||
END;
|
||||
|
||||
ELSE
|
||||
|
||||
Console.String ("cannot open"); Console.Ln;
|
||||
|
||||
END;
|
||||
|
||||
|
||||
END;
|
||||
ELSE
|
||||
Console.String ("cannot open"); Console.Ln;
|
||||
END;
|
||||
END testFiles.
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "SYSTEM.h"
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
#define strncasecmp _strnicmp
|
||||
#else
|
||||
|
|
@ -406,7 +407,7 @@ void writeConfigurationMod() {
|
|||
fprintf(fd, " installdir* = '%s';\n", installdir);
|
||||
fprintf(fd, " staticLink* = '%s';\n", staticlink);
|
||||
fprintf(fd, "VAR\n");
|
||||
fprintf(fd, " versionLong-: ARRAY %d OF CHAR;\n", strnlen(versionstring, 100)+1);
|
||||
fprintf(fd, " versionLong-: ARRAY %d OF CHAR;\n", (int)strnlen(versionstring, 100)+1);
|
||||
fprintf(fd, "BEGIN\n");
|
||||
fprintf(fd, " versionLong := '%s';\n", versionstring);
|
||||
fprintf(fd, "END Configuration.\n");
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@
|
|||
changes="0"
|
||||
for f in $1/*; do
|
||||
fn=$(basename $f)
|
||||
egrep -v "(^/\* voc )|Configuration_|__MOVE.* cmd, |OPM_(IntSize|PointerSize|Alignment) =|Strings_Append.+void\*\)(cmd|OPM_OBERON|extTools_comp)" $f >$fn.old
|
||||
egrep -v "(^/\* voc )|Configuration_|__MOVE.* cmd, |OPM_(IntSize|PointerSize|Alignment) =|Strings_Append.+void\*\)(cmd|OPM_OBERON|extTools_comp)" $fn >$fn.new
|
||||
egrep -v "(^/\* voc +)|Configuration_|__MOVE.* cmd, |OPM_(IntSize|PointerSize|Alignment) =|Strings_Append.+void\*\)(cmd|OPM_OBERON|extTools_comp)" $f >$fn.old
|
||||
egrep -v "(^/\* voc +)|Configuration_|__MOVE.* cmd, |OPM_(IntSize|PointerSize|Alignment) =|Strings_Append.+void\*\)(cmd|OPM_OBERON|extTools_comp)" $fn >$fn.new
|
||||
if ! diff -U 2 -b $fn.old $fn.new >$fn.diff; then
|
||||
echo ""
|
||||
echo ""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue