[pypy-svn] r39819 - in pypy/dist/pypy: config doc/config interpreter module/__builtin__ objspace/std
cfbolz at codespeak.net
cfbolz at codespeak.net
Sat Mar 3 17:07:28 CET 2007
Author: cfbolz
Date: Sat Mar 3 17:07:26 2007
New Revision: 39819
Added:
pypy/dist/pypy/doc/config/objspace.honor__builtins__.txt
Modified:
pypy/dist/pypy/config/pypyoption.py
pypy/dist/pypy/interpreter/pyframe.py
pypy/dist/pypy/interpreter/pyopcode.py
pypy/dist/pypy/module/__builtin__/__init__.py
pypy/dist/pypy/objspace/std/objspace.py
Log:
(arigo, pedronis, cfbolz): disable by default the jumping-through-hoops that
CPython does for picking the builtins a frame is using.
Modified: pypy/dist/pypy/config/pypyoption.py
==============================================================================
--- pypy/dist/pypy/config/pypyoption.py (original)
+++ pypy/dist/pypy/config/pypyoption.py Sat Mar 3 17:07:26 2007
@@ -99,6 +99,10 @@
BoolOption("usepycfiles", "Write and read pyc files when importing",
default=True),
+ BoolOption("honor__builtins__",
+ "Honor the __builtins__ key of a module dictionary",
+ default=False),
+
OptionDescription("std", "Standard Object Space Options", [
BoolOption("withtproxy", "support transparent proxies",
default=False, cmdline='--with-transparent-proxy'),
Added: pypy/dist/pypy/doc/config/objspace.honor__builtins__.txt
==============================================================================
Modified: pypy/dist/pypy/interpreter/pyframe.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyframe.py (original)
+++ pypy/dist/pypy/interpreter/pyframe.py Sat Mar 3 17:07:26 2007
@@ -52,12 +52,19 @@
self.valuestack_w = [None] * code.co_stacksize
self.valuestackdepth = 0
self.blockstack = []
- self.builtin = space.builtin.pick_builtin(w_globals)
+ if space.config.objspace.honor__builtins__:
+ self.builtin = space.builtin.pick_builtin(w_globals)
# regular functions always have CO_OPTIMIZED and CO_NEWLOCALS.
# class bodies only have CO_NEWLOCALS.
self.initialize_frame_scopes(closure)
self.fastlocals_w = [None]*self.numlocals
self.f_lineno = self.pycode.co_firstlineno
+
+ def get_builtin(self):
+ if self.space.config.objspace.honor__builtins__:
+ return self.builtin
+ else:
+ return self.space.builtin
def initialize_frame_scopes(self, closure):
# regular functions always have CO_OPTIMIZED and CO_NEWLOCALS.
@@ -187,7 +194,7 @@
tup_state = [
w(self.f_back),
- w(self.builtin),
+ w(self.get_builtin()),
w(self.pycode),
w_valuestack,
w_blockstack,
@@ -441,7 +448,7 @@
return pytraceback.offset2lineno(self.pycode, self.last_instr)
def fget_f_builtins(space, self):
- return self.builtin.getdict()
+ return self.get_builtin().getdict()
def fget_f_back(space, self):
return self.space.wrap(self.f_back)
@@ -490,7 +497,9 @@
return space.w_None
def fget_f_restricted(space, self):
- return space.wrap(self.builtin is not space.builtin)
+ if space.config.objspace.honor__builtins__:
+ return space.wrap(self.builtin is not space.builtin)
+ return space.w_False
# ____________________________________________________________
Modified: pypy/dist/pypy/interpreter/pyopcode.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyopcode.py (original)
+++ pypy/dist/pypy/interpreter/pyopcode.py Sat Mar 3 17:07:26 2007
@@ -507,7 +507,8 @@
w_compile_flags = f.space.wrap(flags)
w_resulttuple = prepare_exec(f.space, f.space.wrap(f), w_prog,
w_globals, w_locals,
- w_compile_flags, f.space.wrap(f.builtin),
+ w_compile_flags,
+ f.space.wrap(f.get_builtin()),
f.space.gettypeobject(PyCode.typedef))
w_prog, w_globals, w_locals = f.space.unpacktuple(w_resulttuple, 3)
@@ -541,7 +542,7 @@
w_name = f.popvalue()
w_metaclass = find_metaclass(f.space, w_bases,
w_methodsdict, f.w_globals,
- f.space.wrap(f.builtin))
+ f.space.wrap(f.get_builtin()))
w_newclass = f.space.call_function(w_metaclass, w_name,
w_bases, w_methodsdict)
f.pushvalue(w_newclass)
@@ -607,7 +608,7 @@
w_value = f.space.finditem(f.w_globals, w_varname)
if w_value is None:
# not in the globals, now look in the built-ins
- w_value = f.builtin.getdictvalue(f.space, w_varname)
+ w_value = f.get_builtin().getdictvalue(f.space, w_varname)
if w_value is None:
varname = f.space.str_w(w_varname)
message = "global name '%s' is not defined" % varname
@@ -697,7 +698,7 @@
w_modulename = f.getname_w(nameindex)
modulename = f.space.str_w(w_modulename)
w_fromlist = f.popvalue()
- w_import = f.builtin.getdictvalue_w(f.space, '__import__')
+ w_import = f.get_builtin().getdictvalue_w(f.space, '__import__')
if w_import is None:
raise OperationError(space.w_ImportError,
space.wrap("__import__ not found"))
Modified: pypy/dist/pypy/module/__builtin__/__init__.py
==============================================================================
--- pypy/dist/pypy/module/__builtin__/__init__.py (original)
+++ pypy/dist/pypy/module/__builtin__/__init__.py Sat Mar 3 17:07:26 2007
@@ -135,6 +135,8 @@
def pick_builtin(self, w_globals):
"Look up the builtin module to use from the __builtins__ global"
+ # pick the __builtins__ roughly in the same way CPython does it
+ # this is obscure and slow
space = self.space
try:
w_builtin = space.getitem(w_globals, space.wrap('__builtins__'))
Modified: pypy/dist/pypy/objspace/std/objspace.py
==============================================================================
--- pypy/dist/pypy/objspace/std/objspace.py (original)
+++ pypy/dist/pypy/objspace/std/objspace.py Sat Mar 3 17:07:26 2007
@@ -95,9 +95,9 @@
assert isinstance(w_globals, W_DictMultiObject)
w_value = w_globals.implementation.get_builtin_indexed(num)
if w_value is None:
- w_builtins = f.builtin
- assert isinstance(w_builtins, Module)
- w_builtin_dict = w_builtins.w_dict
+ builtins = f.get_builtin()
+ assert isinstance(builtins, Module)
+ w_builtin_dict = builtins.w_dict
assert isinstance(w_builtin_dict, W_DictMultiObject)
w_value = w_builtin_dict.implementation.get_builtin_indexed(num)
## if w_value is not None:
More information about the Pypy-commit
mailing list