Browse Source

Patched this case:

TYPE Vector =  ARRAY [4] OF REAL;
TYPE Transform = ARRAY [4] OF Vector;
VAR x,y,z,u:Vector
VAR T: Transform ;

BEGIN
        T := [x,y,z,u];

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

+ 14 - 1
source/FoxIntermediateBackend.Mod

@@ -2372,13 +2372,26 @@ TYPE
 					END;
 					END;
 				END;
 				END;
 			END RecursiveAssignment;
 			END RecursiveAssignment;
+			
+			PROCEDURE Dimension(): LONGINT;
+			VAR dim: LONGINT; expression: SyntaxTree.Expression;
+			BEGIN
+					dim := 0; 
+					expression := x;
+					WHILE expression IS SyntaxTree.MathArrayExpression DO
+						expression := expression(SyntaxTree.MathArrayExpression).elements.GetExpression(0);
+						INC(dim); 
+					END; 
+					RETURN dim;
+			END Dimension;
+			
 
 
 		BEGIN
 		BEGIN
 			(*static math array not providing pointers anyway *)
 			(*static math array not providing pointers anyway *)
 			variable := GetTemporaryVariable(x.type, FALSE, FALSE (* untraced *));
 			variable := GetTemporaryVariable(x.type, FALSE, FALSE (* untraced *));
 			designator := SyntaxTree.NewSymbolDesignator(Basic.invalidPosition,NIL,variable);
 			designator := SyntaxTree.NewSymbolDesignator(Basic.invalidPosition,NIL,variable);
 			designator.SetType(variable.type);
 			designator.SetType(variable.type);
-			dim := SemanticChecker.Dimension(x.type,{SyntaxTree.Static});
+			dim := Dimension();
 			index := SyntaxTree.NewIndexDesignator(x.position,designator);
 			index := SyntaxTree.NewIndexDesignator(x.position,designator);
 			FOR i := 0 TO dim-1 DO
 			FOR i := 0 TO dim-1 DO
 				element := SyntaxTree.NewIntegerValue(x.position,0);
 				element := SyntaxTree.NewIntegerValue(x.position,0);