Author: Ronan Lamy <[email protected]>
Branch: translation-cleanup
Changeset: r57011:1f98e87fed92
Date: 2012-08-23 04:52 +0100
http://bitbucket.org/pypy/pypy/changeset/1f98e87fed92/

Log:    Flowspacify IMPORT_NAME

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
@@ -1,5 +1,6 @@
 import collections
 import sys
+from pypy.tool.error import FlowingError
 from pypy.interpreter.executioncontext import ExecutionContext
 from pypy.interpreter.error import OperationError
 from pypy.interpreter.pytraceback import PyTraceback
@@ -491,6 +492,21 @@
             if res is not None:
                 next_instr = res
 
+    def IMPORT_NAME(self, nameindex, next_instr):
+        space = self.space
+        modulename = self.getname_u(nameindex)
+        w_fromlist = self.popvalue()
+
+        level = self.popvalue().value
+        if level != -1:
+            raise FlowingError("Relative imports are not implemented in 
RPython")
+
+        w_locals = space.w_None
+        w_modulename = space.wrap(modulename)
+        w_globals = self.w_globals
+        w_obj = space.import_name(w_modulename, w_globals, w_locals, 
w_fromlist)
+        self.pushvalue(w_obj)
+
     def IMPORT_FROM(self, nameindex, next_instr):
         w_name = self.getname_w(nameindex)
         w_module = self.peekvalue()
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
@@ -701,6 +701,15 @@
             from pypy import this_does_not_exist
         py.test.raises(ImportError, 'self.codetest(f)')
 
+    def test_relative_import(self):
+        def f():
+            from ..test.test_objspace import FlowObjSpace
+        # Check that the function works in Python
+        assert f() is None
+
+        with py.test.raises(error.FlowingError):
+            self.codetest(f)
+
     def test_mergeable(self):
         def myfunc(x):
             if x:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to