[pypy-commit] pypy default: Use a blacklist instead of a whitelist for modules
fijal
noreply at buildbot.pypy.org
Thu Oct 23 17:09:07 CEST 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch:
Changeset: r74143:f7bc5ed1602f
Date: 2014-10-23 17:08 +0200
http://bitbucket.org/pypy/pypy/changeset/f7bc5ed1602f/
Log: Use a blacklist instead of a whitelist for modules
diff --git a/pypy/goal/targetpypystandalone.py b/pypy/goal/targetpypystandalone.py
--- a/pypy/goal/targetpypystandalone.py
+++ b/pypy/goal/targetpypystandalone.py
@@ -304,7 +304,8 @@
return self.get_entry_point(config)
def jitpolicy(self, driver):
- from pypy.module.pypyjit.policy import PyPyJitPolicy, pypy_hooks
+ from pypy.module.pypyjit.policy import PyPyJitPolicy
+ from pypy.module.pypyjit.hooks import pypy_hooks
return PyPyJitPolicy(pypy_hooks)
def get_entry_point(self, config):
diff --git a/pypy/module/pypyjit/__init__.py b/pypy/module/pypyjit/__init__.py
--- a/pypy/module/pypyjit/__init__.py
+++ b/pypy/module/pypyjit/__init__.py
@@ -24,7 +24,7 @@
def setup_after_space_initialization(self):
# force the __extend__ hacks to occur early
from pypy.module.pypyjit.interp_jit import pypyjitdriver
- from pypy.module.pypyjit.policy import pypy_hooks
+ from pypy.module.pypyjit.hooks import pypy_hooks
# add the 'defaults' attribute
from rpython.rlib.jit import PARAMETERS
space = self.space
diff --git a/pypy/module/pypyjit/hooks.py b/pypy/module/pypyjit/hooks.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/pypyjit/hooks.py
@@ -0,0 +1,89 @@
+
+from rpython.rlib import jit_hooks
+from rpython.rlib.jit import JitHookInterface, Counters
+
+from pypy.interpreter.error import OperationError
+from pypy.module.pypyjit.interp_resop import (Cache, wrap_greenkey,
+ WrappedOp, W_JitLoopInfo, wrap_oplist)
+
+class PyPyJitIface(JitHookInterface):
+ def on_abort(self, reason, jitdriver, greenkey, greenkey_repr, logops, operations):
+ space = self.space
+ cache = space.fromcache(Cache)
+ if cache.in_recursion:
+ return
+ if space.is_true(cache.w_abort_hook):
+ cache.in_recursion = True
+ oplist_w = wrap_oplist(space, logops, operations)
+ try:
+ try:
+ space.call_function(cache.w_abort_hook,
+ space.wrap(jitdriver.name),
+ wrap_greenkey(space, jitdriver, greenkey, greenkey_repr),
+ space.wrap(Counters.counter_names[reason]),
+ space.newlist(oplist_w)
+ )
+ except OperationError, e:
+ e.write_unraisable(space, "jit hook ", cache.w_abort_hook)
+ finally:
+ cache.in_recursion = False
+
+ def after_compile(self, debug_info):
+ self._compile_hook(debug_info, is_bridge=False)
+
+ def after_compile_bridge(self, debug_info):
+ self._compile_hook(debug_info, is_bridge=True)
+
+ def before_compile(self, debug_info):
+ self._optimize_hook(debug_info, is_bridge=False)
+
+ def before_compile_bridge(self, debug_info):
+ self._optimize_hook(debug_info, is_bridge=True)
+
+ def _compile_hook(self, debug_info, is_bridge):
+ space = self.space
+ cache = space.fromcache(Cache)
+ if cache.in_recursion:
+ return
+ if space.is_true(cache.w_compile_hook):
+ w_debug_info = W_JitLoopInfo(space, debug_info, is_bridge)
+ cache.in_recursion = True
+ try:
+ try:
+ space.call_function(cache.w_compile_hook,
+ space.wrap(w_debug_info))
+ except OperationError, e:
+ e.write_unraisable(space, "jit hook ", cache.w_compile_hook)
+ finally:
+ cache.in_recursion = False
+
+ def _optimize_hook(self, debug_info, is_bridge=False):
+ space = self.space
+ cache = space.fromcache(Cache)
+ if cache.in_recursion:
+ return
+ if space.is_true(cache.w_optimize_hook):
+ w_debug_info = W_JitLoopInfo(space, debug_info, is_bridge)
+ cache.in_recursion = True
+ try:
+ try:
+ w_res = space.call_function(cache.w_optimize_hook,
+ space.wrap(w_debug_info))
+ if space.is_w(w_res, space.w_None):
+ return
+ l = []
+ for w_item in space.listview(w_res):
+ item = space.interp_w(WrappedOp, w_item)
+ l.append(jit_hooks._cast_to_resop(item.op))
+ del debug_info.operations[:] # modifying operations above is
+ # probably not a great idea since types may not work
+ # and we'll end up with half-working list and
+ # a segfault/fatal RPython error
+ for elem in l:
+ debug_info.operations.append(elem)
+ except OperationError, e:
+ e.write_unraisable(space, "jit hook ", cache.w_compile_hook)
+ finally:
+ cache.in_recursion = False
+
+pypy_hooks = PyPyJitIface()
diff --git a/pypy/module/pypyjit/policy.py b/pypy/module/pypyjit/policy.py
--- a/pypy/module/pypyjit/policy.py
+++ b/pypy/module/pypyjit/policy.py
@@ -1,93 +1,4 @@
from rpython.jit.codewriter.policy import JitPolicy
-from rpython.rlib import jit_hooks
-from rpython.rlib.jit import JitHookInterface, Counters
-
-from pypy.interpreter.error import OperationError
-from pypy.module.pypyjit.interp_resop import (Cache, wrap_greenkey,
- WrappedOp, W_JitLoopInfo, wrap_oplist)
-
-
-class PyPyJitIface(JitHookInterface):
- def on_abort(self, reason, jitdriver, greenkey, greenkey_repr, logops, operations):
- space = self.space
- cache = space.fromcache(Cache)
- if cache.in_recursion:
- return
- if space.is_true(cache.w_abort_hook):
- cache.in_recursion = True
- oplist_w = wrap_oplist(space, logops, operations)
- try:
- try:
- space.call_function(cache.w_abort_hook,
- space.wrap(jitdriver.name),
- wrap_greenkey(space, jitdriver, greenkey, greenkey_repr),
- space.wrap(Counters.counter_names[reason]),
- space.newlist(oplist_w)
- )
- except OperationError, e:
- e.write_unraisable(space, "jit hook ", cache.w_abort_hook)
- finally:
- cache.in_recursion = False
-
- def after_compile(self, debug_info):
- self._compile_hook(debug_info, is_bridge=False)
-
- def after_compile_bridge(self, debug_info):
- self._compile_hook(debug_info, is_bridge=True)
-
- def before_compile(self, debug_info):
- self._optimize_hook(debug_info, is_bridge=False)
-
- def before_compile_bridge(self, debug_info):
- self._optimize_hook(debug_info, is_bridge=True)
-
- def _compile_hook(self, debug_info, is_bridge):
- space = self.space
- cache = space.fromcache(Cache)
- if cache.in_recursion:
- return
- if space.is_true(cache.w_compile_hook):
- w_debug_info = W_JitLoopInfo(space, debug_info, is_bridge)
- cache.in_recursion = True
- try:
- try:
- space.call_function(cache.w_compile_hook,
- space.wrap(w_debug_info))
- except OperationError, e:
- e.write_unraisable(space, "jit hook ", cache.w_compile_hook)
- finally:
- cache.in_recursion = False
-
- def _optimize_hook(self, debug_info, is_bridge=False):
- space = self.space
- cache = space.fromcache(Cache)
- if cache.in_recursion:
- return
- if space.is_true(cache.w_optimize_hook):
- w_debug_info = W_JitLoopInfo(space, debug_info, is_bridge)
- cache.in_recursion = True
- try:
- try:
- w_res = space.call_function(cache.w_optimize_hook,
- space.wrap(w_debug_info))
- if space.is_w(w_res, space.w_None):
- return
- l = []
- for w_item in space.listview(w_res):
- item = space.interp_w(WrappedOp, w_item)
- l.append(jit_hooks._cast_to_resop(item.op))
- del debug_info.operations[:] # modifying operations above is
- # probably not a great idea since types may not work
- # and we'll end up with half-working list and
- # a segfault/fatal RPython error
- for elem in l:
- debug_info.operations.append(elem)
- except OperationError, e:
- e.write_unraisable(space, "jit hook ", cache.w_compile_hook)
- finally:
- cache.in_recursion = False
-
-pypy_hooks = PyPyJitIface()
class PyPyJitPolicy(JitPolicy):
@@ -103,19 +14,13 @@
return True
if '.' in modname:
modname, rest = modname.split('.', 1)
+ if modname in ['unicodedata', 'gc', '_minimal_curses', 'cpyext']:
+ return False
else:
rest = ''
- if modname in ['pypyjit', 'signal', 'micronumpy', 'math', 'exceptions',
- 'imp', 'sys', 'array', 'itertools', 'operator',
- 'posix', '_socket', '_sre', '_lsprof', '_weakref',
- '__pypy__', 'cStringIO', '_collections', 'struct',
- 'mmap', 'marshal', '_codecs', 'rctime', 'cppyy',
- '_cffi_backend', 'pyexpat', '_continuation', '_io',
- 'thread', 'select', '_random']:
- if modname == 'pypyjit' and 'interp_resop' in rest:
- return False
- return True
- return False
+ if modname == 'pypyjit' and 'interp_resop' in rest:
+ return False
+ return True
def look_inside_function(self, func):
mod = func.__module__ or '?'
More information about the pypy-commit
mailing list