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_field.c,1.8,1.9 link_metho


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnet/ilalink link_field.c,1.8,1.9 link_method.c,1.22,1.23
Date: Fri, 14 Feb 2003 20:57:54 -0500

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

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


Add the new helper function ILClassNextMemberMatch and use it to speed
up method/field resolution in ilasm and ilalink.


Index: link_field.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ilalink/link_field.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** link_field.c        14 Sep 2002 10:59:56 -0000      1.8
--- link_field.c        15 Feb 2003 01:57:52 -0000      1.9
***************
*** 54,93 ****
                return 0;
        }
!       while((newField = (ILField *)ILClassNextMemberByKind
!                               (newClass, (ILMember *)newField, 
IL_META_MEMBERKIND_FIELD))
!                                               != 0)
        {
!               if(!strcmp(ILField_Name(newField), name) &&
!                  ILTypeIdentical(ILField_Type(newField), type))
                {
!                       /* Bail out if the field is already defined.  This 
shouldn't
!                          happen very often because duplicate classes are 
trapped long
!                          before control gets to here.  Global fields may 
result in
!                          this code being used, however */
!                       if((ILField_Token(newField) & IL_META_TOKEN_MASK)
!                                       != IL_META_TOKEN_MEMBER_REF)
                        {
!                               if(newName)
!                               {
!                                       ILFree(newName);
!                               }
!                               return 1;
                        }
  
!                       /* Set the type to the new value, just in case the 
previous
!                          reference did not involve modifiers */
!                       ILMemberSetSignature((ILMember *)newField, type);
  
!                       /* Allocate a new token for the field */
!                       if(!ILFieldNewToken(newField))
                        {
!                               _ILLinkerOutOfMemory(linker);
!                               if(newName)
!                               {
!                                       ILFree(newName);
!                               }
!                               return 0;
                        }
!                       break;
                }
        }
--- 54,88 ----
                return 0;
        }
!       if((newField = (ILField *)ILClassNextMemberMatch
!                       (newClass, (ILMember *)0,
!                        IL_META_MEMBERKIND_FIELD, name, type)) != 0)
        {
!               /* Bail out if the field is already defined.  This shouldn't
!                  happen very often because duplicate classes are trapped long
!                  before control gets to here.  Global fields may result in
!                  this code being used, however */
!               if((ILField_Token(newField) & IL_META_TOKEN_MASK)
!                               != IL_META_TOKEN_MEMBER_REF)
                {
!                       if(newName)
                        {
!                               ILFree(newName);
                        }
+                       return 1;
+               }
  
!               /* Set the type to the new value, just in case the previous
!                  reference did not involve modifiers */
!               ILMemberSetSignature((ILMember *)newField, type);
  
!               /* Allocate a new token for the field */
!               if(!ILFieldNewToken(newField))
!               {
!                       _ILLinkerOutOfMemory(linker);
!                       if(newName)
                        {
!                               ILFree(newName);
                        }
!                       return 0;
                }
        }

Index: link_method.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ilalink/link_method.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -r1.22 -r1.23
*** link_method.c       13 Feb 2003 23:19:12 -0000      1.22
--- link_method.c       15 Feb 2003 01:57:52 -0000      1.23
***************
*** 597,632 ****
                return 0;
        }
!       while((newMethod = (ILMethod *)ILClassNextMemberByKind
!                               (newClass, (ILMember *)newMethod, 
IL_META_MEMBERKIND_METHOD))
!                                               != 0)
!       {
!               if(!strcmp(ILMethod_Name(newMethod), name) &&
!                  ILTypeIdentical(ILMethod_Signature(newMethod), signature))
!               {
!                       /* Bail out if the method is already defined.  This 
shouldn't
!                          happen very often because duplicate classes are 
trapped long
!                          before control gets to here.  Global methods may 
result in
!                          this code being used, however */
!                       if((ILMethod_Token(newMethod) & IL_META_TOKEN_MASK)
!                                       != IL_META_TOKEN_MEMBER_REF)
                        {
!                               if(newName)
!                               {
!                                       ILFree(newName);
!                               }
!                               return 1;
                        }
  
!                       /* Allocate a new token for the method */
!                       if(!ILMethodNewToken(newMethod))
                        {
!                               _ILLinkerOutOfMemory(linker);
!                               if(newName)
!                               {
!                                       ILFree(newName);
!                               }
!                               return 0;
                        }
!                       break;
                }
        }
--- 597,627 ----
                return 0;
        }
!       if((newMethod = (ILMethod *)ILClassNextMemberMatch
!                       (newClass, (ILMember *)0,
!                        IL_META_MEMBERKIND_METHOD, name, signature)) != 0)
!       {
!               /* Bail out if the method is already defined.  This shouldn't
!                  happen very often because duplicate classes are trapped long
!                  before control gets to here.  Global methods may result in
!                  this code being used, however */
!               if((ILMethod_Token(newMethod) & IL_META_TOKEN_MASK)
!                               != IL_META_TOKEN_MEMBER_REF)
!               {
!                       if(newName)
                        {
!                               ILFree(newName);
                        }
+                       return 1;
+               }
  
!               /* Allocate a new token for the method */
!               if(!ILMethodNewToken(newMethod))
!               {
!                       _ILLinkerOutOfMemory(linker);
!                       if(newName)
                        {
!                               ILFree(newName);
                        }
!                       return 0;
                }
        }
***************
*** 939,955 ****
        {
                /* Searching for a method */
!               method = 0;
!               while((method = (ILMethod *)ILClassNextMemberByKind
!                               (owner, (ILMember *)method, 
IL_META_MEMBERKIND_METHOD)) != 0)
                {
!                       if(!strcmp(ILMethod_Name(method), name) &&
!                          ILTypeIdentical(ILMethod_Signature(method), 
signature))
                        {
!                               if(newName)
!                               {
!                                       ILFree(newName);
!                               }
!                               return (ILMember *)method;
                        }
                }
  
--- 934,946 ----
        {
                /* Searching for a method */
!               if((method = (ILMethod *)ILClassNextMemberMatch
!                               (owner, (ILMember *)0,
!                                IL_META_MEMBERKIND_METHOD, name, signature)) 
!= 0)
                {
!                       if(newName)
                        {
!                               ILFree(newName);
                        }
+                       return (ILMember *)method;
                }
  
***************
*** 976,992 ****
        {
                /* Searching for a field */
!               field = 0;
!               while((field = (ILField *)ILClassNextMemberByKind
!                               (owner, (ILMember *)field, 
IL_META_MEMBERKIND_FIELD)) != 0)
                {
!                       if(!strcmp(ILField_Name(field), name) &&
!                          ILTypeIdentical(ILFieldGetTypeWithPrefixes(field), 
signature))
                        {
!                               if(newName)
!                               {
!                                       ILFree(newName);
!                               }
!                               return (ILMember *)field;
                        }
                }
  
--- 967,979 ----
        {
                /* Searching for a field */
!               if((field = (ILField *)ILClassNextMemberMatch
!                               (owner, (ILMember *)0,
!                                IL_META_MEMBERKIND_FIELD, name, signature)) != 
0)
                {
!                       if(newName)
                        {
!                               ILFree(newName);
                        }
+                       return (ILMember *)field;
                }
  





reply via email to

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