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