* Protect the stoplist from mutation (suggested by JvR).
* Replace the comment on non-CPython implementations with working code. Should help those who could not comprehend the efforts that were made to support non-CPython environments automatically, with no performance penalty.
This commit is contained in:
parent
a8b8df4485
commit
5b706be0c0
23
pep-0329.txt
23
pep-0329.txt
|
@ -154,8 +154,9 @@ Here is a sample implementation for codetweaks.py::
|
||||||
"""
|
"""
|
||||||
import __builtin__
|
import __builtin__
|
||||||
env = vars(__builtin__).copy()
|
env = vars(__builtin__).copy()
|
||||||
|
stoplist = dict.fromkeys(stoplist)
|
||||||
if builtin_only:
|
if builtin_only:
|
||||||
stoplist.extend(f.func_globals)
|
stoplist.update(f.func_globals)
|
||||||
else:
|
else:
|
||||||
env.update(f.func_globals)
|
env.update(f.func_globals)
|
||||||
|
|
||||||
|
@ -214,19 +215,25 @@ Here is a sample implementation for codetweaks.py::
|
||||||
elif type(v) in (type, ClassType):
|
elif type(v) in (type, ClassType):
|
||||||
bind_all(v, builtin_only, stoplist, verbose)
|
bind_all(v, builtin_only, stoplist, verbose)
|
||||||
|
|
||||||
|
|
||||||
|
def f(): pass
|
||||||
|
try:
|
||||||
|
f.func_code.code
|
||||||
|
except AttributeError: # detect non-CPython environments
|
||||||
|
bind_all = lambda *args, **kwds: 0
|
||||||
|
del f
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
bind_all(sys.modules[__name__]) # Optimizer, optimize thyself!
|
bind_all(sys.modules[__name__]) # Optimizer, optimize thyself!
|
||||||
|
|
||||||
|
|
||||||
|
Note the automatic detection of a non-CPython environment that does not
|
||||||
|
have bytecodes [3]_. In that situation, the bind functions would simply
|
||||||
|
return the original function unchanged. This assures that the two
|
||||||
|
line additions to library modules do not impact other implementations.
|
||||||
|
|
||||||
The final code should have some minor embellishments:
|
The final code should add a flag to make it easy to disable binding.
|
||||||
|
|
||||||
* Automatic detection of a non-CPython environment that does not have
|
|
||||||
bytecodes [3]_. In that situation, the bind functions would simply
|
|
||||||
return the original function unchanged. This assures that the two
|
|
||||||
line additions to library modules do not impact other implementations.
|
|
||||||
|
|
||||||
* Add a flag to make it easy to disable binding.
|
|
||||||
|
|
||||||
|
|
||||||
References
|
References
|
||||||
|
|
Loading…
Reference in New Issue