def my_init(space, w_self, __args__): "Our new AssertionError.__init__()." w_parent_init = space.getattr(w_BuiltinAssertionError, space.wrap('__init__')) space.call_args(w_parent_init, __args__.prepend(w_self)) ## # Argh! we may see app-level helpers in the frame stack! ## # that's very probably very bad... ## ^^^the above comment may be outdated, but we are not sure # if the assertion provided a message, don't do magic args_w, kwargs_w = __args__.unpack() if args_w: w_msg = args_w[0] else: frame = space.getexecutioncontext().gettopframe() runner = AppFrame(space, frame) try: source = runner.statement source = str(source).strip() except py.error.ENOENT: source = None from pypy import conftest if source and not conftest.option.nomagic: msg = exprinfo.interpret(source, runner, should_fail=True) space.setattr(w_self, space.wrap('args'), space.newtuple([space.wrap(msg)])) w_msg = space.wrap(msg) else: w_msg = space.w_None space.setattr(w_self, space.wrap('msg'), w_msg)
def test_AppFrame(space): import sys co = PyCode._from_code(space, somefunc.func_code) pyframe = PyFrame(space, co, space.newdict(), None) runner = AppFrame(space, pyframe) exprinfo.run("f = lambda x: x+1", runner) msg = exprinfo.interpret("assert isinstance(f(2), float)", runner) assert msg.startswith("assert isinstance(3, float)\n" " + where 3 = ")