Esempio n. 1
0
    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_ ) )
Esempio n. 2
0
    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_))
Esempio n. 3
0
    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
Esempio n. 4
0
    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