2
0
Эх сурвалжийг харах

* unified def creation for open arrays

git-svn-id: trunk@38408 -
florian 7 жил өмнө
parent
commit
6d5ce55232

+ 1 - 1
compiler/pdecsub.pas

@@ -410,7 +410,7 @@ implementation
                 consume(_ARRAY);
                 consume(_ARRAY);
                 consume(_OF);
                 consume(_OF);
                 { define range and type of range }
                 { define range and type of range }
-                hdef:=carraydef.create(0,-1,sizesinttype);
+                hdef:=carraydef.create_openarray;
                 { array of const ? }
                 { array of const ? }
                 if (token=_CONST) and (m_objpas in current_settings.modeswitches) then
                 if (token=_CONST) and (m_objpas in current_settings.modeswitches) then
                  begin
                  begin

+ 1 - 1
compiler/pdecvar.pas

@@ -414,7 +414,7 @@ implementation
                       begin
                       begin
                         consume(_OF);
                         consume(_OF);
                         { define range and type of range }
                         { define range and type of range }
-                        hdef:=carraydef.create(0,-1,s32inttype);
+                        hdef:=carraydef.create_openarray;
                         hdef.owner:=astruct.symtable;
                         hdef.owner:=astruct.symtable;
                         { define field type }
                         { define field type }
                         single_type(arraytype,[]);
                         single_type(arraytype,[]);

+ 1 - 1
compiler/psystem.pas

@@ -379,7 +379,7 @@ implementation
   {$endif i8086}
   {$endif i8086}
 {$endif x86}
 {$endif x86}
         set_default_ptr_types;
         set_default_ptr_types;
-        openchararraytype:=carraydef.create(0,-1,sizesinttype);
+        openchararraytype:=carraydef.create_openarray;
         tarraydef(openchararraytype).elementdef:=cansichartype;
         tarraydef(openchararraytype).elementdef:=cansichartype;
         cfiletype:=cfiledef.createuntyped;
         cfiletype:=cfiledef.createuntyped;
         if f_variants in features then
         if f_variants in features then

+ 9 - 0
compiler/symdef.pas

@@ -517,6 +517,7 @@ interface
           function elecount : asizeuint;
           function elecount : asizeuint;
           constructor create_from_pointer(def:tpointerdef);virtual;
           constructor create_from_pointer(def:tpointerdef);virtual;
           constructor create(l,h:asizeint;def:tdef);virtual;
           constructor create(l,h:asizeint;def:tdef);virtual;
+          constructor create_openarray;virtual;
           class function getreusable(def: tdef; elems: asizeint): tarraydef; virtual;
           class function getreusable(def: tdef; elems: asizeint): tarraydef; virtual;
           { same as above, but in case the def must never be freed after the
           { same as above, but in case the def must never be freed after the
             current module has been compiled -- even if the def was not written
             current module has been compiled -- even if the def was not written
@@ -3616,6 +3617,12 @@ implementation
       end;
       end;
 
 
 
 
+    constructor tarraydef.create_openarray;
+      begin
+        self.create(0,-1,sizesinttype)
+      end;
+
+
     class function tarraydef.getreusable(def: tdef; elems: asizeint): tarraydef;
     class function tarraydef.getreusable(def: tdef; elems: asizeint): tarraydef;
       var
       var
         res: PHashSetItem;
         res: PHashSetItem;
@@ -3650,6 +3657,7 @@ implementation
         result:=tarraydef(res^.Data);
         result:=tarraydef(res^.Data);
       end;
       end;
 
 
+
     class function tarraydef.getreusable_no_free(def: tdef; elems: asizeint): tarraydef;
     class function tarraydef.getreusable_no_free(def: tdef; elems: asizeint): tarraydef;
       begin
       begin
         result:=getreusable(def,elems);
         result:=getreusable(def,elems);
@@ -3665,6 +3673,7 @@ implementation
         inherited;
         inherited;
       end;
       end;
 
 
+
     constructor tarraydef.create_from_pointer(def:tpointerdef);
     constructor tarraydef.create_from_pointer(def:tpointerdef);
       begin
       begin
          { divide by the element size and do -1 so the array will have a valid size,
          { divide by the element size and do -1 so the array will have a valid size,