[pypy-commit] pypy translation-cleanup: Raise FlowingError for run-time UnboundLocalError
rlamy
noreply at buildbot.pypy.org
Thu Oct 11 21:13:06 CEST 2012
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: translation-cleanup
Changeset: r58015:76950b0447c5
Date: 2012-10-11 14:39 +0100
http://bitbucket.org/pypy/pypy/changeset/76950b0447c5/
Log: Raise FlowingError for run-time UnboundLocalError
diff --git a/pypy/objspace/flow/flowcontext.py b/pypy/objspace/flow/flowcontext.py
--- a/pypy/objspace/flow/flowcontext.py
+++ b/pypy/objspace/flow/flowcontext.py
@@ -668,6 +668,12 @@
else:
self.space.call_function(w_exitfunc, w_None, w_None, w_None)
+ def LOAD_FAST(self, varindex, next_instr):
+ w_value = self.locals_stack_w[varindex]
+ if w_value is None:
+ raise FlowingError(self, "Local variable referenced before assignment")
+ self.pushvalue(w_value)
+
def LOAD_GLOBAL(self, nameindex, next_instr):
w_result = self.space.find_global(self.w_globals, self.getname_u(nameindex))
self.pushvalue(w_result)
diff --git a/pypy/objspace/flow/test/test_objspace.py b/pypy/objspace/flow/test/test_objspace.py
--- a/pypy/objspace/flow/test/test_objspace.py
+++ b/pypy/objspace/flow/test/test_objspace.py
@@ -1122,6 +1122,12 @@
self.codetest(f)
assert "closure" in str(excinfo.value)
+ def test_unbound_local(self):
+ def f():
+ x += 1
+ with py.test.raises(FlowingError):
+ self.codetest(f)
+
DATA = {'x': 5,
'y': 6}
More information about the pypy-commit
mailing list