[pygccxml-commit] SF.net SVN: pygccxml: [1239] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2008-02-17 06:02:22
|
Revision: 1239
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1239&view=rev
Author: roman_yakovenko
Date: 2008-02-16 22:02:25 -0800 (Sat, 16 Feb 2008)
Log Message:
-----------
bug fix - improving algorithm, which selects what functions should\could be overriden
Thanks to Julian Scheid for bug reporting
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py
pyplusplus_dev/unittests/data/override_bug_to_be_exported.hpp
pyplusplus_dev/unittests/override_bug_tester.py
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2008-02-15 20:50:07 UTC (rev 1238)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2008-02-17 06:02:25 UTC (rev 1239)
@@ -428,26 +428,31 @@
all_included = declarations.custom_matcher_t( lambda decl: decl.ignore == False and decl.exportable )
all_protected = declarations.access_type_matcher_t( 'protected' ) & all_included
- all_pure_virtual = declarations.virtuality_type_matcher_t( VIRTUALITY_TYPES.PURE_VIRTUAL )
- all_public_virtual = declarations.virtuality_type_matcher_t( VIRTUALITY_TYPES.VIRTUAL ) \
- & declarations.access_type_matcher_t( 'public' )
+ all_pure_virtual = declarations.virtuality_type_matcher_t( VIRTUALITY_TYPES.PURE_VIRTUAL )
+ all_virtual = declarations.virtuality_type_matcher_t( VIRTUALITY_TYPES.VIRTUAL ) \
+ & (declarations.access_type_matcher_t( 'public' ) \
+ | declarations.access_type_matcher_t( 'protected' ))
all_not_pure_virtual = ~all_pure_virtual
- query = all_protected | all_pure_virtual | all_public_virtual
+ query = all_protected | all_pure_virtual
+ mf_query = query | all_virtual
relevant_opers = declarations.custom_matcher_t( lambda decl: decl.symbol in ('()', '[]') )
- funcs = set()
- defined_funcs = set()
+ funcs = []
+ defined_funcs = []
for base in self.recursive_bases:
if base.access == ACCESS_TYPES.PRIVATE:
continue
base_cls = base.related_class
- funcs.update( base_cls.member_functions( query, recursive=False, allow_empty=True ) )
- funcs.update( base_cls.member_operators( relevant_opers & query, recursive=False, allow_empty=True ) )
+ #funcs.extend( base_cls.member_functions( query, recursive=False, allow_empty=True ) )
+ #funcs.extend( base_cls.member_operators( relevant_opers & query, recursive=False, allow_empty=True ) )
- defined_funcs.update( base_cls.member_functions( all_not_pure_virtual, recursive=False, allow_empty=True ) )
- defined_funcs.update( base_cls.member_operators( all_not_pure_virtual & relevant_opers, recursive=False, allow_empty=True ) )
+ funcs.extend( base_cls.member_functions( mf_query, recursive=False, allow_empty=True ) )
+ funcs.extend( base_cls.member_operators( relevant_opers & query, recursive=False, allow_empty=True ) )
+ defined_funcs.extend( base_cls.member_functions( all_not_pure_virtual, recursive=False, allow_empty=True ) )
+ defined_funcs.extend( base_cls.member_operators( all_not_pure_virtual & relevant_opers, recursive=False, allow_empty=True ) )
+
not_reimplemented_funcs = set()
is_same_function = declarations.is_same_function
for f in funcs:
@@ -473,8 +478,10 @@
if is_same_function( f, f_defined ):
break
else:
- not_reimplemented_funcs.add( f )
- functions = list( not_reimplemented_funcs )
+ not_reimplemented_funcs.add( f )
+ functions = filter( lambda f: not f.ignore and f.exportable
+ , list( not_reimplemented_funcs ) )
+
functions.sort( cmp=lambda f1, f2: cmp( ( f1.name, f1.location.as_tuple() )
, ( f2.name, f2.location.as_tuple() ) ) )
self._redefined_funcs = functions
Modified: pyplusplus_dev/unittests/data/override_bug_to_be_exported.hpp
===================================================================
--- pyplusplus_dev/unittests/data/override_bug_to_be_exported.hpp 2008-02-15 20:50:07 UTC (rev 1238)
+++ pyplusplus_dev/unittests/data/override_bug_to_be_exported.hpp 2008-02-17 06:02:25 UTC (rev 1239)
@@ -13,7 +13,7 @@
class A
{
public:
- virtual void foo() const {}
+ virtual int foo() const {return int('a');}
virtual ~A(){}
};
@@ -21,8 +21,8 @@
{
};
-inline void invoke_foo( const A& a ){
- a.foo();
+inline int invoke_foo( const A& a ){
+ return a.foo();
};
}
Modified: pyplusplus_dev/unittests/override_bug_tester.py
===================================================================
--- pyplusplus_dev/unittests/override_bug_tester.py 2008-02-15 20:50:07 UTC (rev 1238)
+++ pyplusplus_dev/unittests/override_bug_tester.py 2008-02-17 06:02:25 UTC (rev 1239)
@@ -22,8 +22,8 @@
def __init__( self ):
module.B.__init__( self )
def foo( self ):
- print "C.foo"
- module.invoke_foo( C() )
+ return ord( 'c' )
+ self.failUnless( ord('c') == module.invoke_foo( C() ) )
def create_suite():
suite = unittest.TestSuite()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|