mirror of
https://github.com/boostorg/python.git
synced 2026-01-22 17:32:55 +00:00
95 lines
2.6 KiB
Python
95 lines
2.6 KiB
Python
# Copyright Bruno da Silva de Oliveira 2003. Use, modification and
|
|
# distribution is subject to the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
# http:#www.boost.org/LICENSE_1_0.txt)
|
|
|
|
import os.path
|
|
|
|
#==============================================================================
|
|
# Exporter
|
|
#==============================================================================
|
|
class Exporter(object):
|
|
'Base class for objects capable to generate boost.python code.'
|
|
|
|
INDENT = ' ' * 4
|
|
|
|
def __init__(self, info, parser_tail=None):
|
|
self.info = info
|
|
self.parser_tail = parser_tail
|
|
self.interface_file = None
|
|
self.declarations = []
|
|
|
|
|
|
def Name(self):
|
|
raise NotImplementedError(self.__class__.__name__)
|
|
|
|
|
|
def Tail(self):
|
|
return self.parser_tail
|
|
|
|
|
|
def Parse(self, parser):
|
|
self.parser = parser
|
|
header = self.info.include
|
|
tail = self.parser_tail
|
|
declarations, parser_header = parser.parse(header, tail)
|
|
self.parser_header = parser_header
|
|
self.SetDeclarations(declarations)
|
|
|
|
|
|
def SetParsedHeader(self, parsed_header):
|
|
self.parser_header = parsed_header
|
|
|
|
|
|
def SetDeclarations(self, declarations):
|
|
self.declarations = declarations
|
|
|
|
|
|
def GenerateCode(self, codeunit, exported_names):
|
|
self.WriteInclude(codeunit)
|
|
self.Export(codeunit, exported_names)
|
|
|
|
|
|
def WriteInclude(self, codeunit):
|
|
codeunit.Write('include', '#include <%s>\n' % self.info.include)
|
|
|
|
|
|
def Export(self, codeunit, exported_names):
|
|
'subclasses must override this to do the real work'
|
|
pass
|
|
|
|
|
|
def GetDeclarations(self, fullname):
|
|
decls = []
|
|
for decl in self.declarations:
|
|
if decl.FullName() == fullname:
|
|
decls.append(decl)
|
|
if not decls:
|
|
raise RuntimeError, 'no %s declaration found!' % fullname
|
|
return decls
|
|
|
|
|
|
def GetDeclaration(self, fullname):
|
|
decls = self.GetDeclarations(fullname)
|
|
#assert len(decls) == 1
|
|
return decls[0]
|
|
|
|
|
|
def Order(self):
|
|
'''Returns a string that uniquely identifies this instance. All
|
|
exporters will be sorted by Order before being exported.
|
|
'''
|
|
return 0, self.info.name
|
|
|
|
|
|
def Header(self):
|
|
return self.info.include
|
|
|
|
|
|
def __eq__(self, other):
|
|
return type(self) is type(other) and self.Name() == other.Name() \
|
|
and self.interface_file == other.interface_file
|
|
|
|
def __ne__(self, other):
|
|
return not self == other
|