Browse Source

Made const parameters untraced (required at least for array base with metadata GC)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8017 8c9fc860-2736-0410-a75d-ab315db34111
felixf 7 years ago
parent
commit
00a490e780
1 changed files with 3 additions and 3 deletions
  1. 3 3
      source/FoxIntermediateBackend.Mod

+ 3 - 3
source/FoxIntermediateBackend.Mod

@@ -3024,7 +3024,7 @@ TYPE
 			END;
 			parameter := scope.ownerProcedure.type(SyntaxTree.ProcedureType).firstParameter;
 			WHILE parameter # NIL DO
-				IF parameter.NeedsTrace() & ~IsVariableParameter(parameter) THEN
+				IF parameter.NeedsTrace() & ~IsVariableParameter(parameter)  & (parameter.kind # SyntaxTree.ConstParameter) THEN
 					Reset (parameter);
 				END;
 				parameter := parameter.nextParameter;
@@ -13424,7 +13424,7 @@ TYPE
 			ELSIF scope IS SyntaxTree.ProcedureScope THEN
 					parameter := scope(SyntaxTree.ProcedureScope).ownerProcedure.type(SyntaxTree.ProcedureType).firstParameter;
 					WHILE parameter # NIL DO
-						IF parameter.NeedsTrace() & ~IsVariableParameter(parameter) THEN
+						IF parameter.NeedsTrace() & ~IsVariableParameter(parameter)  & (parameter.kind # SyntaxTree.ConstParameter) THEN (* immutable or variable parameters do not need tracing  *)
 							Pointers(ToMemoryUnits(module.system,parameter.offsetInBits), NIL,  source, parameter.type, numberPointers);
 						END;
 						parameter := parameter.nextParameter;
@@ -14255,7 +14255,7 @@ TYPE
 		END;
 		parameter := scope.ownerProcedure.type(SyntaxTree.ProcedureType).firstParameter;
 		WHILE parameter # NIL DO
-			IF parameter.NeedsTrace() & ~IsVariableParameter(parameter) THEN
+			IF parameter.NeedsTrace() & ~IsVariableParameter(parameter)  & (parameter.kind # SyntaxTree.ConstParameter) THEN
 				RETURN TRUE;
 			END;
 			parameter := parameter.nextParameter;