瀏覽代碼

immediate reaction to linker error

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7264 8c9fc860-2736-0410-a75d-ab315db34111
skoster 8 年之前
父節點
當前提交
7a4d3af37d
共有 1 個文件被更改,包括 5 次插入2 次删除
  1. 5 2
      source/GenericLinker.Mod

+ 5 - 2
source/GenericLinker.Mod

@@ -247,7 +247,7 @@ VAR
 	VAR block: Block; used: BOOLEAN; name: ARRAY 256 OF CHAR;
 	VAR block: Block; used: BOOLEAN; name: ARRAY 256 OF CHAR;
 	BEGIN
 	BEGIN
 		IF ~error THEN block := firstBlock;
 		IF ~error THEN block := firstBlock;
-			WHILE block # firstLinkedBlock DO
+			WHILE (block # firstLinkedBlock) & ~error DO
 				ObjectFile.SegmentedNameToString(block.identifier.name, name);
 				ObjectFile.SegmentedNameToString(block.identifier.name, name);
 				used := (GetType (block) IN usedCategories) OR (linkRoot # "") & Strings.StartsWith(linkRoot,0,name) OR (block.aliases > 0);
 				used := (GetType (block) IN usedCategories) OR (linkRoot # "") & Strings.StartsWith(linkRoot,0,name) OR (block.aliases > 0);
 				Reference (block, used); block := block.next;
 				Reference (block, used); block := block.next;
@@ -321,7 +321,10 @@ VAR
 		IF used & ~block.used THEN block.used := TRUE;
 		IF used & ~block.used THEN block.used := TRUE;
 		ELSIF block.referenced THEN RETURN; END; block.referenced := TRUE;
 		ELSIF block.referenced THEN RETURN; END; block.referenced := TRUE;
 		IF ~used THEN RETURN END;
 		IF ~used THEN RETURN END;
-		FOR i := 0 TO block.fixups - 1 DO ReferenceFixup (block.fixup[i]); END;
+		FOR i := 0 TO block.fixups - 1 DO 
+			ReferenceFixup (block.fixup[i]); 
+			IF error THEN RETURN END;
+		END;
 	END Reference;
 	END Reference;
 
 
 	PROCEDURE Prearrange (block: Block);
 	PROCEDURE Prearrange (block: Block);