def codetest(source, functionname, args): """Compile and run the given code string, and then call its function named by 'functionname' with arguments 'args'.""" from pypy.interpreter import baseobjspace from pypy.interpreter import pyframe, gateway, module space = Space() source = str(py.code.Source(source).strip()) + '\n' w = space.wrap w_code = space.builtin.call('compile', w(source), w('<string>'), w('exec'), w(0), w(0)) tempmodule = module.Module(space, w("__temp__")) w_glob = tempmodule.w_dict space.setitem(w_glob, w("__builtins__"), space.builtin) code = space.unwrap(w_code) code.exec_code(space, w_glob, w_glob) wrappedargs = [w(a) for a in args] wrappedfunc = space.getitem(w_glob, w(functionname)) def callit(): return space.call_function(wrappedfunc, *wrappedargs) return callit try: w_output = space.call_function(wrappedfunc, *wrappedargs) except baseobjspace.OperationError, e: #e.print_detailed_traceback(space) return '<<<%s>>>' % e.errorstr(space)
def test_rpystone(): space = Space() modic = init(space) entry = space.getitem(modic, space.wrap("entrypoint")) # warm-up,to get everything translated space.call(entry, space.newtuple([space.wrap(-1)])) # now this is the real one space.call(entry, space.newtuple([space.wrap(LOOPS)]))