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

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

[Dotgnu-pnet-commits] CVS: pnet/ilasm ilasm_build.c,1.18,1.19


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnet/ilasm ilasm_build.c,1.18,1.19
Date: Fri, 14 Feb 2003 20:57:54 -0500

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

Modified Files:
        ilasm_build.c 
Log Message:


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


Index: ilasm_build.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ilasm/ilasm_build.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -r1.18 -r1.19
*** ilasm_build.c       3 Jan 2003 12:34:15 -0000       1.18
--- ilasm_build.c       15 Feb 2003 01:57:52 -0000      1.19
***************
*** 765,776 ****
  
        /* Look for a name and signature match on a member */
!       member = 0;
!       while((member = ILClassNextMemberByKind(classInfo, member, kind)) != 0)
        {
!               if(!strcmp(ILMember_Name(member), name) &&
!                  ILTypeIdentical(ILMember_Signature(member), sig))
!               {
!                       return ILMember_Token(member);
!               }
        }
  
--- 765,771 ----
  
        /* Look for a name and signature match on a member */
!       if((member = ILClassNextMemberMatch(classInfo, 0, kind, name, sig)) != 
0)
        {
!               return ILMember_Token(member);
        }
  
***************
*** 818,852 ****
  
        /* See if there is already a method with a matching signature */
!       method = 0;
!       while((method = (ILMethod *)ILClassNextMemberByKind
!                       (classInfo, (ILMember *)method, 
IL_META_MEMBERKIND_METHOD)) != 0)
!       {
!               if(!strcmp(ILMethod_Name(method), name) &&
!                  ILTypeIdentical(ILMethod_Signature(method), sig))
                {
!                       /* We already have a definition */
                        if((ILMethod_Token(method) & IL_META_TOKEN_MASK)
!                                       == IL_META_TOKEN_METHOD_DEF &&
!                          ILMethod_RVA(method) != 0)
!                       {
!                               /* This is a duplicate */
!                               ILAsmPrintMessage(ILAsmFilename, ILAsmLineNum,
!                                                                 "duplicate 
definition for `%s'", name);
!                               ILAsmErrors = 1;
!                       }
!                       else
                        {
!                               /* Convert the MemberRef into a MethodDef */
!                               ILMethodSetCallConv(method, 
ILType_CallConv(sig));
!                               ILMemberSetAttrs((ILMember *)method,
!                                                                
~((ILUInt32)0), attributes);
!                               if((ILMethod_Token(method) & IL_META_TOKEN_MASK)
!                                               == IL_META_TOKEN_MEMBER_REF)
!                               {
!                                       ILMethodNewToken(method);
!                               }
                        }
-                       return method;
                }
        }
  
--- 813,843 ----
  
        /* See if there is already a method with a matching signature */
!       if((method = (ILMethod *)ILClassNextMemberMatch
!                       (classInfo, (ILMember *)0,
!                        IL_META_MEMBERKIND_METHOD, name, sig)) != 0)
!       {
!               /* We already have a definition */
!               if((ILMethod_Token(method) & IL_META_TOKEN_MASK)
!                               == IL_META_TOKEN_METHOD_DEF &&
!                  ILMethod_RVA(method) != 0)
                {
!                       /* This is a duplicate */
!                       ILAsmPrintMessage(ILAsmFilename, ILAsmLineNum,
!                                                         "duplicate definition 
for `%s'", name);
!                       ILAsmErrors = 1;
!               }
!               else
!               {
!                       /* Convert the MemberRef into a MethodDef */
!                       ILMethodSetCallConv(method, ILType_CallConv(sig));
!                       ILMemberSetAttrs((ILMember *)method,
!                                                        ~((ILUInt32)0), 
attributes);
                        if((ILMethod_Token(method) & IL_META_TOKEN_MASK)
!                                       == IL_META_TOKEN_MEMBER_REF)
                        {
!                               ILMethodNewToken(method);
                        }
                }
+               return method;
        }
  
***************
*** 868,901 ****
  
        /* See if there is already a field with a matching signature */
!       field = 0;
!       while((field = (ILField *)ILClassNextMemberByKind
!                       (classInfo, (ILMember *)field, 
IL_META_MEMBERKIND_FIELD)) != 0)
!       {
!               if(!strcmp(ILField_Name(field), name) &&
!                  ILTypeIdentical(ILField_Type(field), sig))
                {
!                       /* We already have a definition */
                        if((ILField_Token(field) & IL_META_TOKEN_MASK)
!                                       == IL_META_TOKEN_FIELD_DEF)
!                       {
!                               /* This is a duplicate */
!                               ILAsmPrintMessage(ILAsmFilename, ILAsmLineNum,
!                                                                 "duplicate 
definition for `%s'", name);
!                               ILAsmErrors = 1;
!                       }
!                       else
                        {
!                               /* Convert the MemberRef into a FieldDef */
!                               ILMemberSetSignature((ILMember *)field, sig);
!                               ILMemberSetAttrs((ILMember *)field,
!                                                                
~((ILUInt32)0), attributes);
!                               if((ILField_Token(field) & IL_META_TOKEN_MASK)
!                                               == IL_META_TOKEN_MEMBER_REF)
!                               {
!                                       ILFieldNewToken(field);
!                               }
                        }
-                       return field;
                }
        }
  
--- 859,888 ----
  
        /* See if there is already a field with a matching signature */
!       if((field = (ILField *)ILClassNextMemberMatch
!                       (classInfo, (ILMember *)0,
!                        IL_META_MEMBERKIND_FIELD, name, sig)) != 0)
!       {
!               /* We already have a definition */
!               if((ILField_Token(field) & IL_META_TOKEN_MASK)
!                               == IL_META_TOKEN_FIELD_DEF)
!               {
!                       /* This is a duplicate */
!                       ILAsmPrintMessage(ILAsmFilename, ILAsmLineNum,
!                                                         "duplicate definition 
for `%s'", name);
!                       ILAsmErrors = 1;
!               }
!               else
                {
!                       /* Convert the MemberRef into a FieldDef */
!                       ILMemberSetSignature((ILMember *)field, sig);
!                       ILMemberSetAttrs((ILMember *)field,
!                                                        ~((ILUInt32)0), 
attributes);
                        if((ILField_Token(field) & IL_META_TOKEN_MASK)
!                                       == IL_META_TOKEN_MEMBER_REF)
                        {
!                               ILFieldNewToken(field);
                        }
                }
+               return field;
        }
  





reply via email to

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