Browse Source

Moved "parse_generic_parameters" and "insert_generic_parameter_types" from "pdecl.pas" to "pgenutil.pas"

git-svn-id: branches/svenbarth/generics@17404 -
svenbarth 14 years ago
parent
commit
b1959e5e89
3 changed files with 57 additions and 54 deletions
  1. 1 50
      compiler/pdecl.pas
  2. 1 1
      compiler/pdecobj.pas
  3. 55 3
      compiler/pgenutil.pas

+ 1 - 50
compiler/pdecl.pas

@@ -47,10 +47,6 @@ interface
     procedure property_dec(is_classpropery: boolean);
     procedure resourcestring_dec;
 
-    { generics support }
-    function parse_generic_parameters:TFPObjectList;
-    procedure insert_generic_parameter_types(def:tstoreddef;genericdef:tstoreddef;genericlist:TFPObjectList);
-
 implementation
 
     uses
@@ -70,7 +66,7 @@ implementation
        ncgutil,
        { parser }
        scanner,
-       pbase,pexpr,ptype,ptconst,pdecsub,pdecvar,pdecobj,
+       pbase,pexpr,ptype,ptconst,pdecsub,pdecvar,pdecobj,pgenutil,
        { cpu-information }
        cpuinfo
        ;
@@ -336,51 +332,6 @@ implementation
          consume(_SEMICOLON);
       end;
 
-    function parse_generic_parameters:TFPObjectList;
-    var
-      generictype : ttypesym;
-    begin
-      result:=TFPObjectList.Create(false);
-      repeat
-        if token=_ID then
-          begin
-            generictype:=ttypesym.create(orgpattern,cundefinedtype);
-            include(generictype.symoptions,sp_generic_para);
-            result.add(generictype);
-          end;
-        consume(_ID);
-      until not try_to_consume(_COMMA) ;
-    end;
-
-    procedure insert_generic_parameter_types(def:tstoreddef;genericdef:tstoreddef;genericlist:TFPObjectList);
-      var
-        i: longint;
-        generictype: ttypesym;
-        st: tsymtable;
-      begin
-        def.genericdef:=genericdef;
-        if not assigned(genericlist) then
-          exit;
-
-        case def.typ of
-          recorddef,objectdef: st:=tabstractrecorddef(def).symtable;
-          arraydef: st:=tarraydef(def).symtable;
-          procvardef,procdef: st:=tabstractprocdef(def).parast;
-          else
-            internalerror(201101020);
-        end;
-
-        for i:=0 to genericlist.count-1 do
-          begin
-            generictype:=ttypesym(genericlist[i]);
-            if generictype.typedef.typ=undefineddef then
-              include(def.defoptions,df_generic)
-            else
-              include(def.defoptions,df_specialization);
-            st.insert(generictype);
-          end;
-       end;
-
     procedure types_dec(in_structure: boolean);
 
       procedure finalize_objc_class_or_protocol_external_status(od: tobjectdef);

+ 1 - 1
compiler/pdecobj.pas

@@ -46,7 +46,7 @@ implementation
       symbase,symsym,symtable,
       node,nld,nmem,ncon,ncnv,ncal,
       fmodule,scanner,
-      pbase,pexpr,pdecsub,pdecvar,ptype,pdecl,ppu
+      pbase,pexpr,pdecsub,pdecvar,ptype,pdecl,pgenutil,ppu
       ;
 
     const

+ 55 - 3
compiler/pgenutil.pas

@@ -27,19 +27,24 @@ unit pgenutil;
 interface
 
 uses
-  symtype;
+  { common }
+  cclasses,
+  { symtable }
+  symtype,symdef;
 
     procedure generate_specialization(var tt:tdef;parse_class_parent:boolean);
+    function parse_generic_parameters:TFPObjectList;
+    procedure insert_generic_parameter_types(def:tstoreddef;genericdef:tstoreddef;genericlist:TFPObjectList);
 
 implementation
 
 uses
   { common }
-  cclasses,cutils,
+  cutils,
   { global }
   globals,tokens,verbose,
   { symtable }
-  symconst,symbase,symdef,symsym,symtable,
+  symconst,symbase,symsym,symtable,
   { modules }
   fmodule,
   { pass 1 }
@@ -357,4 +362,51 @@ uses
       end;
 
 
+    function parse_generic_parameters:TFPObjectList;
+      var
+        generictype : ttypesym;
+      begin
+        result:=TFPObjectList.Create(false);
+        repeat
+          if token=_ID then
+            begin
+              generictype:=ttypesym.create(orgpattern,cundefinedtype);
+              include(generictype.symoptions,sp_generic_para);
+              result.add(generictype);
+            end;
+          consume(_ID);
+        until not try_to_consume(_COMMA) ;
+      end;
+
+
+    procedure insert_generic_parameter_types(def:tstoreddef;genericdef:tstoreddef;genericlist:TFPObjectList);
+      var
+        i: longint;
+        generictype: ttypesym;
+        st: tsymtable;
+      begin
+        def.genericdef:=genericdef;
+        if not assigned(genericlist) then
+          exit;
+
+        case def.typ of
+          recorddef,objectdef: st:=tabstractrecorddef(def).symtable;
+          arraydef: st:=tarraydef(def).symtable;
+          procvardef,procdef: st:=tabstractprocdef(def).parast;
+          else
+            internalerror(201101020);
+        end;
+
+        for i:=0 to genericlist.count-1 do
+          begin
+            generictype:=ttypesym(genericlist[i]);
+            if generictype.typedef.typ=undefineddef then
+              include(def.defoptions,df_generic)
+            else
+              include(def.defoptions,df_specialization);
+            st.insert(generictype);
+          end;
+       end;
+
+
 end.