Author: Antonio Cuni <[email protected]>
Branch: hpy
Changeset: r98087:1cbaaff6fda2
Date: 2019-11-17 00:43 +0100
http://bitbucket.org/pypy/pypy/changeset/1cbaaff6fda2/
Log: pass the module as 'self' when calling HPyFunctionDefs.
test_self_is_module passes
diff --git a/pypy/module/hpy_universal/interp_extfunc.py
b/pypy/module/hpy_universal/interp_extfunc.py
--- a/pypy/module/hpy_universal/interp_extfunc.py
+++ b/pypy/module/hpy_universal/interp_extfunc.py
@@ -11,8 +11,9 @@
class W_ExtensionFunction(W_Root):
_immutable_fields_ = ["flags", "name"]
- def __init__(self, ml):
+ def __init__(self, ml, w_self):
self.ml = ml
+ self.w_self = w_self
self.name = rffi.charp2str(self.ml.c_ml_name)
self.flags = rffi.cast(lltype.Signed, self.ml.c_ml_flags)
# fetch the real HPy function pointer, by calling ml_meth, which
@@ -30,8 +31,10 @@
def call_noargs(self, space):
state = space.fromcache(State)
+ h_self = handles.new(space, self.w_self)
h_result = generic_cpy_call_dont_convert_result(space, self.cfuncptr,
- state.ctx, 0, 0)
+ state.ctx, h_self, 0)
+ handles.consume(space, h_self)
# XXX check for exceptions
return handles.consume(space, h_result)
diff --git a/pypy/module/hpy_universal/interp_hpy.py
b/pypy/module/hpy_universal/interp_hpy.py
--- a/pypy/module/hpy_universal/interp_hpy.py
+++ b/pypy/module/hpy_universal/interp_hpy.py
@@ -40,7 +40,7 @@
p = hpydef.c_m_methods
i = 0
while p[i].c_ml_name:
- w_extfunc = interp_extfunc.W_ExtensionFunction(p[i])
+ w_extfunc = interp_extfunc.W_ExtensionFunction(p[i], w_mod)
space.setattr(w_mod, space.newtext(w_extfunc.name), w_extfunc)
i += 1
#
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit