Explorar el Código

Fixed alignment of range type

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8328 8c9fc860-2736-0410-a75d-ab315db34111
negelef hace 7 años
padre
commit
101fb4c012
Se han modificado 1 ficheros con 5 adiciones y 2 borrados
  1. 5 2
      source/FoxGlobal.Mod

+ 5 - 2
source/FoxGlobal.Mod

@@ -606,7 +606,7 @@ TYPE
 			ELSIF type IS SyntaxTree.CellType THEN
 				size := addressSize;
 			ELSIF type IS SyntaxTree.RangeType THEN
-				size := 3 * SizeOf(longintType);
+				size := 3 * SizeOf(lenType);
 			ELSE
 				HALT(100)
 			END;
@@ -678,6 +678,8 @@ TYPE
 				ELSE
 					result := type.alignmentInBits
 				END;
+			ELSIF type IS SyntaxTree.RangeType THEN
+				result := AlignmentOf(alignment,lenType);
 			ELSIF type IS SyntaxTree.StringType THEN
 				result := SizeOf(type(SyntaxTree.StringType).baseType);
 			ELSE
@@ -780,11 +782,12 @@ TYPE
 		system.nilType := SyntaxTree.NewNilType(system.addressSize);
 		system.addressType := SyntaxTree.NewAddressType(system.addressSize);
 		system.sizeType := SyntaxTree.NewSizeType(system.addressSize);
-		system.rangeType := SyntaxTree.NewRangeType(3 * system.SizeOf(system.longintType));
 
 		system.lenType := system.longintType;
 		(* generally, the lenType should be sizeType but for historical (legacy) reasons, it is longint in the current implementation *)
 
+		system.rangeType := SyntaxTree.NewRangeType(3 * system.SizeOf(system.lenType));
+
 		system.complexType := Complex64;
 		system.longcomplexType := Complex128;
 		system.setType := SyntaxTree.NewSetType(system.addressSize);