def __add_class_introductions( self, cc, class_ ): if not self.__should_generate_code( class_ ): return ci_creator = code_creators.class_introduction_t( class_ ) self.__class2introduction[ class_ ] = ci_creator cc.adopt_creator( ci_creator ) classes = class_.classes( recursive=False, allow_empty=True) classes = sort_algorithms.sort_classes( classes, include_vars=True ) for internal_class in classes: self.__add_class_introductions( ci_creator, internal_class ) if not class_.opaque: self.__class_defs_ccs.adopt_creator( code_creators.fields_definition_t( class_ ) )
def __add_class_introductions(self, cc, class_): if not self.__should_generate_code(class_): return ci_creator = code_creators.class_introduction_t(class_) self.__class2introduction[class_] = ci_creator cc.adopt_creator(ci_creator) classes = class_.classes(recursive=False, allow_empty=True) classes = sort_algorithms.sort_classes(classes, include_vars=True) for internal_class in classes: self.__add_class_introductions(ci_creator, internal_class) if not class_.opaque: self.__class_defs_ccs.adopt_creator( code_creators.fields_definition_t(class_))
def create(self): """ create and return the module for the extension - code creators tree root :rtype: :class:`code_creators.module_t` """ # Invoke the appropriate visit_*() method on all decls ccc = self.curr_code_creator ccc.adopt_creator(code_creators.import_t('ctypes')) ccc.adopt_creator( code_creators.import_t(code_repository.ctypes_utils.file_name)) ccc.adopt_creator(code_creators.separator_t()) ccc.adopt_creator( code_creators.library_reference_t(self.__library_path)) ccc.adopt_creator( code_creators.name_mappings_t(self.__exported_symbols)) ccc.adopt_creator(code_creators.separator_t()) #adding namespaces global_ns_cc = code_creators.bookmark_t() ccc.adopt_creator(global_ns_cc) ccc.adopt_creator(self.__class_ccs) self.__namespace2pyclass[self.global_ns] = global_ns_cc #adding class introductions - special case because of hierarchy f = lambda cls: self.__should_generate_code( cls ) \ and isinstance( cls.parent, declarations.namespace_t ) ns_classes = self.global_ns.classes(f, recursive=True, allow_empty=True) ns_classes = sort_algorithms.sort_classes(ns_classes, include_vars=True) for class_ in ns_classes: self.__add_class_introductions(self.__class_ccs, class_) ccc.adopt_creator(self.__class_defs_ccs) ccc.adopt_creator(code_creators.separator_t()) ccc.adopt_creator(self.__typedefs_ccs) declarations.apply_visitor(self, self.curr_decl) self.__dependencies_manager.inform_user() return self.module
def create(self ): """ create and return the module for the extension - code creators tree root :rtype: :class:`code_creators.module_t` """ # Invoke the appropriate visit_*() method on all decls ccc = self.curr_code_creator ccc.adopt_creator( code_creators.import_t( 'ctypes' ) ) ccc.adopt_creator( code_creators.import_t( code_repository.ctypes_utils.file_name ) ) ccc.adopt_creator( code_creators.separator_t() ) ccc.adopt_creator( code_creators.library_reference_t( self.__library_path ) ) ccc.adopt_creator( code_creators.name_mappings_t( self.__exported_symbols ) ) ccc.adopt_creator( code_creators.separator_t() ) #adding namespaces global_ns_cc = code_creators.bookmark_t() ccc.adopt_creator( global_ns_cc ) ccc.adopt_creator( self.__class_ccs ) self.__namespace2pyclass[ self.global_ns ] = global_ns_cc #adding class introductions - special case because of hierarchy f = lambda cls: self.__should_generate_code( cls ) \ and isinstance( cls.parent, declarations.namespace_t ) ns_classes = self.global_ns.classes( f, recursive=True, allow_empty=True) ns_classes = sort_algorithms.sort_classes( ns_classes, include_vars=True ) for class_ in ns_classes: self.__add_class_introductions( self.__class_ccs, class_ ) ccc.adopt_creator( self.__class_defs_ccs ) ccc.adopt_creator( code_creators.separator_t() ) ccc.adopt_creator( self.__typedefs_ccs ) declarations.apply_visitor( self, self.curr_decl ) self.__dependencies_manager.inform_user() return self.module