[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. |