Przeglądaj źródła

adaptions to updated compiler

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7274 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 8 lat temu
rodzic
commit
5fd4699725
2 zmienionych plików z 52 dodań i 1 usunięć
  1. 46 0
      source/Unix.Heaps.Mod
  2. 6 1
      source/Unix.Objects.Mod

+ 46 - 0
source/Unix.Heaps.Mod

@@ -828,6 +828,52 @@ VAR
 			END
 		END;
 	END NewArr;
+	
+TYPE
+	ArrayDataBlockDesc*= RECORD 
+		numElems: SIZE;
+		current: ADDRESS; (* unused *)
+		first: ADDRESS;
+	END;
+	UnsafeArray= POINTER {UNSAFE} TO UnsafeArrayDesc;
+	UnsafeArrayDesc = RECORD (ArrayDataBlockDesc)
+		len: ARRAY 8 OF SIZE;
+	END;	
+	
+	(* replacement for overcomplicated code emission -- at the cost of a slightly increased runtime cost *)
+	PROCEDURE NewArray*(CONST a: ARRAY OF SIZE;  tag: ADDRESS; staticElements, elementSize: SIZE; VAR dest: ANY);
+	VAR p: ANY; dim: SIZE;
+			
+			PROCEDURE GetSize(): SIZE;
+			VAR i: SIZE; size: SIZE;
+			BEGIN
+				size := 1;
+				FOR i := 0 TO dim-1 DO
+					size := size * a[i];
+				END;
+				RETURN size*staticElements;
+			END GetSize;
+			
+			PROCEDURE SetSizes(dest: UnsafeArray);
+			VAR i: SIZE;
+			BEGIN
+				FOR i := 0 TO dim-1 DO
+					dest.len[i] := a[dim-1-i];
+				END;
+			END SetSizes;
+
+		BEGIN
+			(* static elements is requred for this case : POINTER TO ARRAY OF ARRAY X OF RecordWithPointer *)
+			dim := LEN( a,0 );
+			IF tag = NIL THEN
+				NewSys(p, GetSize() * elementSize + dim * SIZEOF(ADDRESS) + 3 *SIZEOF(ADDRESS) + (dim DIV 2) * 2 * SIZEOF(ADDRESS), FALSE);
+			ELSE
+				NewArr(p, tag, GetSize(), dim, FALSE);
+			END;
+			SetSizes(p);
+			dest := p;
+	END NewArray;
+	
 
 	PROCEDURE FillStaticType* ( VAR staticTypeAddr: ADDRESS;
 								   startAddr, typeInfoAdr: ADDRESS;

+ 6 - 1
source/Unix.Objects.Mod

@@ -787,8 +787,13 @@ TYPE
 		Heaps.GC := InvokeGC;
 		Heaps.InvokeGC := InvokeGC;
 	END Init;
-
+	
+VAR
+	(* for compatibility and later extension *)
+	TraceProcessHook*: PROCEDURE (prcoess: Process; pc, bp: ADDRESS; stacklow, stackhigh: ADDRESS);
+	
 BEGIN
+	TraceProcessHook := NIL;
 	Init;
 END Objects.