[pygccxml-commit] SF.net SVN: pygccxml:[1591] pyplusplus_dev/pyplusplus
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2009-01-19 19:09:38
|
Revision: 1591 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1591&view=rev Author: roman_yakovenko Date: 2009-01-19 19:09:33 +0000 (Mon, 19 Jan 2009) Log Message: ----------- adding code generator type Modified Paths: -------------- pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py Modified: pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2009-01-19 12:39:54 UTC (rev 1590) +++ pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2009-01-19 19:09:33 UTC (rev 1591) @@ -12,6 +12,7 @@ import algorithm +from decl_wrapper import CODE_GENERATOR_TYPES from decl_wrapper import decl_wrapper_t from calldef_wrapper import calldef_t Modified: pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2009-01-19 12:39:54 UTC (rev 1590) +++ pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2009-01-19 19:09:33 UTC (rev 1591) @@ -10,12 +10,17 @@ from pygccxml import declarations from pyplusplus import messages +class CODE_GENERATOR_TYPES: + BOOST_PYTHON = 'Boost.Python' + CTYPES = 'ctypes' + all = [ BOOST_PYTHON, CTYPES ] + class decl_wrapper_t(object): """code generator declaration configuration base class This class contains configuration that could be applied to all declarations. """ - + SPECIAL_TYPEDEF_PICK_ANY = True def __init__(self): @@ -28,8 +33,14 @@ self._documentation = None self.__msgs_to_ignore = set() self._include_files = [] + self._code_generator = None @property + def code_generator( self ): + """code generator type, could be Boost.Python or ctypes""" + return self._code_generator + + @property def logger( self ): """reference to L{_logging_.loggers.declarations}""" return _logging_.loggers.declarations @@ -46,7 +57,7 @@ name = self.name return algorithm.create_valid_name( name ) - def __select_alias_directives( self, be_smart ): + def __select_alias_directives( self, be_smart ): if not isinstance( self, declarations.class_types ): return [] typedefs = list( set( filter( lambda typedef: typedef.is_directive, self.aliases ) ) ) @@ -92,7 +103,7 @@ def rename( self, new_name ): """give new name to the declaration, under which Python will know the declaration - + Code generators: ctypes, Boost.Python """ self.alias = new_name @@ -113,25 +124,25 @@ def exclude( self, compilation_errors=False ): """exclude "self" and child declarations from being exposed. - + If compile_time_errors is True, than only declarations, which will cause compilation error will be excluded - + Code generators: ctypes, Boost.Python """ self.ignore = True def include( self, already_exposed=False ): """include "self" and child declarations to be exposed. - + Code generators: ctypes, Boost.Python. """ self.ignore = False self.already_exposed = already_exposed - + def why_not_exportable( self ): """return the reason( string ) that explains why this declaration could not be exported - + If declaration could be exported, than method will return None """ if None is self._exportable_reason: @@ -157,8 +168,8 @@ return self._exportable def set_exportable( self, exportable ): """change "exportable" status - - This function should be use in case Py++ made a mistake and signed the + + This function should be use in case Py++ made a mistake and signed the declaration as unexportable.""" self._exportable = exportable @@ -178,18 +189,18 @@ msgs = [] if not self.exportable: msgs.append( self.why_not_exportable() ) - + if declarations.templates.is_instantiation( self.name ) \ and self.alias == self._generate_valid_name(): msgs.append( messages.W1043 % self.alias ) - + directives = self.__select_alias_directives(be_smart=False) - if 1 < len( directives ): - msgs.append( messages.W1048 + if 1 < len( directives ): + msgs.append( messages.W1048 % ( self.alias, ', '.join( map( lambda typedef: typedef.name, directives ) ) ) ) - msgs.extend( self._readme_impl() ) - + msgs.extend( self._readme_impl() ) + return messages.filter_disabled_msgs( msgs, self.__msgs_to_ignore ) @property @@ -197,10 +208,10 @@ """list of messages to ignore""" return self.__msgs_to_ignore disabled_messaged = disabled_messages - + def disable_messages( self, *args ): """set messages, which should not be reported to you - + Usage example: decl.disable_messages( messages.W1001, messages.W1040 ) """ for msg in args: Modified: pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py =================================================================== --- pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-19 12:39:54 UTC (rev 1590) +++ pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-19 19:09:33 UTC (rev 1591) @@ -57,6 +57,7 @@ module_builder.module_builder_t.__init__( self, global_ns=None, encoding=encoding ) self.global_ns = self.__parse_declarations( files, gccxml_config ) + self.global_ns.decls(recursive=True, allow_empty=True)._code_generator = decl_wrappers.CODE_GENERATOR_TYPES.CTYPES self.__blob2decl = binary_parsers.merge_information( self.global_ns, exported_symbols_file ) self.__apply_defaults() @@ -79,7 +80,7 @@ return decls_package.matcher.get_single( decls_package.namespace_matcher_t( name='::' ) , decls ) - + def __include_declarations( self ): self.global_ns.exclude() #include exported declarations @@ -87,13 +88,13 @@ to_be_included = ctypes_decls_dependencies.find_out_dependencies( included_decls ) to_be_included.update( included_decls ) map( lambda d: d.include(), to_be_included ) - + def __apply_defaults( self ): - self.__include_declarations() + self.__include_declarations() anonymous_classes = self.global_ns.classes( '', recursive=True, allow_empty=True ) anonymous_classes.alias = '_' #TODO: check whether the anonymous class unique or not - #if 1 == len( anonymous.parent.classes( '', recursive=False ) ): + #if 1 == len( anonymous.parent.classes( '', recursive=False ) ): anonymous_vars = self.global_ns.vars( '', recursive=True, allow_empty=True ) anonymous_vars.alias = '_' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |