[pygccxml-commit] SF.net SVN: pygccxml: [724] pyplusplus_dev/pyplusplus
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-11-13 19:03:40
|
Revision: 724 http://svn.sourceforge.net/pygccxml/?rev=724&view=rev Author: roman_yakovenko Date: 2006-11-13 11:00:19 -0800 (Mon, 13 Nov 2006) Log Message: ----------- integrating return_pointee_value call policies Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_repository/__init__.py pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py pyplusplus_dev/pyplusplus/decl_wrappers/call_policies.py pyplusplus_dev/pyplusplus/module_builder/call_policies.py pyplusplus_dev/pyplusplus/module_creator/creator.py Modified: pyplusplus_dev/pyplusplus/code_repository/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/code_repository/__init__.py 2006-11-13 15:43:25 UTC (rev 723) +++ pyplusplus_dev/pyplusplus/code_repository/__init__.py 2006-11-13 19:00:19 UTC (rev 724) @@ -16,8 +16,9 @@ import array_1 import gil_guard import convenience +import call_policies -all = [ array_1, gil_guard, convenience ] +all = [ array_1, gil_guard, convenience, call_policies ] headers = map( lambda f: f.file_name, all ) Modified: pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-11-13 15:43:25 UTC (rev 723) +++ pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-11-13 19:00:19 UTC (rev 724) @@ -80,7 +80,9 @@ from call_policies import return_by_value from call_policies import return_opaque_pointer from call_policies import return_value_policy +from call_policies import return_pointee_value from call_policies import is_return_opaque_pointer_policy +from call_policies import is_return_pointee_value_policy from decl_wrapper_printer import decl_wrapper_printer_t from decl_wrapper_printer import print_declarations Modified: pyplusplus_dev/pyplusplus/decl_wrappers/call_policies.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/call_policies.py 2006-11-13 15:43:25 UTC (rev 723) +++ pyplusplus_dev/pyplusplus/decl_wrappers/call_policies.py 2006-11-13 19:00:19 UTC (rev 724) @@ -213,12 +213,18 @@ reference_existing_object = '::boost::python::reference_existing_object' return_by_value = '::boost::python::return_by_value' return_opaque_pointer = '::boost::python::return_opaque_pointer' +return_pointee_value = '::pyplusplus::call_policies::return_pointee_value' def return_value_policy( result_converter_generator, base=None): return return_value_policy_t( result_converter_generator, base ) - def is_return_opaque_pointer_policy( policy ): """returns True is policy represents return_value_policy<return_opaque_pointer>, False otherwise""" return isinstance( policy, return_value_policy_t ) \ and policy.result_converter_generator == return_opaque_pointer + +def is_return_pointee_value_policy( policy ): + """returns True is policy represents return_value_policy<return_pointee_value>, False otherwise""" + return isinstance( policy, return_value_policy_t ) \ + and policy.result_converter_generator == return_pointee_value + \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/module_builder/call_policies.py =================================================================== --- pyplusplus_dev/pyplusplus/module_builder/call_policies.py 2006-11-13 15:43:25 UTC (rev 723) +++ pyplusplus_dev/pyplusplus/module_builder/call_policies.py 2006-11-13 19:00:19 UTC (rev 724) @@ -17,3 +17,4 @@ from pyplusplus.decl_wrappers import return_by_value from pyplusplus.decl_wrappers import return_opaque_pointer from pyplusplus.decl_wrappers import return_value_policy +from pyplusplus.decl_wrappers import return_pointee_value \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-11-13 15:43:25 UTC (rev 723) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-11-13 19:00:19 UTC (rev 724) @@ -139,6 +139,7 @@ self.__free_operators = [] self.__exposed_free_fun_overloads = set() self.__opaque_types_manager = opaque_types_manager.manager_t( self.__extmodule ) + self.__return_pointee_value_exists = False def _prepare_decls( self, decls, doc_extractor ): global DO_NOT_REPORT_MSGS @@ -350,6 +351,14 @@ creators.reverse() self.__module_body.adopt_creators( creators, 0 ) + def __on_demand_include_call_policies( self, call_policy ): + if not self.__return_pointee_value_exists \ + and decl_wrappers.is_return_pointee_value_policy( call_policy ): + self.__return_pointee_value_exists = True + self.__extmodule.add_include( code_repository.call_policies.file_name ) + self.__extmodule.add_system_header( code_repository.call_policies.file_name ) + + def create(self, decl_headers=None): """Create and return the module for the extension. @@ -388,7 +397,8 @@ self.__types_db.update( self.curr_decl ) if None is self.curr_decl.call_policies: self.curr_decl.call_policies = self.__call_policies_resolver( self.curr_decl ) - + self.__on_demand_include_call_policies( self.curr_decl.call_policies ) + maker_cls, fwrapper_cls = creators_wizard.find_out_mem_fun_creator_classes( self.curr_decl ) maker = None @@ -453,6 +463,7 @@ maker = code_creators.constructor_t( constructor=self.curr_decl, wrapper=cwrapper ) if None is self.curr_decl.call_policies: self.curr_decl.call_policies = self.__call_policies_resolver( self.curr_decl ) + self.__on_demand_include_call_policies( self.curr_decl.call_policies ) self.curr_code_creator.adopt_creator( maker ) def visit_destructor( self ): @@ -469,7 +480,8 @@ def visit_casting_operator( self ): if None is self.curr_decl.call_policies: self.curr_decl.call_policies = self.__call_policies_resolver( self.curr_decl ) - + self.__on_demand_include_call_policies( self.curr_decl.call_policies ) + self.__types_db.update( self.curr_decl ) if not self.curr_decl.parent.is_abstract and not declarations.is_reference( self.curr_decl.return_type ): maker = code_creators.casting_operator_t( operator=self.curr_decl ) @@ -499,6 +511,7 @@ self.__types_db.update( f ) if None is f.call_policies: f.call_policies = self.__call_policies_resolver( f ) + self.__on_demand_include_call_policies( f.call_policies ) overloads_cls_creator = code_creators.free_fun_overloads_class_t( overloads ) self.__extmodule.adopt_declaration_creator( overloads_cls_creator ) @@ -518,6 +531,8 @@ self.__types_db.update( self.curr_decl ) if None is self.curr_decl.call_policies: self.curr_decl.call_policies = self.__call_policies_resolver( self.curr_decl ) + self.__on_demand_include_call_policies( self.curr_decl.call_policies ) + maker = code_creators.free_function_t( function=self.curr_decl ) self.curr_code_creator.adopt_creator( maker ) self.__opaque_types_manager.register_opaque( maker, self.curr_decl ) @@ -552,6 +567,7 @@ self.__types_db.update( f ) if None is f.call_policies: f.call_policies = self.__call_policies_resolver( f ) + self.__on_demand_include_call_policies( f.call_policies ) overloads_cls_creator = code_creators.mem_fun_overloads_class_t( overloads ) self.__extmodule.adopt_declaration_creator( overloads_cls_creator ) @@ -695,8 +711,10 @@ elif declarations.is_reference( self.curr_decl.type ): if None is self.curr_decl.getter_call_policies: self.curr_decl.getter_call_policies = self.__call_policies_resolver( self.curr_decl, 'get' ) + self.__on_demand_include_call_policies( self.curr_decl.getter_call_policies ) if None is self.curr_decl.setter_call_policies: self.curr_decl.setter_call_policies = self.__call_policies_resolver( self.curr_decl, 'set' ) + self.__on_demand_include_call_policies( self.curr_decl.setter_call_policies ) 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 ) self.__opaque_types_manager.register_opaque( maker, self.curr_decl ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |