From: William F. <wsf...@us...> - 2006-06-02 22:08:15
|
Update of /cvsroot/swig/SWIG/Source/Modules In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv13965/Source/Modules Modified Files: allocate.cxx Log Message: Fixes for override / hidden methods detection when using directors (for C#) Index: allocate.cxx =================================================================== RCS file: /cvsroot/swig/SWIG/Source/Modules/allocate.cxx,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -d -r1.64 -r1.65 *** allocate.cxx 6 Mar 2006 22:50:56 -0000 1.64 --- allocate.cxx 2 Jun 2006 22:08:09 -0000 1.65 *************** *** 187,191 **** --- 187,195 ---- if (decl_match && returntype_match) { // Found an identical method in the base class + bool this_wrapping_protected_members = is_member_director(n); // This should really check for dirprot rather than just being a director method + bool base_wrapping_protected_members = is_member_director(base); // This should really check for dirprot rather than just being a director method bool both_have_public_access = is_public(n) && is_public(base); + bool both_have_protected_access = (is_protected(n) && this_wrapping_protected_members) && (is_protected(base) && base_wrapping_protected_members); + bool both_have_private_access = is_private(n) && is_private(base); if (checkAttribute(base, "storage", "virtual")) { // Found a polymorphic method. *************** *** 193,199 **** Setattr(n, "storage", "virtual"); ! if (both_have_public_access) if (!is_non_public_base(inclass, b)) ! Setattr(n, "override", base); // Try and find the most base's covariant return type --- 197,209 ---- Setattr(n, "storage", "virtual"); ! if (both_have_public_access || both_have_protected_access) { if (!is_non_public_base(inclass, b)) ! Setattr(n, "override", base); // Note C# definition of override, ie access must be the same ! } else if (!both_have_private_access) { ! // Different access ! if (this_wrapping_protected_members || base_wrapping_protected_members) ! if (!is_non_public_base(inclass, b)) ! Setattr(n, "hides", base); // Note C# definition of hiding, ie hidden if access is different ! } // Try and find the most base's covariant return type *************** *** 215,223 **** } else { // Found an identical method in the base class, but it is not polymorphic. ! if (both_have_public_access) if (!is_non_public_base(inclass, b)) Setattr(n, "hides", base); } ! if (both_have_public_access) return 1; } --- 225,233 ---- } else { // Found an identical method in the base class, but it is not polymorphic. ! if (both_have_public_access || both_have_protected_access) if (!is_non_public_base(inclass, b)) Setattr(n, "hides", base); } ! if (both_have_public_access || both_have_protected_access) return 1; } |