Package pyplusplus :: Package code_creators :: Module exception_translator

# Source Code for Module pyplusplus.code_creators.exception_translator

     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  import os
     7  import types
     8  import algorithm
     9  import code_creator
    10  import declaration_based
    11  import registration_based
    12  from pygccxml import declarations
    13
    14 -class exception_translator_t( code_creator.code_creator_t
    15                                , declaration_based.declaration_based_t ):
    16 -    def __init__(self, exception_class ):
    17          code_creator.code_creator_t.__init__( self )
    18          declaration_based.declaration_based_t.__init__( self, declaration=exception_class  )
    19
    20      @property
    21 -    def translator_name( self ):
    22          return 'translate_%(alias)s' % { 'alias' : self.declaration.alias }
    23
    24 -    def _create_impl(self):
    25          if self.declaration.already_exposed:
    26              return ''
    27          return os.linesep.join([
    28                "void translate_%(alias)s( const %(cls_name)s& %(arg_name)s ){" \
    29              , self.indent( self.declaration.exception_translation_code )
    30              , "}"]) \
    31              % { 'alias' : self.declaration.alias
    32                   , 'cls_name' : self.decl_identifier
    33                   , 'arg_name' : self.declaration.exception_argument_name }
    34
    35 -    def _get_system_headers_impl( self ):
    36          return []
    37
    38
    39 -class exception_translator_register_t( registration_based.registration_based_t
    40                                         , declaration_based.declaration_based_t ):
    41 -    def __init__(self, exception_class, exception_translator):
    42          registration_based.registration_based_t.__init__( self )
    43          declaration_based.declaration_based_t.__init__( self, declaration=exception_class )
    44          self.works_on_instance = False
    45          self.translator = exception_translator
    46
    47 -    def _create_impl( self ):
    48          if self.declaration.already_exposed:
    49              return ''
    50
    51          return '%(register_exception_translator)s< %(cls)s >( &%(translator)s );' \
    52                 % { 'register_exception_translator' : algorithm.create_identifier( self, 'boost::python::register_exception_translator' )
    53                     , 'cls'  : self.decl_identifier
    54                     , 'translator' : self.translator.translator_name }
    55
    56 -    def _get_system_headers_impl( self ):
    57          return []
    58