mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 08:42:24 +00:00
Fix and simplify fingerprinting for 64 bit values
This commit is contained in:
parent
f9c72a37b0
commit
f08e49d856
187 changed files with 366 additions and 349 deletions
|
|
@ -542,48 +542,29 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
|||
END err;
|
||||
|
||||
|
||||
PROCEDURE FPrint*(VAR fp: LONGINT; val: SYSTEM.INT64);
|
||||
(* ------------------------ Fingerprint hashing ----------------------- *)
|
||||
|
||||
PROCEDURE FingerprintBytes(VAR fp: LONGINT; VAR bytes: ARRAY OF SYSTEM.BYTE);
|
||||
VAR i: INTEGER; l: LONGINT;
|
||||
BEGIN
|
||||
fp := SYSTEM.ROT(SYSTEM.VAL(LONGINT, SYSTEM.VAL(SET, fp) / SYSTEM.VAL(SET, val)), 1)
|
||||
END FPrint;
|
||||
|
||||
|
||||
PROCEDURE FPrintSet*(VAR fp: LONGINT; set: SYSTEM.SET64);
|
||||
BEGIN FPrint(fp, SYSTEM.VAL(LONGINT, set))
|
||||
END FPrintSet;
|
||||
|
||||
|
||||
PROCEDURE FPrintReal*(VAR fp: LONGINT; real: 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
|
||||
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)
|
||||
ASSERT(LEN(bytes) MOD SIZE(LONGINT) = 0);
|
||||
i := 0; WHILE i < LEN(bytes) DO
|
||||
SYSTEM.GET(SYSTEM.ADR(bytes[i]), l);
|
||||
fp := SYSTEM.ROT(SYSTEM.VAL(LONGINT, SYSTEM.VAL(SET, fp) / SYSTEM.VAL(SET, l)), 1);
|
||||
INC(i, SIZE(LONGINT))
|
||||
END
|
||||
END FPrintLReal;
|
||||
END FingerprintBytes;
|
||||
|
||||
PROCEDURE FPrint* (VAR fp: LONGINT; val: HUGEINT); BEGIN FingerprintBytes(fp, val) END FPrint;
|
||||
PROCEDURE FPrintSet* (VAR fp: LONGINT; val: SYSTEM.SET64); BEGIN FingerprintBytes(fp, val) END FPrintSet;
|
||||
PROCEDURE FPrintReal* (VAR fp: LONGINT; val: REAL); BEGIN FingerprintBytes(fp, val) END FPrintReal;
|
||||
PROCEDURE FPrintLReal*(VAR fp: LONGINT; val: LONGREAL); BEGIN FingerprintBytes(fp, val) END FPrintLReal;
|
||||
|
||||
|
||||
|
||||
|
||||
(* ------------------------- Read Symbol File ------------------------- *)
|
||||
|
||||
|
||||
PROCEDURE SymRCh*(VAR ch: CHAR);
|
||||
BEGIN Files.Read(oldSF, ch)
|
||||
END SymRCh;
|
||||
|
|
|
|||
|
|
@ -175,6 +175,7 @@ Compiler Warnings
|
|||
301 implicit type cast
|
||||
306 inappropriate symbol file ignored
|
||||
307 no ELSE symbol after CASE statement sequence may lead to trap
|
||||
308 SYSTEM.VAL result includes memory past end of source variable; use SYSTEM.GET
|
||||
|
||||
Run-time Error Messages
|
||||
-1 assertion failed, cf. SYSTEM_assert
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue