Quellcode durchsuchen

Patched an issue with ARRAY OF Cell in ActiveCells3.

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6365 8c9fc860-2736-0410-a75d-ab315db34111
felixf vor 9 Jahren
Ursprung
Commit
e62d536cdc
1 geänderte Dateien mit 8 neuen und 1 gelöschten Zeilen
  1. 8 1
      source/FoxSemanticChecker.Mod

+ 8 - 1
source/FoxSemanticChecker.Mod

@@ -512,12 +512,18 @@ TYPE
 				- static array of open array forbidden
 		**)
 		PROCEDURE VisitArrayType(x: SyntaxTree.ArrayType);
-		VAR arrayBase: SyntaxTree.Type; e: SyntaxTree.Expression;
+		VAR arrayBase: SyntaxTree.Type; e: SyntaxTree.Expression; pointerType: SyntaxTree.PointerType;
 		BEGIN
 			IF TypeNeedsResolution(x) THEN
 				x.SetArrayBase(ResolveType(x.arrayBase));
 				IF x.arrayBase.resolved.isRealtime THEN x.SetRealtime(TRUE) END;
 				arrayBase := x.arrayBase.resolved;
+				IF (arrayBase IS SyntaxTree.CellType) (*& (cellsAreObjects)*) THEN
+					pointerType := SyntaxTree.NewPointerType(x.position, x.scope);
+					pointerType.SetPointerBase(arrayBase);
+					pointerType.SetHidden(TRUE);
+					x.SetArrayBase(pointerType);
+				END;
 				IF x.length # NIL THEN
 				
 					e := ResolveExpression(x.length);
@@ -527,6 +533,7 @@ TYPE
 						x.SetLength(ConstantIntegerGeq0(e (*x.length*)));
 					END;
 				END;
+
 				IF arrayBase IS SyntaxTree.ArrayType THEN
 					IF (x.form = SyntaxTree.Static) & (arrayBase(SyntaxTree.ArrayType).form = SyntaxTree.Open) THEN
 						Error(x.position,Diagnostics.Invalid,"forbidden static array of dynamic array");