瀏覽代碼

Removed unnecessary mixin objects of FinalizerNode

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8639 8c9fc860-2736-0410-a75d-ab315db34111
negelef 6 年之前
父節點
當前提交
64c99907b4

+ 4 - 4
source/ARM.Kernel.Mod

@@ -14,8 +14,8 @@ TYPE
 	(** Enumerator for FinalizedCollection.Enumerate. *)
 	Enumerator* = PROCEDURE {DELEGATE} (obj: ANY; VAR cont: BOOLEAN);
 
-	FinalizerNode = POINTER TO RECORD (Objects.FinalizerNode)
-		nextObj {UNTRACED} : FinalizerNode;   (* in Collection c *)
+	FinalizerNode = POINTER TO RECORD (Heaps.FinalizerNode)
+		nextObj {UNTRACED}: FinalizerNode;	(* in collection *)
 	END;
 
 	(** Polling timer. *)
@@ -58,14 +58,14 @@ TYPE
 
 TYPE
 	(** A collection of objects that are finalized automatically by the garbage collector. *)
-	FinalizedCollection* = OBJECT (Objects.FinalizedCollection)
+	FinalizedCollection* = OBJECT (Heaps.FinalizedCollection)
 		VAR root: FinalizerNode;	(* weak list of contents linked by nextObj *)
 
 		(** Add obj to collection. Parameter fin specifies finalizer, or NIL if not required. *)	(* may be called multiple times *)
 		PROCEDURE Add*(obj: ANY; fin: Finalizer);
 		VAR n: FinalizerNode;
 		BEGIN
-			NEW(n); n.c := SELF; n.finalizer := fin;
+			NEW(n); n.collection := SELF; n.finalizer := fin;
 			Heaps.AddFinalizer(obj, n);
 			BEGIN {EXCLUSIVE}
 				n.nextObj := root.nextObj; root.nextObj := n	(* add to collection *)

+ 2 - 11
source/ARM.Objects.Mod

@@ -331,15 +331,6 @@ TYPE
 		END
 	END GCActivity;
 
-	FinalizedCollection* = OBJECT (* base type for collection, extended in Kernel.Mod *)
-		PROCEDURE RemoveAll*(obj: ANY); (** abstract *)
-		BEGIN HALT(301) END RemoveAll;
-	END FinalizedCollection;
-
-	FinalizerNode* = POINTER TO RECORD (Heaps.FinalizerNode)
-		c*: FinalizedCollection (* base type for collection containing object *)
-	END;
-
 	FinalizerCaller = OBJECT	(* separate active object that calls finalizers *)
 		VAR n: Heaps.FinalizerNode;
 
@@ -356,8 +347,8 @@ TYPE
 			LOOP
 				n := Heaps.GetFinalizer();
 				IF n = NIL THEN EXIT END;
-				IF n IS FinalizerNode THEN
-					n(FinalizerNode).c.RemoveAll(n.objStrong)	(* remove it if it is not removed yet *)
+				IF n.collection # NIL THEN
+					n.collection.RemoveAll(n.objStrong)	(* remove it if it is not removed yet *)
 				END;
 				IF n.finalizer # NIL THEN
 					n.finalizer(n.objStrong)	(* may acquire locks *)

+ 2 - 11
source/BIOS.Objects.Mod

@@ -323,15 +323,6 @@ TYPE
 		END
 	END GCActivity;
 
-	FinalizedCollection* = OBJECT (* base type for collection, extended in Kernel.Mod *)
-		PROCEDURE RemoveAll*(obj: ANY); (** abstract *)
-		BEGIN HALT(301) END RemoveAll;
-	END FinalizedCollection;
-
-	FinalizerNode* = POINTER TO RECORD (Heaps.FinalizerNode)
-		c*: FinalizedCollection (* base type for collection containing object *)
-	END;
-
 	FinalizerCaller = OBJECT	(* separate active object that calls finalizers *)
 		VAR n: Heaps.FinalizerNode;
 
@@ -348,8 +339,8 @@ TYPE
 			LOOP
 				n := Heaps.GetFinalizer();
 				IF n = NIL THEN EXIT END;
-				IF n IS FinalizerNode THEN
-					n(FinalizerNode).c.RemoveAll(n.objStrong)	(* remove it if it is not removed yet *)
+				IF n.collection # NIL THEN
+					n.collection.RemoveAll(n.objStrong)	(* remove it if it is not removed yet *)
 				END;
 				IF n.finalizer # NIL THEN
 					n.finalizer(n.objStrong)	(* may acquire locks *)

+ 7 - 1
source/Coop.Heaps.Mod

@@ -56,10 +56,16 @@ TYPE
 		objWeak* {UNTRACED}: ANY;	(* weak reference to checked object *)
 		nextFin: FinalizerNode;			(* in finalization list *)
 		objStrong*: ANY;				(* strong reference to object to be finalized *)
-		finalizer* {UNTRACED}: Finalizer;(* finalizer, if any. Untraced for the case that a finalizer points to objWeak *)
+		finalizer* {UNTRACED} : Finalizer;(* finalizer, if any. Untraced for the case that a finalizer points to objWeak *)
 		finalizerStrong: Finalizer; 		(* strong reference to the object that is referenced by the finalizer, if any *)
+		collection*: FinalizedCollection;	(* collection containing object *)
 	END;
 
+	FinalizedCollection* = OBJECT (* base type for collection, extended in Kernel.Mod *)
+		PROCEDURE RemoveAll*(obj: ANY); (** abstract *)
+		BEGIN HALT(301) END RemoveAll;
+	END FinalizedCollection;
+
 	HeapBlock* = POINTER TO HeapBlockDesc;	(* base object of all heap blocks *)
 	HeapBlockDesc* = RECORD
 		mark: LONGINT;

+ 4 - 4
source/Coop.Kernel.Mod

@@ -19,8 +19,8 @@ TYPE
 	(** Enumerator for FinalizedCollection.Enumerate. *)
 	Enumerator* = PROCEDURE {DELEGATE} ( obj: ANY;  VAR cont: BOOLEAN );
 
-	FinalizerNode = POINTER TO RECORD (Objects.FinalizerNode)
-		nextObj {UNTRACED} : FinalizerNode;   (* in Collection c *)
+	FinalizerNode = POINTER TO RECORD (Heaps.FinalizerNode)
+		nextObj {UNTRACED}: FinalizerNode;	(* in collection *)
 	END;
 
 	(** Polling timer. *)
@@ -78,14 +78,14 @@ TYPE
 
 TYPE
 	(** A collection of objects that are finalized automatically by the garbage collector. *)
-	FinalizedCollection* = OBJECT (Objects.FinalizedCollection)
+	FinalizedCollection* = OBJECT (Heaps.FinalizedCollection)
 		VAR root: FinalizerNode;	(* weak list of contents linked by nextObj *)
 
 		(** Add obj to collection. Parameter fin specifies finalizer, or NIL if not required. *)	(* may be called multiple times *)
 		PROCEDURE Add*(obj: ANY; fin: Finalizer);
 		VAR n: FinalizerNode;
 		BEGIN
-			NEW(n); n.c := SELF; n.finalizer := fin;
+			NEW(n); n.collection := SELF; n.finalizer := fin;
 			Heaps.AddFinalizer(obj, n);
 			BEGIN {EXCLUSIVE}
 				n.nextObj := root.nextObj; root.nextObj := n	(* add to collection *)

+ 0 - 9
source/Coop.Objects.Mod

@@ -91,15 +91,6 @@ TYPE
 		restartSP-: LONGINT;   (** stack level at start of body, for SAFE exception recovery *)
 		cpuCycles, lastCpuCycles : CpuCyclesArray;
 	END Process;
-
-	FinalizedCollection* = OBJECT
-		PROCEDURE RemoveAll*(obj: ANY); (** abstract *)
-		BEGIN HALT(301) END RemoveAll;
-	END FinalizedCollection;
-
-	FinalizerNode* = POINTER TO RECORD (Heaps.FinalizerNode)
-		c*: FinalizedCollection (* base type for collection containing object *)
-	END;
 	
 	InterruptList = POINTER TO RECORD
 		next: InterruptList;

+ 6 - 0
source/Heaps.Mod

@@ -86,8 +86,14 @@ TYPE
 		objStrong*: ANY;				(* strong reference to object to be finalized *)
 		finalizer* {UNTRACED} : Finalizer;(* finalizer, if any. Untraced for the case that a finalizer points to objWeak *)
 		finalizerStrong: Finalizer; 		(* strong reference to the object that is referenced by the finalizer, if any *)
+		collection*: FinalizedCollection;	(* collection containing object *)
 	END;
 
+	FinalizedCollection* = OBJECT (* base type for collection, extended in Kernel.Mod *)
+		PROCEDURE RemoveAll*(obj: ANY); (** abstract *)
+		BEGIN HALT(301) END RemoveAll;
+	END FinalizedCollection;
+
 	HeapBlock* = POINTER TO HeapBlockDesc;	(* base object of all heap blocks *)
 	HeapBlockU = POINTER {UNSAFE,UNTRACED} TO HeapBlockDesc;	(* base object of all heap blocks *)
 	HeapBlockDesc* = RECORD

+ 4 - 4
source/Kernel.Mod

@@ -14,8 +14,8 @@ TYPE
 	(** Enumerator for FinalizedCollection.Enumerate. *)
 	Enumerator* = PROCEDURE {DELEGATE} (obj: ANY; VAR cont: BOOLEAN);
 
-	FinalizerNode = POINTER TO RECORD (Objects.FinalizerNode)
-		nextObj {UNTRACED} : FinalizerNode;   (* in Collection c *)
+	FinalizerNode = POINTER TO RECORD (Heaps.FinalizerNode)
+		nextObj {UNTRACED}: FinalizerNode;	(* in collection *)
 	END;
 
 	(** Polling timer. *)
@@ -58,14 +58,14 @@ TYPE
 
 TYPE
 	(** A collection of objects that are finalized automatically by the garbage collector. *)
-	FinalizedCollection* = OBJECT (Objects.FinalizedCollection)
+	FinalizedCollection* = OBJECT (Heaps.FinalizedCollection)
 		VAR root: FinalizerNode;	(* weak list of contents linked by nextObj *)
 
 		(** Add obj to collection. Parameter fin specifies finalizer, or NIL if not required. *)	(* may be called multiple times *)
 		PROCEDURE Add*(obj: ANY; fin: Finalizer);
 		VAR n: FinalizerNode;
 		BEGIN
-			NEW(n); n.c := SELF; n.finalizer := fin;
+			NEW(n); n.collection := SELF; n.finalizer := fin;
 			Heaps.AddFinalizer(obj, n);
 			BEGIN {EXCLUSIVE}
 				n.nextObj := root.nextObj; root.nextObj := n	(* add to collection *)

+ 4 - 4
source/Unix.Kernel.Mod

@@ -15,8 +15,8 @@ TYPE
 	(** Enumerator for FinalizedCollection.Enumerate. *)
 	Enumerator* = PROCEDURE {DELEGATE} (obj: ANY; VAR cont: BOOLEAN);
 
-	FinalizerNode = POINTER TO RECORD (Objects.FinalizerNode)
-		nextObj {UNTRACED}: FinalizerNode;	(* in Collection c *)
+	FinalizerNode = POINTER TO RECORD (Heaps.FinalizerNode)
+		nextObj {UNTRACED}: FinalizerNode;	(* in collection *)
 	END;
 
 	(** Polling timer. *)
@@ -60,14 +60,14 @@ TYPE
 
 TYPE
 	(** A collection of objects that are finalized automatically by the garbage collector. *)
-	FinalizedCollection* = OBJECT(Objects.FinalizedCollection)
+	FinalizedCollection* = OBJECT(Heaps.FinalizedCollection)
 		VAR root: FinalizerNode;	(* weak list of contents linked by nextObj *)
 
 		(** Add obj to collection. Parameter fin specifies finalizer, or NIL if not required. *)	(* may be called multiple times *)
 		PROCEDURE Add*(obj: ANY; fin: Finalizer);
 		VAR n: FinalizerNode;
 		BEGIN
-			NEW(n); n.c := SELF; n.finalizer := fin;
+			NEW(n); n.collection := SELF; n.finalizer := fin;
 			Heaps.AddFinalizer(obj, n);
 			BEGIN {EXCLUSIVE}
 				n.nextObj := root.nextObj; root.nextObj := n	(* add to collection *)

+ 2 - 14
source/Unix.Objects.Mod

@@ -131,18 +131,6 @@ TYPE
 			IF ~timerStopped THEN  timerActivity.UpdateTicks  END
 		END;
 	END Clock;
-
-
-
-	FinalizedCollection* = OBJECT (* base type for collection, extended in Kernel.Mod *)
-		PROCEDURE RemoveAll*(obj: ANY); (** abstract *)
-		BEGIN HALT(301) END RemoveAll;
-	END FinalizedCollection;
-
-	FinalizerNode* = POINTER TO RECORD (Heaps.FinalizerNode)
-		c*: FinalizedCollection (* base type for collection containing object *)
-	END;
-
 		
 	FinalizerCaller = OBJECT	(* separate active object that calls finalizers *)
 	VAR 
@@ -161,8 +149,8 @@ TYPE
 			LOOP
 				n := Heaps.GetFinalizer();
 				IF n = NIL THEN EXIT END;
-				IF n IS FinalizerNode THEN
-					n(FinalizerNode).c.RemoveAll(n.objStrong)	(* remove it if it is not removed yet *)
+				IF n.collection # NIL THEN
+					n.collection.RemoveAll(n.objStrong)	(* remove it if it is not removed yet *)
 				END;
 				IF n.finalizer # NIL THEN
 					n.finalizer(n.objStrong)	(* may acquire locks *)

+ 4 - 4
source/Windows.Kernel.Mod

@@ -19,8 +19,8 @@ TYPE
 	(** Enumerator for FinalizedCollection.Enumerate. *)
 	Enumerator* = PROCEDURE {DELEGATE} ( obj: ANY;  VAR cont: BOOLEAN );
 
-	FinalizerNode = POINTER TO RECORD (Objects.FinalizerNode)
-		nextObj {UNTRACED} : FinalizerNode;   (* in Collection c *)
+	FinalizerNode = POINTER TO RECORD (Heaps.FinalizerNode)
+		nextObj {UNTRACED}: FinalizerNode;	(* in collection *)
 	END;
 
 	(** Polling timer. *)
@@ -78,14 +78,14 @@ TYPE
 
 TYPE
 	(** A collection of objects that are finalized automatically by the garbage collector. *)
-	FinalizedCollection* = OBJECT (Objects.FinalizedCollection)
+	FinalizedCollection* = OBJECT (Heaps.FinalizedCollection)
 		VAR root: FinalizerNode;	(* weak list of contents linked by nextObj *)
 
 		(** Add obj to collection. Parameter fin specifies finalizer, or NIL if not required. *)	(* may be called multiple times *)
 		PROCEDURE Add*(obj: ANY; fin: Finalizer);
 		VAR n: FinalizerNode;
 		BEGIN
-			NEW(n); n.c := SELF; n.finalizer := fin;
+			NEW(n); n.collection := SELF; n.finalizer := fin;
 			Heaps.AddFinalizer(obj, n);
 			BEGIN {EXCLUSIVE}
 				n.nextObj := root.nextObj; root.nextObj := n	(* add to collection *)

+ 2 - 11
source/Windows.Objects.Mod

@@ -342,15 +342,6 @@ TYPE
 
 	END GCStatusExt;
 
-	FinalizedCollection* = OBJECT
-		PROCEDURE RemoveAll*(obj: ANY); (** abstract *)
-		BEGIN HALT(301) END RemoveAll;
-	END FinalizedCollection;
-
-	FinalizerNode* = POINTER TO RECORD (Heaps.FinalizerNode)
-		c*: FinalizedCollection (* base type for collection containing object *)
-	END;
-
 	FinalizerCaller = OBJECT  (* separate active object that calls finalizers *)
 	VAR n: Heaps.FinalizerNode;
 		event: Kernel32.HANDLE;
@@ -396,8 +387,8 @@ TYPE
 			LOOP
 				n := Heaps.GetFinalizer();
 				IF n = NIL THEN EXIT END;
-				IF n IS FinalizerNode THEN
-					n( FinalizerNode ).c.RemoveAll( n.objStrong ) (* remove it if it is not removed yet *)
+				IF n.collection # NIL THEN
+					n.collection.RemoveAll(n.objStrong)	(* remove it if it is not removed yet *)
 				END;
 				IF n.finalizer # NIL THEN
 					n.finalizer( n.objStrong ) (* may acquire locks *)