Browse Source

Solved problem with too many linked modules: replaced array by in-place linked list.

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6469 8c9fc860-2736-0410-a75d-ab315db34111
felixf 9 years ago
parent
commit
94a8e47a56
1 changed files with 14 additions and 7 deletions
  1. 14 7
      source/Generic.Modules.Mod

+ 14 - 7
source/Generic.Modules.Mod

@@ -29,7 +29,7 @@ CONST
 	DefaultContext* = "A2";
 	NoLoader=3400;
 
-	TraceBoot=TRUE;
+	TraceBoot=FALSE;
 
 TYPE
 	(* definitions for object-model loader support *)
@@ -206,8 +206,9 @@ VAR
 	numPtrs: LONGINT;
 	shutdown*: LONGINT;	(** None, Reboot, PowerDown *)
 	trace: BOOLEAN;
-	register: ARRAY 64 OF Module;
-	registered: LONGINT;
+	register: RECORD
+		first, last: Module;
+	END;
 
 (** Register a module loader. *)
 
@@ -930,15 +931,21 @@ END GetKernelProc;
 
 PROCEDURE Register- (module {UNTRACED}: Module);
 BEGIN {UNCOOPERATIVE, UNCHECKED}
-	register[registered] := module;
-	INC (registered);
+	IF register.first = NIL THEN
+		register.first := module;
+	ELSE
+		register.last.next := module;
+	END;
+	register.last := module;
 END Register;
 
 PROCEDURE PublishRegisteredModules;
 VAR m {UNTRACED}: Module; module, import: SIZE;
 BEGIN
-	FOR module := 0 TO registered - 1 DO
-		m := register[module];
+	WHILE register.first # NIL DO
+		m := register.first;
+		register.first := m.next;
+		m.next := NIL;
 		IF m.module # NIL THEN
 			FOR import := 0 TO LEN (m.module) - 1 DO
 				Initialize0 (m.module[import]);