浏览代码

Debugged untracing -- works with test setup now with heavy GC load

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7180 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 年之前
父节点
当前提交
82231155fb
共有 1 个文件被更改,包括 4 次插入3 次删除
  1. 4 3
      source/FoxIntermediateBackend.Mod

+ 4 - 3
source/FoxIntermediateBackend.Mod

@@ -4508,8 +4508,8 @@ TYPE
 			parameters: SyntaxTree.ExpressionList; e: SyntaxTree.Expression;
 			parameters: SyntaxTree.ExpressionList; e: SyntaxTree.Expression;
 			prefixIndices, prefixRanges, suffixIndices, suffixRanges,i : LONGINT; tensorFound: BOOLEAN;
 			prefixIndices, prefixRanges, suffixIndices, suffixRanges,i : LONGINT; tensorFound: BOOLEAN;
 		BEGIN
 		BEGIN
-			(* variable represents a range array -- no allocation possible, untraced *)
-			variable := GetTemporaryVariable(expression.left.type, FALSE, TRUE (* untraced *));
+			(* variable represents a newly allocaed range array in a tensor, this is allocated in CopyDescriptor and must thus not be untraced *)
+			variable := GetTemporaryVariable(expression.left.type, FALSE, FALSE (* untraced *));
 			parameters := expression.parameters;
 			parameters := expression.parameters;
 
 
 			moduleName := "FoxArrayBase";
 			moduleName := "FoxArrayBase";
@@ -6891,6 +6891,7 @@ TYPE
 				variable := SyntaxTree.NewVariable(Basic.invalidPosition,name);
 				variable := SyntaxTree.NewVariable(Basic.invalidPosition,name);
 				variable.SetType(type);
 				variable.SetType(type);
 				variable.SetAccess(SyntaxTree.Hidden);
 				variable.SetAccess(SyntaxTree.Hidden);
+				variable.SetUntraced(untraced);
 				IF ~register THEN
 				IF ~register THEN
 					temporaries.AddVariable(variable);
 					temporaries.AddVariable(variable);
 
 
@@ -6912,12 +6913,12 @@ TYPE
 					variable(SyntaxTree.Variable).SetOffset(0);
 					variable(SyntaxTree.Variable).SetOffset(0);
 				END;
 				END;
 			ELSE
 			ELSE
+				variable.SetUntraced(untraced);
 				InitVariable(variable(SyntaxTree.Variable));
 				InitVariable(variable(SyntaxTree.Variable));
 				(*
 				(*
 				ASSERT(variable.type.resolved = type.resolved)
 				ASSERT(variable.type.resolved = type.resolved)
 				*)
 				*)
 			END;
 			END;
-			variable.SetUntraced(untraced);
 			RETURN variable(SyntaxTree.Variable)
 			RETURN variable(SyntaxTree.Variable)
 		END GetTemporaryVariable;
 		END GetTemporaryVariable;