Browse Source

* arrayconstructor -> arrayofconst fixed when arraycosntructor was not
variant.

peter 26 years ago
parent
commit
19c48bf75b
4 changed files with 26 additions and 7 deletions
  1. 6 2
      compiler/cg386ld.pas
  2. 7 2
      compiler/htypechk.pas
  3. 7 1
      compiler/tccal.pas
  4. 6 2
      compiler/tree.pas

+ 6 - 2
compiler/cg386ld.pas

@@ -832,7 +832,7 @@ implementation
         dovariant : boolean;
         dovariant : boolean;
         elesize : longint;
         elesize : longint;
       begin
       begin
-        dovariant:=parraydef(p^.resulttype)^.isvariant;
+        dovariant:=p^.forcevaria or parraydef(p^.resulttype)^.isvariant;
         if dovariant then
         if dovariant then
          elesize:=8
          elesize:=8
         else
         else
@@ -966,7 +966,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.73  1999-08-13 21:33:09  peter
+  Revision 1.74  1999-08-17 13:26:06  peter
+    * arrayconstructor -> arrayofconst fixed when arraycosntructor was not
+      variant.
+
+  Revision 1.73  1999/08/13 21:33:09  peter
     * support for array constructors extended and more error checking
     * support for array constructors extended and more error checking
 
 
   Revision 1.72  1999/08/09 22:19:50  peter
   Revision 1.72  1999/08/09 22:19:50  peter

+ 7 - 2
compiler/htypechk.pas

@@ -257,7 +257,8 @@ implementation
                               b:=1;
                               b:=1;
                             end
                             end
                            else
                            else
-                            if isconvertable(parraydef(def_to)^.definition,parraydef(def_from)^.definition,hct,nothingn,false)<>0 then
+                            if isconvertable(parraydef(def_to)^.definition,
+                                             parraydef(def_from)^.definition,hct,nothingn,false)<>0 then
                              begin
                              begin
                                doconv:=hct;
                                doconv:=hct;
                                b:=2;
                                b:=2;
@@ -695,7 +696,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.37  1999-08-16 23:23:38  peter
+  Revision 1.38  1999-08-17 13:26:07  peter
+    * arrayconstructor -> arrayofconst fixed when arraycosntructor was not
+      variant.
+
+  Revision 1.37  1999/08/16 23:23:38  peter
     * arrayconstructor -> openarray type conversions for element types
     * arrayconstructor -> openarray type conversions for element types
 
 
   Revision 1.36  1999/08/06 12:49:36  jonas
   Revision 1.36  1999/08/06 12:49:36  jonas

+ 7 - 1
compiler/tccal.pas

@@ -250,6 +250,8 @@ implementation
                             (pocall_cdecl in aktcallprocsym^.definition^.proccalloptions) and
                             (pocall_cdecl in aktcallprocsym^.definition^.proccalloptions) and
                             (po_external in aktcallprocsym^.definition^.procoptions) then
                             (po_external in aktcallprocsym^.definition^.procoptions) then
                            p^.left^.cargs:=true;
                            p^.left^.cargs:=true;
+                         { force variant array }
+                         p^.left^.forcevaria:=true;
                        end
                        end
                       else
                       else
                        begin
                        begin
@@ -1206,7 +1208,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.60  1999-08-16 23:23:39  peter
+  Revision 1.61  1999-08-17 13:26:08  peter
+    * arrayconstructor -> arrayofconst fixed when arraycosntructor was not
+      variant.
+
+  Revision 1.60  1999/08/16 23:23:39  peter
     * arrayconstructor -> openarray type conversions for element types
     * arrayconstructor -> openarray type conversions for element types
 
 
   Revision 1.59  1999/08/13 21:33:16  peter
   Revision 1.59  1999/08/13 21:33:16  peter

+ 6 - 2
compiler/tree.pas

@@ -231,7 +231,7 @@ unit tree;
              labeln,goton : (labelnr : pasmlabel);
              labeln,goton : (labelnr : pasmlabel);
              withn : (withsymtable : pwithsymtable;tablecount : longint;withreference:preference;islocal:boolean);
              withn : (withsymtable : pwithsymtable;tablecount : longint;withreference:preference;islocal:boolean);
              onn : (exceptsymtable : psymtable;excepttype : pobjectdef);
              onn : (exceptsymtable : psymtable;excepttype : pobjectdef);
-             arrayconstructn : (cargs,cargswap,novariaallowed: boolean;constructdef:pdef);
+             arrayconstructn : (cargs,cargswap,forcevaria,novariaallowed: boolean;constructdef:pdef);
            end;
            end;
 
 
     function gennode(t : ttreetyp;l,r : ptree) : ptree;
     function gennode(t : ttreetyp;l,r : ptree) : ptree;
@@ -1739,7 +1739,11 @@ unit tree;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.89  1999-08-16 23:23:42  peter
+  Revision 1.90  1999-08-17 13:26:09  peter
+    * arrayconstructor -> arrayofconst fixed when arraycosntructor was not
+      variant.
+
+  Revision 1.89  1999/08/16 23:23:42  peter
     * arrayconstructor -> openarray type conversions for element types
     * arrayconstructor -> openarray type conversions for element types
 
 
   Revision 1.88  1999/08/13 21:33:18  peter
   Revision 1.88  1999/08/13 21:33:18  peter