2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-25 06:22:15 +00:00
Files
python/pyste/src/Exporter.py
Bruno da Silva de Oliveira 06f454e1d3 - Some small memory improvements
[SVN r18459]
2003-05-20 01:35:13 +00:00

75 lines
2.0 KiB
Python

import os.path
#==============================================================================
# Exporter
#==============================================================================
class Exporter:
'Base class for objects capable to generate boost.python code.'
INDENT = ' ' * 4
def __init__(self, info, parser_tail=None, parser_decl=None):
self.info = info
self.parser_tail = parser_tail
self.parser_decl = parser_decl
def Name(self):
return self.info.name
def Parse(self, parser):
self.parser = parser
header = self.info.include
tail = self.parser_tail
decl = self.parser_decl
declarations, parser_header = parser.parse(header, tail, decl)
self.parser_header = parser_header
self.SetDeclarations(declarations)
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 Unit(self):
raise NotImplementedError
def GetDeclarations(self, fullname):
decls = [x for x in self.declarations if x.FullName() == fullname]
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.
'''
raise NotImplementedError
def Unit(self):
return self.info.include