[pypy-svn] r10576 - in pypy/dist/pypy/module: builtin test
pedronis at codespeak.net
pedronis at codespeak.net
Wed Apr 13 15:06:49 CEST 2005
Author: pedronis
Date: Wed Apr 13 15:06:49 2005
New Revision: 10576
Modified:
pypy/dist/pypy/module/builtin/compiling.py
pypy/dist/pypy/module/test/test_builtin.py
Log:
fix eval builtins access; eval("len([])") now works
Modified: pypy/dist/pypy/module/builtin/compiling.py
==============================================================================
--- pypy/dist/pypy/module/builtin/compiling.py (original)
+++ pypy/dist/pypy/module/builtin/compiling.py Wed Apr 13 15:06:49 2005
@@ -58,10 +58,13 @@
raise OperationError(space.w_TypeError,
w('eval() arg 1 must be a string or code object'))
+ try:
+ caller = space.getexecutioncontext().framestack.top()
+ except IndexError:
+ caller = None
+
if w_globals is None:
- try:
- caller = space.getexecutioncontext().framestack.top()
- except IndexError:
+ if caller is None:
w_globals = w_locals = space.newdict([])
else:
w_globals = caller.w_globals
@@ -69,4 +72,12 @@
elif w_locals is None:
w_locals = w_globals
+ try:
+ space.getitem(w_globals, space.wrap('__builtins__'))
+ except OperationError, e:
+ if not e.match(space, space.w_KeyError):
+ raise
+ if caller is not None:
+ space.setitem(w_globals, space.wrap('__builtins__'), caller.builtin)
+
return space.interpclass_w(w_codeobj).exec_code(space, w_globals, w_locals)
Modified: pypy/dist/pypy/module/test/test_builtin.py
==============================================================================
--- pypy/dist/pypy/module/test/test_builtin.py (original)
+++ pypy/dist/pypy/module/test/test_builtin.py Wed Apr 13 15:06:49 2005
@@ -320,6 +320,8 @@
def test_eval(self):
assert eval("1+2") == 3
assert eval(" \t1+2\n") == 3
+ assert eval("len([])") == 0
+ assert eval("len([])", {}) == 0
def test_compile(self):
co = compile('1+2', '?', 'eval')
More information about the Pypy-commit
mailing list