Browse Source

* fixed a problem with subrange enumerations in case statements

florian 25 years ago
parent
commit
1dac75340e
1 changed files with 25 additions and 5 deletions
  1. 25 5
      compiler/types.pas

+ 25 - 5
compiler/types.pas

@@ -981,6 +981,10 @@ implementation
 
 
     function is_subequal(def1, def2: pdef): boolean;
+
+      var
+         basedef1,basedef2 : penumdef;
+
       Begin
         is_subequal := false;
         if assigned(def1) and assigned(def2) then
@@ -1003,10 +1007,23 @@ implementation
             Begin
               { I assume that both enumerations are equal when the first }
               { pointers are equal.                                      }
-              if (def1^.deftype = enumdef) and (def2^.deftype =enumdef) then
+
+              { I changed this to assume that the enums are equal }
+              { if the basedefs are equal (FK)                    }
+              if (def1^.deftype=enumdef) and (def2^.deftype=enumdef) then
                 Begin
-                  if penumdef(def1)^.firstenum = penumdef(def2)^.firstenum then
-                     is_subequal := TRUE;
+                   { get both basedefs }
+                   basedef1:=penumdef(def1);
+                   while assigned(basedef1^.basedef) do
+                     basedef1:=basedef1^.basedef;
+                   basedef2:=penumdef(def2);
+                   while assigned(basedef2^.basedef) do
+                     basedef2:=basedef2^.basedef;
+                   is_subequal:=basedef1=basedef2;
+                   {
+                   if penumdef(def1)^.firstenum = penumdef(def2)^.firstenum then
+                      is_subequal := TRUE;
+                   }
                 end;
             end;
         end; { endif assigned ... }
@@ -1041,7 +1058,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.99  2000-03-01 15:36:12  florian
+  Revision 1.100  2000-05-28 15:22:54  florian
+    * fixed a problem with subrange enumerations in case statements
+
+  Revision 1.99  2000/03/01 15:36:12  florian
     * some new stuff for the new cg
 
   Revision 1.98  2000/02/28 17:23:57  daniel
@@ -1129,4 +1149,4 @@ end.
     * open array checks also for s32bitdef, because u32bit also has a
       high range of -1
 
-}
+}