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 __init__(self, name, prefix = None, includestuff = None, finalstuff = None, initstuff = None): GeneratorGroup.__init__(self, prefix or name) self.name = name self.includestuff = includestuff self.initstuff = initstuff self.finalstuff = finalstuff
def __init__(self, name, prefix = None, includestuff = None, finalstuff = None, initstuff = None, variablestuff = None): GeneratorGroup.__init__(self, prefix or name) self.name = name self.includestuff = includestuff self.initstuff = initstuff self.finalstuff = finalstuff self.variablestuff = variablestuff self.typeobjects = []
def __init__(self, name, prefix, itselftype): """ObjectDefinition constructor. May be extended, but do not override. - name: the object's official name, e.g. 'SndChannel'. - prefix: the prefix used for the object's functions and data, e.g. 'SndCh'. - itselftype: the C type actually contained in the object, e.g. 'SndChannelPtr'. XXX For official Python data types, rules for the 'Py' prefix are a problem. """ GeneratorGroup.__init__(self, prefix or name) self.name = name self.itselftype = itselftype self.objecttype = name + 'Object' self.typename = name + '_Type' self.argref = "" # set to "*" if arg to <type>_New should be pointer self.static = "static " # set to "" to make <type>_New and <type>_Convert public self.basechain = "NULL" # set to &<basetype>_chain to chain methods
def generate(self): # XXX This should use long strings and %(varname)s substitution! OutHeader2("Object type " + self.name) sf = self.static and "static " Output("%sPyTypeObject %s;", sf, self.typename) Output() Output("#define %s_Check(x) ((x)->ob_type == &%s || PyObject_TypeCheck((x), &%s))", self.prefix, self.typename, self.typename) Output() Output("typedef struct %s {", self.objecttype) IndentLevel() Output("PyObject_HEAD") self.outputStructMembers() DedentLevel() Output("} %s;", self.objecttype) self.outputNew() self.outputConvert() self.outputDealloc() GeneratorGroup.generate(self) Output() self.outputMethodChain() self.outputGetattr() self.outputSetattr() self.outputCompare() self.outputRepr() self.outputHash() self.outputPEP253Hooks() self.outputTypeObject() OutHeader2("End object type " + self.name)
def __init__(self, name, prefix, itselftype): """ObjectDefinition constructor. May be extended, but do not override. - name: the object's official name, e.g. 'SndChannel'. - prefix: the prefix used for the object's functions and data, e.g. 'SndCh'. - itselftype: the C type actually contained in the object, e.g. 'SndChannelPtr'. XXX For official Python data types, rules for the 'Py' prefix are a problem. """ GeneratorGroup.__init__(self, prefix or name) self.name = name self.itselftype = itselftype self.objecttype = name + 'Object' self.typename = name + '_Type' self.static = "static " # set to "" to make <type>_New and <type>_Convert public self.modulename = None if hasattr(self, "assertions"): self.assertions()
def generate(self): # XXX This should use long strings and %(varname)s substitution! OutHeader2("Object type " + self.name) self.outputCheck() Output("typedef struct %s {", self.objecttype) IndentLevel() Output("PyObject_HEAD") self.outputStructMembers() DedentLevel() Output("} %s;", self.objecttype) self.outputNew() self.outputConvert() self.outputDealloc() GeneratorGroup.generate(self) Output() self.outputMethodChain() self.outputGetattr() self.outputSetattr() self.outputCompare() self.outputRepr() self.outputHash() self.outputPEP253Hooks() self.outputTypeObject() OutHeader2("End object type " + self.name)
def generate(self): # XXX This should use long strings and %(varname)s substitution! OutHeader2("Object type " + self.name) sf = self.static and "staticforward " Output("%sPyTypeObject %s;", sf, self.typename) Output() Output("#define %s_Check(x) ((x)->ob_type == &%s)", self.prefix, self.typename) Output() Output("typedef struct %s {", self.objecttype) IndentLevel() Output("PyObject_HEAD") self.outputStructMembers() DedentLevel() Output("} %s;", self.objecttype) self.outputNew() self.outputConvert() self.outputDealloc() GeneratorGroup.generate(self) Output() Output("%sPyMethodChain %s_chain = { %s_methods, %s };", self.static, self.prefix, self.prefix, self.basechain) self.outputGetattr() self.outputSetattr() self.outputTypeObject() OutHeader2("End object type " + self.name)
def add(self, g, dupcheck=0): g.setselftype(self.objecttype, self.itselftype) GeneratorGroup.add(self, g, dupcheck)
from bgenOutput import *
def add(self, g): g.setselftype(self.objecttype, self.itselftype) GeneratorGroup.add(self, g)