[pypy-commit] pypy cpyext-leakchecking: Add space.appdef()
rlamy
pypy.commits at gmail.com
Tue Aug 1 22:35:48 EDT 2017
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: cpyext-leakchecking
Changeset: r92022:93ef9a8f432f
Date: 2017-08-01 16:06 +0100
http://bitbucket.org/pypy/pypy/changeset/93ef9a8f432f/
Log: Add space.appdef()
diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -1,4 +1,5 @@
import sys
+import py
from rpython.rlib.cache import Cache
from rpython.tool.uid import HUGEVAL_BYTES
@@ -1338,6 +1339,20 @@
self.setitem(w_globals, w_key, self.builtin)
return statement.exec_code(self, w_globals, w_locals)
+ @not_rpython
+ def appdef(self, source):
+ '''Create interp-level function object from app-level source.
+
+ The source should be in the same format as for space.appexec():
+ """(foo, bar): return 'baz'"""
+ '''
+ source = source.lstrip()
+ assert source.startswith('('), "incorrect header in:\n%s" % (source,)
+ source = py.code.Source("def anonymous%s\n" % source)
+ w_glob = self.newdict(module=True)
+ self.exec_(str(source), w_glob, w_glob)
+ return self.getitem(w_glob, self.newtext('anonymous'))
+
@specialize.arg(2)
def appexec(self, posargs_w, source):
""" return value from executing given source at applevel.
@@ -1926,15 +1941,7 @@
class AppExecCache(SpaceCache):
@not_rpython
def build(cache, source):
- space = cache.space
- # XXX will change once we have our own compiler
- import py
- source = source.lstrip()
- assert source.startswith('('), "incorrect header in:\n%s" % (source,)
- source = py.code.Source("def anonymous%s\n" % source)
- w_glob = space.newdict(module=True)
- space.exec_(str(source), w_glob, w_glob)
- return space.getitem(w_glob, space.newtext('anonymous'))
+ return cache.space.appdef(source)
# Table describing the regular part of the interface of object spaces,
More information about the pypy-commit
mailing list