Commit bc62fc02 authored by Matti Picus's avatar Matti Picus
Browse files

backed out f6ba0b987cc7 which was overkill and broke many things

--HG--
branch : missing-tp_new
parent 1df087c4e903
...@@ -429,19 +429,20 @@ from rpython.rlib.nonconst import NonConstant ...@@ -429,19 +429,20 @@ from rpython.rlib.nonconst import NonConstant
SLOTS = {} SLOTS = {}
@specialize.memo() @specialize.memo()
def get_slot_tp_function(space, w_type, name): def get_slot_tp_function(space, typedef, name):
key = (w_type, name) key = (typedef, name)
try: try:
return SLOTS[key] return SLOTS[key]
except KeyError: except KeyError:
ret = build_slot_tp_function(space, w_type, name) ret = build_slot_tp_function(space, typedef, name)
SLOTS[key] = ret SLOTS[key] = ret
return ret return ret
def build_slot_tp_function(space, w_type, name): def build_slot_tp_function(space, typedef, name):
w_type = space.gettypeobject(typedef)
header = pypy_decl header = pypy_decl
if mangle_name('', w_type.name) is None: if mangle_name('', typedef.name) is None:
header = None header = None
handled = False handled = False
# unary functions # unary functions
...@@ -465,7 +466,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -465,7 +466,7 @@ def build_slot_tp_function(space, w_type, name):
return return
@cpython_api([PyObject], PyObject, header=header) @cpython_api([PyObject], PyObject, header=header)
@func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), w_type.name)) @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
def slot_func(space, w_self): def slot_func(space, w_self):
return space.call_function(slot_fn, w_self) return space.call_function(slot_fn, w_self)
api_func = slot_func.api_func api_func = slot_func.api_func
...@@ -492,7 +493,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -492,7 +493,7 @@ def build_slot_tp_function(space, w_type, name):
return return
@cpython_api([PyObject, PyObject], PyObject, header=header) @cpython_api([PyObject, PyObject], PyObject, header=header)
@func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), w_type.name)) @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
def slot_func(space, w_self, w_arg): def slot_func(space, w_self, w_arg):
return space.call_function(slot_fn, w_self, w_arg) return space.call_function(slot_fn, w_self, w_arg)
api_func = slot_func.api_func api_func = slot_func.api_func
...@@ -510,7 +511,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -510,7 +511,7 @@ def build_slot_tp_function(space, w_type, name):
return return
@cpython_api([PyObject, Py_ssize_t], PyObject, header=header) @cpython_api([PyObject, Py_ssize_t], PyObject, header=header)
@func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), w_type.name)) @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
def slot_func(space, w_self, arg): def slot_func(space, w_self, arg):
return space.call_function(slot_fn, w_self, space.wrap(arg)) return space.call_function(slot_fn, w_self, space.wrap(arg))
api_func = slot_func.api_func api_func = slot_func.api_func
...@@ -525,7 +526,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -525,7 +526,7 @@ def build_slot_tp_function(space, w_type, name):
return return
@cpython_api([PyObject, PyObject, PyObject], PyObject, header=header) @cpython_api([PyObject, PyObject, PyObject], PyObject, header=header)
@func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), w_type.name)) @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
def slot_func(space, w_self, w_arg1, w_arg2): def slot_func(space, w_self, w_arg1, w_arg2):
return space.call_function(slot_fn, w_self, w_arg1, w_arg2) return space.call_function(slot_fn, w_self, w_arg1, w_arg2)
api_func = slot_func.api_func api_func = slot_func.api_func
...@@ -541,7 +542,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -541,7 +542,7 @@ def build_slot_tp_function(space, w_type, name):
@cpython_api([PyObject, PyObject, PyObject], rffi.INT_real, @cpython_api([PyObject, PyObject, PyObject], rffi.INT_real,
error=-1, header=header) error=-1, header=header)
@func_renamer("cpyext_tp_setattro_%s" % (w_type.name,)) @func_renamer("cpyext_tp_setattro_%s" % (typedef.name,))
def slot_tp_setattro(space, w_self, w_name, w_value): def slot_tp_setattro(space, w_self, w_name, w_value):
if w_value is not None: if w_value is not None:
space.call_function(setattr_fn, w_self, w_name, w_value) space.call_function(setattr_fn, w_self, w_name, w_value)
...@@ -555,7 +556,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -555,7 +556,7 @@ def build_slot_tp_function(space, w_type, name):
return return
@cpython_api([PyObject, PyObject], PyObject, header=header) @cpython_api([PyObject, PyObject], PyObject, header=header)
@func_renamer("cpyext_tp_getattro_%s" % (w_type.name,)) @func_renamer("cpyext_tp_getattro_%s" % (typedef.name,))
def slot_tp_getattro(space, w_self, w_name): def slot_tp_getattro(space, w_self, w_name):
return space.call_function(getattr_fn, w_self, w_name) return space.call_function(getattr_fn, w_self, w_name)
api_func = slot_tp_getattro.api_func api_func = slot_tp_getattro.api_func
...@@ -565,7 +566,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -565,7 +566,7 @@ def build_slot_tp_function(space, w_type, name):
return return
@cpython_api([PyObject, PyObject, PyObject], PyObject, header=header) @cpython_api([PyObject, PyObject, PyObject], PyObject, header=header)
@func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), w_type.name)) @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
def slot_tp_call(space, w_self, w_args, w_kwds): def slot_tp_call(space, w_self, w_args, w_kwds):
args = Arguments(space, [w_self], args = Arguments(space, [w_self],
w_stararg=w_args, w_starstararg=w_kwds) w_stararg=w_args, w_starstararg=w_kwds)
...@@ -578,7 +579,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -578,7 +579,7 @@ def build_slot_tp_function(space, w_type, name):
return return
@cpython_api([PyObject], PyObject, header=header) @cpython_api([PyObject], PyObject, header=header)
@func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), w_type.name)) @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
def slot_tp_iternext(space, w_self): def slot_tp_iternext(space, w_self):
try: try:
return space.call_function(iternext_fn, w_self) return space.call_function(iternext_fn, w_self)
...@@ -595,7 +596,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -595,7 +596,7 @@ def build_slot_tp_function(space, w_type, name):
@cpython_api([PyObject, PyObject, PyObject], rffi.INT_real, error=-1, @cpython_api([PyObject, PyObject, PyObject], rffi.INT_real, error=-1,
header=header) header=header)
@func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), w_type.name)) @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
def slot_tp_init(space, w_self, w_args, w_kwds): def slot_tp_init(space, w_self, w_args, w_kwds):
args = Arguments(space, [w_self], args = Arguments(space, [w_self],
w_stararg=w_args, w_starstararg=w_kwds) w_stararg=w_args, w_starstararg=w_kwds)
...@@ -608,7 +609,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -608,7 +609,7 @@ def build_slot_tp_function(space, w_type, name):
return return
@cpython_api([PyTypeObjectPtr, PyObject, PyObject], PyObject, header=None) @cpython_api([PyTypeObjectPtr, PyObject, PyObject], PyObject, header=None)
@func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), w_type.name)) @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
def slot_tp_new(space, w_self, w_args, w_kwds): def slot_tp_new(space, w_self, w_args, w_kwds):
args = Arguments(space, [w_self], args = Arguments(space, [w_self],
w_stararg=w_args, w_starstararg=w_kwds) w_stararg=w_args, w_starstararg=w_kwds)
...@@ -620,7 +621,7 @@ def build_slot_tp_function(space, w_type, name): ...@@ -620,7 +621,7 @@ def build_slot_tp_function(space, w_type, name):
return return
@cpython_api([PyObject, Py_bufferP, rffi.INT_real], @cpython_api([PyObject, Py_bufferP, rffi.INT_real],
rffi.INT_real, header=None, error=-1) rffi.INT_real, header=None, error=-1)
@func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), w_type.name)) @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
def buff_w(space, w_self, view, flags): def buff_w(space, w_self, view, flags):
args = Arguments(space, [space.newint(flags)]) args = Arguments(space, [space.newint(flags)])
w_obj = space.call_args(space.get(buff_fn, w_self), args) w_obj = space.call_args(space.get(buff_fn, w_self), args)
......
...@@ -256,7 +256,7 @@ def update_all_slots(space, w_type, pto): ...@@ -256,7 +256,7 @@ def update_all_slots(space, w_type, pto):
slot_func_helper = None slot_func_helper = None
if slot_func is None and typedef is not None: if slot_func is None and typedef is not None:
get_slot = get_slot_tp_function(space, w_type, slot_name) get_slot = get_slot_tp_function(space, typedef, slot_name)
if get_slot: if get_slot:
slot_func_helper = get_slot() slot_func_helper = get_slot()
elif slot_func: elif slot_func:
......
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