[pypy-dev] From Jiwon -- what is not getting to pypy-dev

Laura Creighton lac at strakt.com
Sat May 29 10:06:06 CEST 2004


What he would like as a patch


Index: module/__builtin__module.py
===================================================================
--- module/__builtin__module.py	(revision 4699)
+++ module/__builtin__module.py	(working copy)
@@ -427,7 +427,7 @@
 from __interplevel__ import hash, oct, hex, round
 from __interplevel__ import getattr, setattr, delattr, iter, hash, id
 from __interplevel__ import issubclass, _pypy_get
-from __interplevel__ import compile
+from __interplevel__ import compile, eval
 from __interplevel__ import globals, locals, _caller_globals, _caller_locals
 
 from __interplevel__ import file
Index: module/__builtin__interp.py
===================================================================
--- module/__builtin__interp.py	(revision 4699)
+++ module/__builtin__interp.py	(working copy)
@@ -92,7 +92,26 @@
         raise OperationError(space.w_TypeError,space.wrap(str(e)))
     return space.wrap(PyCode()._from_code(c))
 
+def eval(w_source, w_globals=None, w_locals=None):
+    w_codeobj = None
+    w = space.wrap
 
+    if space.type(w_source) == space.w_str:
+        w_codeobj = compile(w_source, w("<string>"), w("eval"))
+    elif type(space.unwrap(w_source)) == PyCode:
+        w_codeobj = w_source
+    else:
+        raise OperationError(space.w_TypeError,
+              w('eval() arg 1 must be a string or code object'))
+
+    if w_globals == None:
+        w_globals = globals()
+        w_locals = locals()
+    elif w_locals == None:
+        w_locals = w_globals
+
+    return space.unwrap(w_codeobj).exec_code(space, w_globals, w_locals)
+
 def abs(w_val):
     return space.abs(w_val)
 



More information about the Pypy-dev mailing list