Bladeren bron

made GetNum() working in 64-bit mode

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6616 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 9 jaren geleden
bovenliggende
commit
403f513100
1 gewijzigde bestanden met toevoegingen van 5 en 4 verwijderingen
  1. 5 4
      source/Reflection.Mod

+ 5 - 4
source/Reflection.Mod

@@ -73,7 +73,7 @@ VAR
 	(* Get a compressed refblk number. *)
 	PROCEDURE GetNum( refs: Modules.Bytes;  VAR i, num: LONGINT );
 	VAR
-		n, s: LONGINT;  x: CHAR;
+		n, s, x: LONGINT; 
 	BEGIN
 		IF NewObjectFile(refs) THEN
 			(* Copying byte by byte to avoid unaligned memory accesses on ARM *)
@@ -83,9 +83,9 @@ VAR
 			SYSTEM.PUT8(ADDRESSOF(num) + 3, refs[i + 3]);
 			INC(i,4);
 		ELSE
-			s := 0;  n := 0;  x := refs[i];  INC( i );
-			WHILE ORD( x ) >= 128 DO INC( n, ASH( ORD( x ) - 128, s ) );  INC( s, 7 );  x := refs[i];  INC( i ) END;
-			num := n + ASH( ORD( x ) MOD 64 - ORD( x ) DIV 64 * 64, s )
+			s := 0;  n := 0;  x := ORD(refs[i]);  INC( i );
+			WHILE x >= 128 DO  INC( n, ASH( x - 128, s ) );  INC( s, 7 );  x := ORD(refs[i]);  INC( i )  END;
+			num := n + ASH( x MOD 64 - x DIV 64 * 64, s )
 		END;
 	END GetNum;
 
@@ -181,6 +181,7 @@ VAR
 		IF newObjectFile THEN INC(pos) END;
 		ch := refs[pos]; INC(pos); tstart := 0;
 		found := FALSE;
+
 		WHILE ~found & (pos < len) & ((ch = 0F8X) OR (ch = 0F9X)) DO	(* proc *)
 			GetNum(refs, pos, tstart);	(* procedure offset *)
 			IF newObjectFile THEN