[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnet/image member.c,1.25,1.26
From: |
Rhys Weatherley <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnet/image member.c,1.25,1.26 |
Date: |
Sat, 05 Jul 2003 00:06:12 -0400 |
Update of /cvsroot/dotgnu-pnet/pnet/image
In directory subversions:/tmp/cvs-serv29426/image
Modified Files:
member.c
Log Message:
Search for the "virtual" method corresponding to an "override"
and report a bug if one isn't present (Bug #4196); property
signatures should never use the "hasthis" flag, as it is stored
on the underlying accessor methods instead.
Index: member.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/image/member.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -r1.25 -r1.26
*** member.c 9 May 2003 09:34:33 -0000 1.25
--- member.c 5 Jul 2003 04:06:10 -0000 1.26
***************
*** 352,355 ****
--- 352,427 ----
}
+ static ILMethod *MemberToMethod(ILMember *member)
+ {
+ ILMethod *accessor;
+ member = ILMemberResolve(member);
+ if(ILMember_IsMethod(member))
+ {
+ return (ILMethod *)member;
+ }
+ else if(ILMember_IsProperty(member))
+ {
+ accessor = ILProperty_Getter((ILProperty *)member);
+ if(!accessor)
+ {
+ accessor = ILProperty_Setter((ILProperty *)member);
+ }
+ return accessor;
+ }
+ else if(ILMember_IsEvent(member))
+ {
+ accessor = ILEvent_AddOn((ILEvent *)member);
+ if(!accessor)
+ {
+ accessor = ILEvent_RemoveOn((ILEvent *)member);
+ }
+ return accessor;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+ ILMember *ILMemberGetBase(ILMember *member)
+ {
+ ILClass *classInfo = ILClassResolve(ILMember_Owner(member));
+ ILClass *origClass = classInfo;
+ ILMember *testMember;
+ ILMethod *underlying;
+ if(classInfo)
+ {
+ classInfo = ILClass_Parent(classInfo);
+ }
+ while(classInfo != 0)
+ {
+ testMember = 0;
+ while((testMember = ILClassNextMemberByKind
+ (classInfo, testMember,
ILMemberGetKind(member))) != 0)
+ {
+ if(!strcmp(ILMember_Name(testMember),
ILMember_Name(member)) &&
+ ILTypeIdentical(ILMember_Signature(testMember),
+
ILMember_Signature(member)))
+ {
+ /* The member must be accessible from the
original
+ class to be considered a candidate. This
allows
+ us to skip "private" members in parent
classes
+ that might otherwise indicate a match */
+ if(ILMemberAccessible(testMember, origClass))
+ {
+ underlying = MemberToMethod(testMember);
+ if(underlying &&
ILMethod_IsVirtual(underlying) &&
+ ILMethod_IsNewSlot(underlying))
+ {
+ return testMember;
+ }
+ }
+ }
+ }
+ classInfo = ILClass_Parent(classInfo);
+ }
+ return 0;
+ }
+
ILMethod *ILMethodCreate(ILClass *info, ILToken token,
const char *name, ILUInt32
attributes)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnet/image member.c,1.25,1.26,
Rhys Weatherley <address@hidden> <=