Trees | Indices | Help |
|
---|
|
1 # Copyright 2004-2008 Roman Yakovenko. 2 # Distributed under the Boost Software License, Version 1.0. (See 3 # accompanying file LICENSE_1_0.txt or copy at 4 # http://www.boost.org/LICENSE_1_0.txt) 5 6 from pygccxml import declarations 7 from pyplusplus import code_creators 8 from pyplusplus import decl_wrappers 911 naked_type = declarations.remove_cv( type_ ) 12 if not declarations.is_pointer( naked_type ): 13 return None 14 naked_type = declarations.remove_pointer( declarations.remove_cv( type_ ) ) 15 if decl_wrappers.python_traits.is_immutable( naked_type ): 16 return None#immutable types could not be opaque 17 decl = None 18 if declarations.is_class( naked_type ): 19 decl = declarations.class_traits.get_declaration( naked_type ) 20 elif declarations.is_class_declaration( naked_type ):#class declaration: 21 decl = declarations.class_declaration_traits.get_declaration( naked_type ) 22 else: 23 return None 24 if ensure_opaque_decl: 25 if decl.opaque: 26 return decl 27 else: 28 return None 29 else: 30 return decl31 328335 object.__init__( self ) 36 self.__extmodule = extmodule 37 self.__exposed_opaque_decls = {} #decl: creator3840 opaque_types = [] 41 is_opaque_policy = decl_wrappers.is_return_opaque_pointer_policy 42 if isinstance( decl, declarations.variable_t ): 43 opaque_decl = find_out_opaque_decl( decl.type, ensure_opaque_decl=True ) 44 if opaque_decl: 45 opaque_types.append( opaque_decl ) 46 elif is_opaque_policy( decl.getter_call_policies ) or is_opaque_policy( decl.setter_call_policies ): 47 opaque_decl = find_out_opaque_decl( decl.type, ensure_opaque_decl=False ) 48 if opaque_decl: 49 opaque_types.append( opaque_decl ) 50 else: 51 pass 52 elif isinstance( decl, declarations.calldef_t ): 53 if is_opaque_policy( decl.call_policies ): 54 opaque_decl = find_out_opaque_decl( decl.return_type, ensure_opaque_decl=False ) 55 if opaque_decl: 56 opaque_types.append( opaque_decl ) 57 all_types = decl.argument_types[:] 58 if decl.return_type: 59 all_types.append( decl.return_type ) 60 for type_ in all_types: 61 opaque_decl = find_out_opaque_decl( type_, ensure_opaque_decl=True ) 62 if opaque_decl: 63 opaque_types.append( opaque_decl ) 64 else: 65 pass 66 return opaque_types67 6870 opaque_decls = [] 71 for decl in declarations.make_flatten( decl_or_decls ): 72 opaque_decls.extend( self.__find_out_opaque_decls( decl ) ) 73 74 for decl in opaque_decls: 75 opaque_type_registrator = None 76 if id(decl) not in self.__exposed_opaque_decls.keys(): 77 opaque_type_registrator = code_creators.opaque_type_registrator_t( decl ) 78 self.__exposed_opaque_decls[ id(decl) ] = opaque_type_registrator 79 self.__extmodule.adopt_declaration_creator( opaque_type_registrator ) 80 else: 81 opaque_type_registrator = self.__exposed_opaque_decls[ id(decl) ] 82 creator.associated_decl_creators.append(opaque_type_registrator)
Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Mon Oct 20 08:51:31 2008 | http://epydoc.sourceforge.net |