[Top][All Lists]
[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;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnet/ilalink link_field.c,1.8,1.9 link_method.c,1.22,1.23,
Rhys Weatherley <address@hidden> <=