[pypy-svn] r25733 - pypy/dist/pypy/rpython/lltypesystem
tismer at codespeak.net
tismer at codespeak.net
Wed Apr 12 20:19:02 CEST 2006
Author: tismer
Date: Wed Apr 12 20:19:01 2006
New Revision: 25733
Modified:
pypy/dist/pypy/rpython/lltypesystem/rclass.py
Log:
factorizing out common stuff, better naming
Modified: pypy/dist/pypy/rpython/lltypesystem/rclass.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/rclass.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/rclass.py Wed Apr 12 20:19:01 2006
@@ -621,29 +621,35 @@
def ll_create_pywrapper(thing, repr):
return 42
+def into_cobject(v_inst, repr, llops):
+ llops.genop('gc_protect', [v_inst])
+ ARG = repr.lowleveltype
+ reprPBC = llops.rtyper.annotator.bookkeeper.immutablevalue(repr)
+ fp_dtor = llops.rtyper.annotate_helper_fn(call_destructor, [ARG, reprPBC])
+ FUNC = FuncType([ARG, Void], Void)
+ c_dtor = inputconst(Ptr(FUNC), fp_dtor)
+ return llops.gencapicall('PyCObject_FromVoidPtr', [v_inst, c_dtor], resulttype=pyobj_repr)
+
+def outof_cobject(v_obj, repr, llops):
+ v_inst = llops.gencapicall('PyCObject_AsVoidPtr', [v_obj], resulttype=repr)
+ llops.genop('gc_protect', [v_inst])
+ return v_inst
+
def rtype_wrap_object_create(hop):
gencapi = hop.llops.gencapicall
- pyptr = hop.r_result
v_inst, c_spec = hop.inputargs(*hop.args_r)
repr = c_spec.value
- f = call_destructor
- hop.genop('gc_protect', [v_inst])
- ARG = repr.lowleveltype
- reprPBC = hop.rtyper.annotator.bookkeeper.immutablevalue(repr)
- fp_dtor = hop.rtyper.annotate_helper_fn(f, [ARG, reprPBC])
- FUNC = FuncType([ARG, Void], Void)
- c_dtor = hop.inputconst(Ptr(FUNC), fp_dtor)
- res = gencapi('PyCObject_FromVoidPtr', [v_inst, c_dtor], resulttype=pyptr)
+ v_res = into_cobject(v_inst, repr, hop.llops)
if repr.has_wrapper:
- cobj = res
+ v_cobj = v_res
c_cls = hop.inputconst(pyobj_repr, repr.classdef.classdesc.pyobj)
c_0 = hop.inputconst(Signed, 0)
- res = gencapi('PyType_GenericAlloc', [c_cls, c_0], resulttype=pyptr)
+ v_res = gencapi('PyType_GenericAlloc', [c_cls, c_0], resulttype=pyobj_repr)
c_self = hop.inputconst(pyobj_repr, '__self__')
- v_result = hop.genop('setattr', [res, c_self, cobj], resulttype=pyptr)
- repr.setfield(v_inst, '_wrapper_', res, hop.llops)
- hop.genop('gc_unprotect', [res]) # yes a weak ref
- return res
+ hop.genop('setattr', [v_res, c_self, v_cobj], resulttype=pyobj_repr)
+ repr.setfield(v_inst, '_wrapper_', v_res, hop.llops)
+ hop.genop('gc_unprotect', [v_res]) # yes a weak ref
+ return v_res
extregistry.register_value(ll_create_pywrapper,
compute_result_annotation=annmodel.SomePtr(Ptr(PyObject)),
@@ -693,26 +699,16 @@
v_inst = r_to.new_instance(llops)
gencapi = llops.gencapicall
rtyper = llops.rtyper
- pyptr = r_from
- f = call_destructor
- ARG = r_to.lowleveltype
- reprPBC = rtyper.annotator.bookkeeper.immutablevalue(r_to)
- fp_dtor = rtyper.annotate_helper_fn(f, [ARG, reprPBC])
- FUNC = FuncType([ARG, Void], Void)
- c_dtor = inputconst(Ptr(FUNC), fp_dtor)
- v_cobj = gencapi('PyCObject_FromVoidPtr', [v_inst, c_dtor], resulttype=pyptr)
+ v_cobj = into_cobject(v_inst, r_to, llops)
c_self = inputconst(pyobj_repr, '__self__')
- llops.genop('setattr', [v, c_self, v_cobj], resulttype=pyptr)
+ llops.genop('setattr', [v, c_self, v_cobj], resulttype=pyobj_repr)
r_to.setfield(v_inst, '_wrapper_', v, llops)
- llops.genop('gc_protect', [v_inst])
llops.genop('gc_unprotect', [v])
return v_inst
c_self = inputconst(pyobj_repr, '__self__')
v = llops.genop('getattr', [v, c_self], resulttype=r_from)
- v_inst = llops.gencapicall('PyCObject_AsVoidPtr', [v], resulttype=r_to)
- llops.genop('gc_protect', [v_inst])
- return v_inst
+ return outof_cobject(v, r_to, llops)
# ____________________________________________________________
More information about the Pypy-commit
mailing list