summaryrefslogtreecommitdiff
path: root/AppPkg/Applications/Python/Python-2.7.2/Tools/bgen/bgen/bgenModule.py
diff options
context:
space:
mode:
Diffstat (limited to 'AppPkg/Applications/Python/Python-2.7.2/Tools/bgen/bgen/bgenModule.py')
-rw-r--r--AppPkg/Applications/Python/Python-2.7.2/Tools/bgen/bgen/bgenModule.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/AppPkg/Applications/Python/Python-2.7.2/Tools/bgen/bgen/bgenModule.py b/AppPkg/Applications/Python/Python-2.7.2/Tools/bgen/bgen/bgenModule.py
new file mode 100644
index 0000000000..f8c43d9af1
--- /dev/null
+++ b/AppPkg/Applications/Python/Python-2.7.2/Tools/bgen/bgen/bgenModule.py
@@ -0,0 +1,94 @@
+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()