Current Path : /usr/local/share/python2.5/Tools/bgen/bgen/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/local/share/python2.5/Tools/bgen/bgen/bgenModule.py |
from bgenOutput import * from bgenGeneratorGroup import GeneratorGroup class Module(GeneratorGroup): def __init__(self, name, prefix = None, includestuff = None, finalstuff = None, initstuff = None, variablestuff = None, longname = None): GeneratorGroup.__init__(self, prefix or name) self.name = name if longname: self.longname = longname else: self.longname = name self.includestuff = includestuff self.initstuff = initstuff self.finalstuff = finalstuff self.variablestuff = variablestuff self.typeobjects = [] def addobject(self, od): self.generators.append(od) self.typeobjects.append(od) od.setmodulename(self.longname) def generate(self): OutHeader1("Module " + self.name) Output("#include \"Python.h\"") Output() if self.includestuff: Output() Output("%s", self.includestuff) self.declareModuleVariables() GeneratorGroup.generate(self) if self.finalstuff: Output() Output("%s", self.finalstuff) Output() Output("void init%s(void)", self.name) OutLbrace() Output("PyObject *m;") Output("PyObject *d;") Output() if self.initstuff: Output("%s", self.initstuff) Output() Output("m = Py_InitModule(\"%s\", %s_methods);", self.name, self.prefix) Output("d = PyModule_GetDict(m);") self.createModuleVariables() OutRbrace() OutHeader1("End module " + self.name) def declareModuleVariables(self): self.errorname = self.prefix + "_Error" Output("static PyObject *%s;", self.errorname) def createModuleVariables(self): Output("""%s = %s;""", self.errorname, self.exceptionInitializer()) Output("""if (%s == NULL ||""", self.errorname) Output(""" PyDict_SetItemString(d, "Error", %s) != 0)""", self.errorname) IndentLevel() Output("""return;""") DedentLevel() for tp in self.typeobjects: tp.outputTypeObjectInitializer() if self.variablestuff: Output("%s", self.variablestuff) Output() def exceptionInitializer(self): return """PyErr_NewException("%s.Error", NULL, NULL)""" % self.name def _test(): from bgenGenerator import FunctionGenerator m = Module("spam", "", "#include <stdio.h>") g = FunctionGenerator(None, "bacon") m.add(g) m.generate() if __name__ == "__main__": _test()