Browse Source

Patched 64-bit MathArray GC bug

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7834 8c9fc860-2736-0410-a75d-ab315db34111
felixf 7 năm trước cách đây
mục cha
commit
d9030fe76a
2 tập tin đã thay đổi với 5 bổ sung3 xóa
  1. 3 3
      source/FoxArrayBase.Mod
  2. 2 0
      source/Heaps.Mod

+ 3 - 3
source/FoxArrayBase.Mod

@@ -32,7 +32,7 @@ CONST
 	statistics= FALSE;
 	conservative=TRUE;
 
-	ArrDataArrayOffset=ADDRESS(16); (* offset of data in array with pointers *)
+	ArrDataArrayOffset=4*SIZEOF (ADDRESS); (* offset of data in array with pointers *)
 
 	AddressSize=SIZEOF(ADDRESS);
 	MathPtrOffset=0*AddressSize;
@@ -10348,7 +10348,7 @@ TYPE
 				dest.adr := Align(data);
 			ELSE
 				Heaps.NewArr(data, tag, size DIV elementSize,1,FALSE);
-				dest.adr := data + ArrDataArrayOffset;
+				dest.adr := data + ADDRESS(ArrDataArrayOffset);
 			END;
 			SafePut(dest.ptr, data);
 			(*dest.ptr := data;*)
@@ -10410,7 +10410,7 @@ TYPE
 				PutAdr( dest, Align(data) );
 			ELSE
 				Heaps.NewArr(data, tag, size DIV Size,1,FALSE);
-				PutAdr( dest, data+ ArrDataArrayOffset );			
+				PutAdr( dest, data+ ADDRESS(ArrDataArrayOffset) );			
 
 			END;
 			PutPtr( dest, data );  PutSize( dest, Size );

+ 2 - 0
source/Heaps.Mod

@@ -180,6 +180,8 @@ TYPE
 		numElems: SIZE;
 		current: ADDRESS; (* unused *)
 		first: ADDRESS;
+		(* len info *)
+		(* data *)
 	END;
 	
 	(*StackBlock = POINTER{UNSAFE} TO StackBlockDesc;