mirror of https://github.com/python/cpython.git
Added optional suppport for storage modifiers (virtual/static/inline/etc)
and conditional generation of objects and methods.
This commit is contained in:
parent
b6216dd2e7
commit
d4128f397d
|
@ -15,18 +15,27 @@
|
|||
|
||||
class BaseFunctionGenerator:
|
||||
|
||||
def __init__(self, name, condition=None):
|
||||
def __init__(self, name, condition=None, callname=None, modifiers=None):
|
||||
if DEBUG: print "<--", name
|
||||
self.name = name
|
||||
self.callname = name
|
||||
if callname:
|
||||
self.callname = callname
|
||||
else:
|
||||
self.callname = name
|
||||
self.prefix = name
|
||||
self.objecttype = "PyObject" # Type of _self argument to function
|
||||
self.condition = condition
|
||||
self.modifiers = modifiers
|
||||
|
||||
def setprefix(self, prefix):
|
||||
self.prefix = prefix
|
||||
|
||||
def checkgenerate(self):
|
||||
return True
|
||||
|
||||
def generate(self):
|
||||
if not self.checkgenerate():
|
||||
return
|
||||
if DEBUG: print "-->", self.name
|
||||
if self.condition:
|
||||
Output()
|
||||
|
@ -51,6 +60,8 @@ def functiontrailer(self):
|
|||
OutRbrace()
|
||||
|
||||
def reference(self, name = None):
|
||||
if not self.checkgenerate():
|
||||
return
|
||||
if name is None:
|
||||
name = self.name
|
||||
docstring = self.docstring()
|
||||
|
|
|
@ -219,6 +219,9 @@ def outputTypeObjectInitializer(self):
|
|||
Output("if (PyType_Ready(&%s) < 0) return;", self.typename)
|
||||
Output("""Py_INCREF(&%s);""", self.typename)
|
||||
Output("PyModule_AddObject(m, \"%s\", (PyObject *)&%s);", self.name, self.typename);
|
||||
self.outputTypeObjectInitializerCompat()
|
||||
|
||||
def outputTypeObjectInitializerCompat(self):
|
||||
Output("/* Backward-compatible name */")
|
||||
Output("""Py_INCREF(&%s);""", self.typename);
|
||||
Output("PyModule_AddObject(m, \"%sType\", (PyObject *)&%s);", self.name, self.typename);
|
||||
|
|
|
@ -620,11 +620,15 @@ def generate(self, tp, name, arglist, modifiers=[]):
|
|||
(atype, aname, amode))
|
||||
if self.greydictnames.has_key(name):
|
||||
self.specfile.write(" condition=%r,\n"%(self.greydictnames[name],))
|
||||
self.generatemodifiers(classname, name, modifiers)
|
||||
self.specfile.write(")\n")
|
||||
self.specfile.write("%s.append(f)\n\n" % listname)
|
||||
|
||||
def destination(self, type, name, arglist):
|
||||
return "FunctionGenerator", "functions"
|
||||
|
||||
def generatemodifiers(self, classname, name, modifiers):
|
||||
pass
|
||||
|
||||
def blacklisted(self, type, name):
|
||||
if type in self.blacklisttypes:
|
||||
|
|
Loading…
Reference in New Issue