瀏覽代碼

patched test case: SET {3..2} must be empty.

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6842 8c9fc860-2736-0410-a75d-ab315db34111
felixf 9 年之前
父節點
當前提交
869e3d5d7f
共有 1 個文件被更改,包括 8 次插入12 次删除
  1. 8 12
      source/FoxSemanticChecker.Mod

+ 8 - 12
source/FoxSemanticChecker.Mod

@@ -1977,20 +1977,16 @@ TYPE
 						ELSIF (rightInteger<0) OR (rightInteger >= system.setType.sizeInBits) THEN
 							Error(right.position,Diagnostics.Invalid,"not allowed set integer value");
 						ELSE
-							IF leftInteger > rightInteger THEN
-								temp := leftInteger;  leftInteger := rightInteger;  rightInteger := temp
-							END;
-							IF leftInteger > MAX(SET) THEN leftInteger := MAX(SET) END;
-							IF rightInteger > MAX(SET) THEN rightInteger := MAX(SET) END; (*!!!!!!!!! this is a hack !!!!!!! *)
-							(*!	in case of MAX(SET) =31 and --bits=64 some kind of sign extension
+							IF (leftInteger > MAX(SET)) OR (rightInteger <0) THEN 
+								s := {};
+							ELSE
+								IF rightInteger > MAX(SET) THEN rightInteger := MAX(SET) END; 
+								IF leftInteger < 0 THEN leftInteger := 0 END;
+								(*!!!!!!!!! this is a hack !!!!!!! *)
+								(*!	in case of MAX(SET) =31 and --bits=64 some kind of sign extension
 								extends the range  x..31  to  x..63 !!!!!! *)
-							s := s + {leftInteger..rightInteger};	
-							(* same but more explicit:
-							WHILE (leftInteger <= rightInteger) DO
-								INCL(s,leftInteger);
-								INC(leftInteger);
+								s := s + {leftInteger..rightInteger};	
 							END;
-							*)
 						END;
 					ELSE
 						constant := FALSE;