def _resolve_by_type( self, some_type ): temp_type = declarations.remove_alias( some_type ) temp_type = declarations.remove_cv( temp_type ) if isinstance( temp_type, declarations.fundamental_t ) \ or isinstance( temp_type, declarations.declarated_t ): return decl_wrappers.default_call_policies() if declarations.is_same( some_type, self.__const_char_pointer ): return decl_wrappers.default_call_policies() return None
def __call__(self, calldef, hint=None): if not isinstance( calldef, declarations.calldef_t ): return None if not isinstance( calldef, declarations.constructor_t ): return self._resolve_by_type( calldef.return_type ) else: for arg in calldef.arguments: if not self._resolve_by_type( arg.type ): return None return decl_wrappers.default_call_policies()
def __call__( self, variable, hint=None ): if not isinstance( variable, declarations.variable_t ): return None assert hint in ( 'get', 'set' ) if not declarations.is_reference( variable.type ): return None no_ref = declarations.remove_reference( variable.type ) base_type = declarations.remove_const( no_ref ) if python_traits.is_immutable( base_type ): #the relevant code creator will generate code, that will return this member variable #by value return decl_wrappers.default_call_policies() if not isinstance( base_type, declarations.declarated_t ): return None base_type = declarations.remove_alias( base_type ) decl = base_type.declaration if declarations.is_class_declaration( decl ): return None if decl.is_abstract: return None if declarations.has_destructor( decl ) and not declarations.has_public_destructor( decl ): return None if not declarations.has_copy_constructor(decl): return None if hint == 'get': #if we rich this line, it means that we are able to create an obect using #copy constructor. if declarations.is_const( no_ref ): return decl_wrappers.return_value_policy( decl_wrappers.copy_const_reference ) else: return decl_wrappers.return_value_policy( decl_wrappers.copy_non_const_reference ) else: return decl_wrappers.default_call_policies()