Commit 9c39e3e7 authored by Carl Witty's avatar Carl Witty

trac #561: fixed major performance bug in special functions (by not generating...

trac #561: fixed major performance bug in special functions (by not generating Python versions and letting PyType_Ready() do it instead; details are on the trac ticket)
parent e95729e9
...@@ -1230,7 +1230,14 @@ class CCodeWriter(object): ...@@ -1230,7 +1230,14 @@ class CCodeWriter(object):
# code = "((PyObject*)%s)" % code # code = "((PyObject*)%s)" % code
self.put_init_to_py_none(code, entry.type, nanny) self.put_init_to_py_none(code, entry.type, nanny)
def put_pymethoddef(self, entry, term): def put_pymethoddef(self, entry, term, allow_skip=True):
if entry.is_special or entry.name in ['__getitem__', '__setslice__', '__delslice__', '__setitem__', '__delitem__', '__getattr__', '__getattribute__', '__setattr__', '__delattr__']:
if entry.name not in ['__next__', '__getreadbuffer__', '__getwritebuffer__', '__getsegcount__', '__getcharbuffer__', '__getbuffer__', '__releasebuffer__']:
# Python's typeobject.c will automatically fill in our slot
# in add_operators() (called by PyType_Ready) with a value
# that's better than ours.
if allow_skip:
return
from TypeSlots import method_coexist from TypeSlots import method_coexist
if entry.doc: if entry.doc:
doc_code = entry.doc_cname doc_code = entry.doc_cname
......
...@@ -2239,7 +2239,7 @@ class DefNode(FuncDefNode): ...@@ -2239,7 +2239,7 @@ class DefNode(FuncDefNode):
code.put( code.put(
"static PyMethodDef %s = " % "static PyMethodDef %s = " %
self.entry.pymethdef_cname) self.entry.pymethdef_cname)
code.put_pymethoddef(self.entry, ";") code.put_pymethoddef(self.entry, ";", allow_skip=False)
code.putln("%s {" % header) code.putln("%s {" % header)
def generate_argument_declarations(self, env, code): def generate_argument_declarations(self, env, code):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment