Revision: 156
Author: roman_yakovenko
Date: 2006-05-23 12:48:13 -0700 (Tue, 23 May 2006)
ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=156&view=rev
Log Message:
-----------
fixing bug with hierarchy level 3
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/module_creator/creator.py
Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py
===================================================================
--- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-05-23 19:46:59 UTC (rev 155)
+++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-05-23 19:48:13 UTC (rev 156)
@@ -193,17 +193,23 @@
all_included = declarations.custom_matcher_t( lambda decl: decl.ignore == False )
all_protected = declarations.access_type_matcher_t( 'protected' ) & all_included
all_pure_virtual = declarations.virtuality_type_matcher_t( VIRTUALITY_TYPES.PURE_VIRTUAL )
+ all_not_pure_virtual = ~all_pure_virtual
query = all_protected | all_pure_virtual
funcs = set()
+ defined_funcs = set()
+
for base in cls.recursive_bases:
if base.access == ACCESS_TYPES.PRIVATE:
continue
base_cls = base.related_class
funcs.update( base_cls.member_functions( query, allow_empty=True ) )
funcs.update( base_cls.member_operators( query, allow_empty=True ) )
-
+
+ defined_funcs.update( base_cls.member_functions( all_not_pure_virtual, allow_empty=True ) )
+ defined_funcs.update( base_cls.member_operators( all_not_pure_virtual, allow_empty=True ) )
+
not_reimplemented_funcs = set()
for f in funcs:
cls_fs = cls.calldefs( name=f.name, recursive=False, allow_empty=True )
@@ -216,7 +222,15 @@
if self.__is_same_func( f, f_impl ):
break
else:
- not_reimplemented_funcs.add( f )
+ #should test whether this function is implemented in base class
+ if f.virtuality != VIRTUALITY_TYPES.PURE_VIRTUAL:
+ not_reimplemented_funcs.add( f )
+ else:
+ for f_defined in defined_funcs:
+ if self.__is_same_func( f, f_defined ):
+ break
+ else:
+ not_reimplemented_funcs.add( f )
return not_reimplemented_funcs
def _is_wrapper_needed(self, class_inst, exportable_members):
@@ -647,6 +661,9 @@
elif declarations.is_pointer( self.curr_decl.type ):
wrapper = code_creators.member_variable_wrapper_t( variable=self.curr_decl )
maker = code_creators.member_variable_t( variable=self.curr_decl, wrapper=wrapper )
+ #elif declarations.is_reference( self.curr_decl.type ):
+ #wrapper = code_creators.mem_var_ref_wrapper_t( variable=self.curr_decl )
+ #maker = code_creators.mem_var_ref_t( variable=self.curr_decl, wrapper=wrapper )
else:
maker = code_creators.member_variable_t( variable=self.curr_decl )
if wrapper:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|