dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-pnet-commits] CVS: pnet/ilalink link_class.c,1.10,1.11 link_met


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnet/ilalink link_class.c,1.10,1.11 link_method.c,1.23,1.24
Date: Tue, 18 Feb 2003 02:23:53 -0500

Update of /cvsroot/dotgnu-pnet/pnet/ilalink
In directory subversions:/tmp/cvs-serv15423/ilalink

Modified Files:
        link_class.c link_method.c 
Log Message:


Handle generic parameters while linking classes and methods.


Index: link_class.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ilalink/link_class.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -r1.10 -r1.11
*** link_class.c        24 Dec 2002 01:25:18 -0000      1.10
--- link_class.c        18 Feb 2003 07:23:49 -0000      1.11
***************
*** 44,47 ****
--- 44,52 ----
        ILMember *member;
        ILLibraryFind find;
+       ILUInt32 genericNum;
+       ILGenericPar *genPar;
+       ILGenericPar *newGenPar;
+       ILProgramItem *constraint;
+       ILTypeSpec *spec;
  
        /* Convert the parent class reference */
***************
*** 224,227 ****
--- 229,272 ----
                        return 0;
                }
+       }
+ 
+       /* Convert the generic parameters, if any */
+       genericNum = 0;
+       while((genPar = ILGenericParGetFromOwner
+                               (ILToProgramItem(classInfo), genericNum)) != 0)
+       {
+               newGenPar = ILGenericParCreate
+                       (linker->image, 0, ILToProgramItem(newClass), 
genericNum);
+               if(!newGenPar)
+               {
+                       _ILLinkerOutOfMemory(linker);
+                       return 0;
+               }
+               if(!ILGenericParSetName(newGenPar, ILGenericPar_Name(genPar)))
+               {
+                       _ILLinkerOutOfMemory(linker);
+                       return 0;
+               }
+               constraint = ILGenericPar_Constraint(genPar);
+               if(constraint)
+               {
+                       spec = ILProgramItemToTypeSpec(constraint);
+                       if(spec)
+                       {
+                               constraint = ILToProgramItem
+                                       (_ILLinkerConvertTypeSpec(linker, 
ILTypeSpec_Type(spec)));
+                       }
+                       else
+                       {
+                               constraint = ILToProgramItem
+                                       (_ILLinkerConvertClassRef(linker, 
(ILClass *)constraint));
+                       }
+                       if(!constraint)
+                       {
+                               return 0;
+                       }
+                       ILGenericParSetConstraint(newGenPar, constraint);
+               }
+               ++genericNum;
        }
  

Index: link_method.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ilalink/link_method.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -r1.23 -r1.24
*** link_method.c       15 Feb 2003 01:57:52 -0000      1.23
--- link_method.c       18 Feb 2003 07:23:49 -0000      1.24
***************
*** 143,146 ****
--- 143,153 ----
                break;
  
+               case IL_META_TOKEN_METHOD_SPEC:
+               {
+                       /* Convert a generic method specification */
+                       /* TODO */
+               }
+               break;
+ 
                default:
                {
***************
*** 574,577 ****
--- 581,589 ----
        ILUInt32 numParams;
        char *newName = 0;
+       ILUInt32 genericNum;
+       ILGenericPar *genPar;
+       ILGenericPar *newGenPar;
+       ILProgramItem *constraint;
+       ILTypeSpec *spec;
  
        /* Rename the method if it is within the "<Module>" class and private */
***************
*** 787,790 ****
--- 799,842 ----
                        }
                }
+       }
+ 
+       /* Convert the generic parameters, if any */
+       genericNum = 0;
+       while((genPar = ILGenericParGetFromOwner
+                               (ILToProgramItem(method), genericNum)) != 0)
+       {
+               newGenPar = ILGenericParCreate(linker->image, 0,
+                                                                          
ILToProgramItem(newMethod), genericNum);
+               if(!newGenPar)
+               {
+                       _ILLinkerOutOfMemory(linker);
+                       return 0;
+               }
+               if(!ILGenericParSetName(newGenPar, ILGenericPar_Name(genPar)))
+               {
+                       _ILLinkerOutOfMemory(linker);
+                       return 0;
+               }
+               constraint = ILGenericPar_Constraint(genPar);
+               if(constraint)
+               {
+                       spec = ILProgramItemToTypeSpec(constraint);
+                       if(spec)
+                       {
+                               constraint = ILToProgramItem
+                                       (_ILLinkerConvertTypeSpec(linker, 
ILTypeSpec_Type(spec)));
+                       }
+                       else
+                       {
+                               constraint = ILToProgramItem
+                                       (_ILLinkerConvertClassRef(linker, 
(ILClass *)constraint));
+                       }
+                       if(!constraint)
+                       {
+                               return 0;
+                       }
+                       ILGenericParSetConstraint(newGenPar, constraint);
+               }
+               ++genericNum;
        }
  





reply via email to

[Prev in Thread] Current Thread [Next in Thread]