Bladeren bron

* fixed size of constset when change from small to normalset

peter 24 jaren geleden
bovenliggende
commit
cea68ee35c
2 gewijzigde bestanden met toevoegingen van 29 en 9 verwijderingen
  1. 10 8
      compiler/ncnv.pas
  2. 19 1
      compiler/symdef.pas

+ 10 - 8
compiler/ncnv.pas

@@ -372,11 +372,8 @@ implementation
               tarrayconstructornode(p2).right:=nil;
               p2.free;
             end;
-          if (htype.def=nil) then
-            begin
-               htype:=u8bittype;
-               constsethi:=255;
-            end;
+           if (htype.def=nil) then
+            htype:=u8bittype;
          end
         else
          begin
@@ -785,8 +782,10 @@ implementation
                   begin
                     if (left.nodetype=setconstn) then
                       begin
-                        resulttype:=left.resulttype;
-                        tsetdef(resulttype.def).settype:=normset
+                        tsetdef(left.resulttype.def).changesettype(normset);
+                        result:=left;
+                        left:=nil;
+                        exit;
                       end
                      else
                       convtype:=tc_load_smallset;
@@ -1587,7 +1586,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.39  2001-09-30 16:12:46  jonas
+  Revision 1.40  2001-10-20 17:21:54  peter
+    * fixed size of constset when change from small to normalset
+
+  Revision 1.39  2001/09/30 16:12:46  jonas
     - removed unnecessary i386 pass_2 of as- and isnode and added dummy generic ones
 
   Revision 1.38  2001/09/29 21:32:46  jonas

+ 19 - 1
compiler/symdef.pas

@@ -602,6 +602,7 @@ interface
           procedure deref;override;
           function  gettypename:string;override;
           function  is_publishable : boolean;override;
+          procedure changesettype(s:tsettype);
           { debug }
 {$ifdef GDB}
           function  stabstring : pchar;override;
@@ -2353,6 +2354,20 @@ implementation
       end;
 
 
+    procedure tsetdef.changesettype(s:tsettype);
+      begin
+        case s of
+          smallset :
+            savesize:=sizeof(longint);
+          normset :
+            savesize:=32;
+          varset :
+            internalerror(200110201);
+        end;
+        settype:=s;
+      end;
+
+
 {$ifdef GDB}
     function tsetdef.stabstring : pchar;
       begin
@@ -5420,7 +5435,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.52  2001-10-15 13:16:26  jonas
+  Revision 1.53  2001-10-20 17:21:54  peter
+    * fixed size of constset when change from small to normalset
+
+  Revision 1.52  2001/10/15 13:16:26  jonas
     * better size checking of data (now an error is returned for
       "array[longint] of longint") ("merged")