translator/test/test_unsimplify.py::test_call_final_function
def test_call_final_function():
tmpfile = str(udir.join('test_call_final_function'))
def f(x):
return x * 6
def goodbye_world():
if we_are_translated():
fd = os.open(tmpfile, os.O_WRONLY | os.O_CREAT, 0644)
os.close(fd)
graph, t = translate(f, [int])
call_final_function(t, goodbye_world)
#
if os.path.exists(tmpfile):
os.unlink(tmpfile)
interp = LLInterpreter(t.rtyper)
> result = interp.eval_graph(graph, [7])
translator\test\test_unsimplify.py:106:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
rtyper\llinterp.py:97: in eval_graph
retval = llframe.eval()
rtyper\llinterp.py:295: in eval
nextblock, args = self.eval_block(nextblock)
rtyper\llinterp.py:319: in eval_block
self.eval_operation(op)
rtyper\llinterp.py:422: in eval_operation
retval = ophandler(*vals)
rtyper\llinterp.py:697: in op_direct_call
return self.perform_call(f, FTYPE.ARGS, args)
rtyper\llinterp.py:693: in perform_call
return frame.eval()
rtyper\llinterp.py:295: in eval
nextblock, args = self.eval_block(nextblock)
rtyper\llinterp.py:319: in eval_block
self.eval_operation(op)
rtyper\llinterp.py:422: in eval_operation
retval = ophandler(*vals)
rtyper\llinterp.py:697: in op_direct_call
return self.perform_call(f, FTYPE.ARGS, args)
rtyper\llinterp.py:693: in perform_call
return frame.eval()
rtyper\llinterp.py:295: in eval
nextblock, args = self.eval_block(nextblock)
rtyper\llinterp.py:319: in eval_block
self.eval_operation(op)
rtyper\llinterp.py:422: in eval_operation
retval = ophandler(*vals)
rtyper\llinterp.py:697: in op_direct_call
return self.perform_call(f, FTYPE.ARGS, args)
rtyper\llinterp.py:693: in perform_call
return frame.eval()
rtyper\llinterp.py:295: in eval
nextblock, args = self.eval_block(nextblock)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <rpython.rtyper.llinterp.LLFrame object at 0x00000131d89dd280>
block = raise block[etype_72...] with 0 exits
def eval_block(self, block):
""" return (nextblock, values) tuple. If nextblock
is None, values is the concrete return value.
"""
self.curr_block = block
e = None
try:
for i, op in enumerate(block.operations):
self.curr_operation_index = i
self.eval_operation(op)
except LLException as e:
if op is not block.raising_op:
raise
except RuntimeError as e:
rstackovf.check_stack_overflow()
# xxx fish fish fish for proper etype and evalue to use
rtyper = self.llinterpreter.typer
bk = rtyper.annotator.bookkeeper
classdef = bk.getuniqueclassdef(rstackovf._StackOverflow)
exdata = rtyper.exceptiondata
evalue = exdata.get_standard_ll_exc_instance(rtyper, classdef)
etype = exdata.fn_type_of_exc_inst(evalue)
e = LLException(etype, evalue)
if op is not block.raising_op:
raise e
# determine nextblock and/or return value
if len(block.exits) == 0:
# return block
tracer = self.llinterpreter.tracer
if len(block.inputargs) == 2:
# exception
if tracer:
tracer.dump('raise')
etypevar, evaluevar = block.getvariables()
etype = self.getval(etypevar)
evalue = self.getval(evaluevar)
# watch out, these are _ptr's
> raise LLException(etype, evalue)
E LLException: <LLException 'OSError'>
rtyper\llinterp.py:348: LLException
---------- Captured stderr call ----------
[platform:msg] Updated environment with vsver 160, using x64 True
[rtyper] -=- specialized 4 blocks -=-
[rtyper] -=- specialized 4 more blocks -=-
[rtyper] specializing: 100 / 231 blocks (43%)
[rtyper] specializing: 200 / 310 blocks (64%)
[rtyper] specializing: 300 / 310 blocks (96%)
[rtyper] -=- specialized 302 more blocks -=-
(somefailed=True in translator/test)
builder: rpython-win-x86-64 build #399
test: translator/test/test_unsimplify/py/test_call_final_function