mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 18:02:25 +00:00
Force output flush and nonzero return code on assertion failure in Files.Mod
This commit is contained in:
parent
7279aa91be
commit
6a7cba23a7
2 changed files with 16 additions and 11 deletions
|
|
@ -76,6 +76,11 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
||||||
|
|
||||||
PROCEDURE^ Finalize(o: SYSTEM.PTR);
|
PROCEDURE^ Finalize(o: SYSTEM.PTR);
|
||||||
|
|
||||||
|
PROCEDURE Assert(truth: BOOLEAN);
|
||||||
|
BEGIN
|
||||||
|
IF ~truth THEN Out.Ln; ASSERT(truth) END
|
||||||
|
END Assert;
|
||||||
|
|
||||||
PROCEDURE Err(s: ARRAY OF CHAR; f: File; errcode: Platform.ErrorCode);
|
PROCEDURE Err(s: ARRAY OF CHAR; f: File; errcode: Platform.ErrorCode);
|
||||||
BEGIN
|
BEGIN
|
||||||
Out.Ln; Out.String("-- "); Out.String(s); Out.String(": ");
|
Out.Ln; Out.String("-- "); Out.String(s); Out.String(": ");
|
||||||
|
|
@ -361,7 +366,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
||||||
|
|
||||||
PROCEDURE Pos* (VAR r: Rider): LONGINT;
|
PROCEDURE Pos* (VAR r: Rider): LONGINT;
|
||||||
BEGIN
|
BEGIN
|
||||||
ASSERT(r.offset <= BufSize);
|
Assert(r.offset <= BufSize);
|
||||||
RETURN r.org + r.offset
|
RETURN r.org + r.offset
|
||||||
END Pos;
|
END Pos;
|
||||||
|
|
||||||
|
|
@ -401,7 +406,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
||||||
END
|
END
|
||||||
ELSE buf := NIL; org := 0; offset := 0
|
ELSE buf := NIL; org := 0; offset := 0
|
||||||
END;
|
END;
|
||||||
ASSERT(offset <= BufSize);
|
Assert(offset <= BufSize);
|
||||||
r.buf := buf; r.org := org; r.offset := offset; r.eof := FALSE; r.res := 0
|
r.buf := buf; r.org := org; r.offset := offset; r.eof := FALSE; r.res := 0
|
||||||
END Set;
|
END Set;
|
||||||
|
|
||||||
|
|
@ -410,7 +415,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
||||||
BEGIN
|
BEGIN
|
||||||
buf := r.buf; offset := r.offset;
|
buf := r.buf; offset := r.offset;
|
||||||
IF r.org # buf.org THEN Set(r, buf.f, r.org + offset); buf := r.buf; offset := r.offset END;
|
IF r.org # buf.org THEN Set(r, buf.f, r.org + offset); buf := r.buf; offset := r.offset END;
|
||||||
ASSERT(offset <= buf.size);
|
Assert(offset <= buf.size);
|
||||||
IF (offset < buf.size) THEN
|
IF (offset < buf.size) THEN
|
||||||
x := buf.data[offset]; r.offset := offset + 1
|
x := buf.data[offset]; r.offset := offset + 1
|
||||||
ELSIF r.org + offset < buf.f.len THEN
|
ELSIF r.org + offset < buf.f.len THEN
|
||||||
|
|
@ -436,7 +441,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
||||||
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) + ToAdr(offset), SYSTEM.ADR(x) + ToAdr(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);
|
||||||
ASSERT(offset <= BufSize)
|
Assert(offset <= BufSize)
|
||||||
END;
|
END;
|
||||||
r.res := 0; r.eof := FALSE
|
r.res := 0; r.eof := FALSE
|
||||||
END ReadBytes;
|
END ReadBytes;
|
||||||
|
|
@ -449,12 +454,12 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
||||||
VAR buf: Buffer; offset: LONGINT;
|
VAR buf: Buffer; offset: LONGINT;
|
||||||
BEGIN
|
BEGIN
|
||||||
buf := r.buf; offset := r.offset;
|
buf := r.buf; offset := r.offset;
|
||||||
ASSERT(offset <= BufSize);
|
Assert(offset <= BufSize);
|
||||||
IF (r.org # buf.org) OR (offset >= BufSize) THEN
|
IF (r.org # buf.org) OR (offset >= BufSize) THEN
|
||||||
Set(r, buf.f, r.org + offset);
|
Set(r, buf.f, r.org + offset);
|
||||||
buf := r.buf; offset := r.offset
|
buf := r.buf; offset := r.offset
|
||||||
END;
|
END;
|
||||||
ASSERT(offset < BufSize);
|
Assert(offset < BufSize);
|
||||||
buf.data[offset] := x;
|
buf.data[offset] := x;
|
||||||
buf.chg := TRUE;
|
buf.chg := TRUE;
|
||||||
IF offset = buf.size THEN
|
IF offset = buf.size THEN
|
||||||
|
|
@ -469,17 +474,17 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
|
||||||
IF n > LEN(x) THEN IdxTrap END;
|
IF n > LEN(x) THEN IdxTrap END;
|
||||||
xpos := 0; buf := r.buf; offset := r.offset;
|
xpos := 0; buf := r.buf; offset := r.offset;
|
||||||
WHILE n > 0 DO
|
WHILE n > 0 DO
|
||||||
ASSERT(offset <= BufSize);
|
Assert(offset <= BufSize);
|
||||||
IF (r.org # buf.org) OR (offset >= BufSize) THEN
|
IF (r.org # buf.org) OR (offset >= BufSize) THEN
|
||||||
Set(r, buf.f, r.org + offset);
|
Set(r, buf.f, r.org + offset);
|
||||||
buf := r.buf; offset := r.offset
|
buf := r.buf; offset := r.offset
|
||||||
END;
|
END;
|
||||||
ASSERT(offset <= BufSize);
|
Assert(offset <= BufSize);
|
||||||
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) + ToAdr(xpos), SYSTEM.ADR(buf.data) + ToAdr(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;
|
||||||
ASSERT(offset <= BufSize);
|
Assert(offset <= BufSize);
|
||||||
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
|
||||||
END;
|
END;
|
||||||
|
|
@ -664,7 +669,7 @@ Especially Length would become fairly complex.
|
||||||
BEGIN s := 0; q := 0; Read(R, b);
|
BEGIN s := 0; q := 0; Read(R, b);
|
||||||
WHILE b < 0 DO INC(q, ASH(b+128, s)); INC(s, 7); Read(R, b) END;
|
WHILE b < 0 DO INC(q, ASH(b+128, s)); INC(s, 7); Read(R, b) END;
|
||||||
INC(q, ASH(b MOD 64 - b DIV 64 * 64, s));
|
INC(q, ASH(b MOD 64 - b DIV 64 * 64, s));
|
||||||
ASSERT(LEN(x) <= 8);
|
Assert(LEN(x) <= 8);
|
||||||
SYSTEM.MOVE(SYSTEM.ADR(q), SYSTEM.ADR(x), LEN(x)) (* Assumes little endian representation of q and x. *)
|
SYSTEM.MOVE(SYSTEM.ADR(q), SYSTEM.ADR(x), LEN(x)) (* Assumes little endian representation of q and x. *)
|
||||||
END ReadNum;
|
END ReadNum;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ MODULE Modules; (* jt 6.1.96 *)
|
||||||
errstring("Assertion failure.");
|
errstring("Assertion failure.");
|
||||||
IF code # 0 THEN errstring(" ASSERT code "); errint(code); errstring("."); END;
|
IF code # 0 THEN errstring(" ASSERT code "); errint(code); errstring("."); END;
|
||||||
errstring(Platform.NL);
|
errstring(Platform.NL);
|
||||||
Platform.Exit(code);
|
IF code > 0 THEN Platform.Exit(code) ELSE Platform.Exit(-1) END;
|
||||||
END AssertFail;
|
END AssertFail;
|
||||||
|
|
||||||
END Modules.
|
END Modules.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue