Selaa lähdekoodia

compiler: make current_genericdef, current_specializedef tstoreddef instead of tabstractrecorddef to implement generic arrays

git-svn-id: trunk@16671 -
paul 14 vuotta sitten
vanhempi
commit
e8502b8ec2
5 muutettua tiedostoa jossa 17 lisäystä ja 17 poistoa
  1. 2 2
      compiler/pdecobj.pas
  2. 4 4
      compiler/pdecsub.pas
  3. 4 4
      compiler/psub.pas
  4. 5 5
      compiler/ptype.pas
  5. 2 2
      compiler/symdef.pas

+ 2 - 2
compiler/pdecobj.pas

@@ -953,9 +953,9 @@ implementation
 
 
     function object_dec(objecttype:tobjecttyp;const n:tidstring;genericdef:tstoreddef;genericlist:TFPObjectList;fd : tobjectdef) : tobjectdef;
     function object_dec(objecttype:tobjecttyp;const n:tidstring;genericdef:tstoreddef;genericlist:TFPObjectList;fd : tobjectdef) : tobjectdef;
       var
       var
-        old_current_structdef,
+        old_current_structdef: tabstractrecorddef;
         old_current_genericdef,
         old_current_genericdef,
-        old_current_specializedef: tabstractrecorddef;
+        old_current_specializedef: tstoreddef;
       begin
       begin
         old_current_structdef:=current_structdef;
         old_current_structdef:=current_structdef;
         old_current_genericdef:=current_genericdef;
         old_current_genericdef:=current_genericdef;

+ 4 - 4
compiler/pdecsub.pas

@@ -802,9 +802,9 @@ implementation
         popclass : integer;
         popclass : integer;
         ImplIntf : TImplementedInterface;
         ImplIntf : TImplementedInterface;
         old_parse_generic : boolean;
         old_parse_generic : boolean;
-        old_current_structdef,
+        old_current_structdef: tabstractrecorddef;
         old_current_genericdef,
         old_current_genericdef,
-        old_current_specializedef : tabstractrecorddef;
+        old_current_specializedef: tstoreddef;
         lasttoken,lastidtoken: ttoken;
         lasttoken,lastidtoken: ttoken;
 
 
         procedure parse_operator_name;
         procedure parse_operator_name;
@@ -1189,9 +1189,9 @@ implementation
           var
           var
             popclass: integer;
             popclass: integer;
             old_parse_generic: boolean;
             old_parse_generic: boolean;
-            old_current_structdef,
+            old_current_structdef: tabstractrecorddef;
             old_current_genericdef,
             old_current_genericdef,
-            old_current_specializedef: tabstractrecorddef;
+            old_current_specializedef: tstoreddef;
           begin
           begin
             old_parse_generic:=parse_generic;
             old_parse_generic:=parse_generic;
             { Add ObjectSymtable to be able to find generic type definitions }
             { Add ObjectSymtable to be able to find generic type definitions }

+ 4 - 4
compiler/psub.pas

@@ -1388,9 +1388,9 @@ implementation
          old_current_procinfo : tprocinfo;
          old_current_procinfo : tprocinfo;
          old_block_type : tblock_type;
          old_block_type : tblock_type;
          st : TSymtable;
          st : TSymtable;
-         old_current_structdef,
+         old_current_structdef: tabstractrecorddef;
          old_current_genericdef,
          old_current_genericdef,
-         old_current_specializedef: tabstractrecorddef;
+         old_current_specializedef: tstoreddef;
       begin
       begin
          old_current_procinfo:=current_procinfo;
          old_current_procinfo:=current_procinfo;
          old_block_type:=block_type;
          old_block_type:=block_type;
@@ -1655,9 +1655,9 @@ implementation
 
 
       var
       var
         old_current_procinfo : tprocinfo;
         old_current_procinfo : tprocinfo;
-        old_current_structdef,
+        old_current_structdef: tabstractrecorddef;
         old_current_genericdef,
         old_current_genericdef,
-        old_current_specializedef: tabstractrecorddef;
+        old_current_specializedef: tstoreddef;
         pdflags    : tpdflags;
         pdflags    : tpdflags;
         pd,firstpd : tprocdef;
         pd,firstpd : tprocdef;
         s          : string;
         s          : string;

+ 5 - 5
compiler/ptype.pas

@@ -837,9 +837,9 @@ implementation
     { reads a record declaration }
     { reads a record declaration }
     function record_dec(const n:tidstring;genericdef:tstoreddef;genericlist:TFPObjectList):tdef;
     function record_dec(const n:tidstring;genericdef:tstoreddef;genericlist:TFPObjectList):tdef;
       var
       var
-         old_current_structdef,
+         old_current_structdef: tabstractrecorddef;
          old_current_genericdef,
          old_current_genericdef,
-         old_current_specializedef: tabstractrecorddef;
+         old_current_specializedef: tstoreddef;
          old_parse_generic: boolean;
          old_parse_generic: boolean;
          recst: trecordsymtable;
          recst: trecordsymtable;
       begin
       begin
@@ -1055,7 +1055,7 @@ implementation
         end;
         end;
 
 
 
 
-      procedure array_dec(is_packed: boolean);
+      procedure array_dec(is_packed:boolean;genericdef:tstoreddef;genericlist:TFPObjectList);
         var
         var
           lowval,
           lowval,
           highval   : TConstExprInt;
           highval   : TConstExprInt;
@@ -1286,7 +1286,7 @@ implementation
               end;
               end;
             _ARRAY:
             _ARRAY:
               begin
               begin
-                array_dec(false);
+                array_dec(false,genericdef,genericlist);
               end;
               end;
             _SET:
             _SET:
               begin
               begin
@@ -1312,7 +1312,7 @@ implementation
                   (token = _BITPACKED);
                   (token = _BITPACKED);
                 consume(token);
                 consume(token);
                 if token=_ARRAY then
                 if token=_ARRAY then
-                  array_dec(bitpacking)
+                  array_dec(bitpacking,genericdef,genericlist)
                 else if token=_SET then
                 else if token=_SET then
                   set_dec
                   set_dec
                 else if token=_FILE then
                 else if token=_FILE then

+ 2 - 2
compiler/symdef.pas

@@ -642,8 +642,8 @@ interface
 
 
     var
     var
        current_structdef: tabstractrecorddef; { used for private functions check !! }
        current_structdef: tabstractrecorddef; { used for private functions check !! }
-       current_genericdef : tabstractrecorddef; { used to reject declaration of generic class inside generic class }
-       current_specializedef : tabstractrecorddef; { used to implement usage of generic class in itself }
+       current_genericdef: tstoreddef;        { used to reject declaration of generic class inside generic class }
+       current_specializedef: tstoreddef;     { used to implement usage of generic class in itself }
 
 
     { default types }
     { default types }
        generrordef,               { error in definition }
        generrordef,               { error in definition }