Bläddra i källkod

allow length on unsafe static arrays

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6958 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 år sedan
förälder
incheckning
e5122cc63c
1 ändrade filer med 10 tillägg och 5 borttagningar
  1. 10 5
      source/FoxSemanticChecker.Mod

+ 10 - 5
source/FoxSemanticChecker.Mod

@@ -5483,12 +5483,17 @@ TYPE
 
 					IF (base IS SyntaxTree.PointerType) & (parameter0 IS SyntaxTree.Designator) THEN
 						IF base(SyntaxTree.PointerType).isUnsafe THEN
-							Error(position, Diagnostics.Invalid, "forbidden len on unsafe pointer");
+							base := base(SyntaxTree.PointerType).pointerBase.resolved;
+							IF~(base IS SyntaxTree.ArrayType) OR (base(SyntaxTree.ArrayType).form # SyntaxTree.Static) THEN
+								Error(position, Diagnostics.Invalid, "forbidden len on unsafe pointer");
+							END;
+							type0 := base;
+						ELSE
+							parameter0 := NewDereferenceDesignator(position,parameter0(SyntaxTree.Designator));
+							type0 := parameter0.type.resolved;
+							actualParameters.SetExpression(0,parameter0);
+							base := type0;
 						END;
-						parameter0 := NewDereferenceDesignator(position,parameter0(SyntaxTree.Designator));
-						actualParameters.SetExpression(0,parameter0);
-						type0 := parameter0.type.resolved;
-						base := type0;
 					END;
 
 					IF (numberActualParameters=1) OR (numberActualParameters =2) & CheckIntegerType(parameter1) THEN