[pypy-issue] Issue #1817: RPython should support multiple frame vref types? (pypy/pypy)

Edd Barrett issues-reply at bitbucket.org
Mon Jul 14 11:14:42 CEST 2014

New issue 1817: RPython should support multiple frame vref types?

Edd Barrett:


In the pypy bridge, I've had ti disable vrefs in at least one of the two interpreters to avoid the following error:

[translation:ERROR] UnionError:
[translation:ERROR] RPython cannot unify instances with no common base class
[translation:ERROR] Offending annotations:
[translation:ERROR]   SomeInstance(can_be_None=False, classdef=pypy.objspace.std
[translation:ERROR]   SomeInstance(can_be_None=False, classdef=hippy.frame.Frame
[translation:ERROR] Occurred processing the following simple_call:
[translation:ERROR]       (KeyError getting at the binding!)
[translation:ERROR]     v1101 = simple_call((function virtual_ref), frame_0)
[translation:ERROR] In <FunctionGraph of (hippy.interpreter:899)Interpreter.ente
r at 0x69844758>:
[translation:ERROR] Happened at file hippy/interpreter.py line 901
[translation:ERROR]             frame.f_backref = self.topframeref
[translation:ERROR] ==>         self.topframeref = jit.virtual_ref(frame)
[translation:ERROR]             #self.topframeref = jit.non_virtual_ref(frame)
[translation:ERROR]             if self.debugger is not None:
[translation:ERROR] Known variable annotations:
[translation:ERROR]  frame_0 = SomeInstance(can_be_None=False, classdef=hippy.fr
[translation:ERROR] Processing block:
[translation:ERROR]  block at 3 is a <class 'rpython.flowspace.flowcontext.SpamBloc
[translation:ERROR]  in (hippy.interpreter:899)Interpreter.enter
[translation:ERROR]  containing the following operations:
[translation:ERROR]        v1102 = getattr(self_139, ('topframeref'))
[translation:ERROR]        v1103 = setattr(frame_0, ('f_backref'), v1102)
[translation:ERROR]        v1101 = simple_call((function virtual_ref), frame_0)
[translation:ERROR]        v1104 = setattr(self_139, ('topframeref'), v1101)
[translation:ERROR]        v1105 = getattr(self_139, ('debugger'))
[translation:ERROR]        v1106 = is_(v1105, (None))
[translation:ERROR]        v1107 = bool(v1106)
[translation:ERROR]  --end--

So basically, a hippy frame and a pypy frame cannot be unioned. There are two possible fixes:

 * Provide some base abstract frame type and force VM implementers to use it.
 * Allow RPython to support multiple frame types for vrefs.

I don't feel qualified to comment further. What do the pypy devs think?

More information about the pypy-issue mailing list