[pypy-commit] pypy more-rposix: Remove all code related to "lazy registration" of functions, not used anymore.
amauryfa
noreply at buildbot.pypy.org
Sun May 3 23:00:03 CEST 2015
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: more-rposix
Changeset: r77019:0240be39ca29
Date: 2015-05-03 22:59 +0200
http://bitbucket.org/pypy/pypy/changeset/0240be39ca29/
Log: Remove all code related to "lazy registration" of functions, not
used anymore.
diff --git a/rpython/rtyper/extfunc.py b/rpython/rtyper/extfunc.py
--- a/rpython/rtyper/extfunc.py
+++ b/rpython/rtyper/extfunc.py
@@ -1,123 +1,9 @@
-from rpython.rtyper import extregistry
from rpython.rtyper.extregistry import ExtRegistryEntry
from rpython.rtyper.lltypesystem.lltype import typeOf
from rpython.annotator import model as annmodel
from rpython.annotator.signature import annotation
-import py, sys
-
-class extdef(object):
-
- def __init__(self, *args, **kwds):
- self.def_args = args
- self.def_kwds = kwds
-
-def lazy_register(func_or_list, register_func):
- """ Lazily register external function. Will create a function,
- which explodes when llinterpd/translated, but does not explode
- earlier
- """
- if isinstance(func_or_list, list):
- funcs = func_or_list
- else:
- funcs = [func_or_list]
- try:
- val = register_func()
- if isinstance(val, extdef):
- assert len(funcs) == 1
- register_external(funcs[0], *val.def_args, **val.def_kwds)
- return
- return val
- except (SystemExit, MemoryError, KeyboardInterrupt):
- raise
- except:
- exc, exc_inst, tb = sys.exc_info()
- for func in funcs:
- # if the function has already been registered and we got
- # an exception afterwards, the ExtRaisingEntry would create
- # a double-registration and crash in an AssertionError that
- # masks the original problem. In this case, just re-raise now.
- if extregistry.is_registered(func):
- raise exc, exc_inst, tb
- class ExtRaisingEntry(ExtRegistryEntry):
- _about_ = func
- def __getattr__(self, attr):
- if attr == '_about_' or attr == '__dict__':
- return super(ExtRegistryEntry, self).__getattr__(attr)
- raise exc, exc_inst, tb
-
-def registering(func, condition=True):
- if not condition:
- return lambda method: None
-
- def decorator(method):
- method._registering_func = func
- return method
- return decorator
-
-def registering_if(ns, name, condition=True):
- try:
- func = getattr(ns, name)
- except AttributeError:
- condition = False
- func = None
-
- return registering(func, condition=condition)
-
-class LazyRegisteringMeta(type):
- def __new__(self, _name, _type, _vars):
- RegisteringClass = type.__new__(self, _name, _type, _vars)
- allfuncs = []
- for varname in _vars:
- attr = getattr(RegisteringClass, varname)
- f = getattr(attr, '_registering_func', None)
- if f:
- allfuncs.append(f)
- registering_inst = lazy_register(allfuncs, RegisteringClass)
- if registering_inst is not None:
- for varname in _vars:
- attr = getattr(registering_inst, varname)
- f = getattr(attr, '_registering_func', None)
- if f:
- lazy_register(f, attr)
- RegisteringClass.instance = registering_inst
- # override __init__ to avoid confusion
- def raising(self):
- raise TypeError("Cannot call __init__ directly, use cls.instance to access singleton")
- RegisteringClass.__init__ = raising
- return RegisteringClass
-
-class BaseLazyRegistering(object):
- __metaclass__ = LazyRegisteringMeta
- compilation_info = None
-
- def configure(self, CConfig):
- classes_seen = self.__dict__.setdefault('__classes_seen', {})
- if CConfig in classes_seen:
- return
- from rpython.rtyper.tool import rffi_platform as platform
- # copy some stuff
- if self.compilation_info is None:
- self.compilation_info = CConfig._compilation_info_
- else:
- self.compilation_info = self.compilation_info.merge(
- CConfig._compilation_info_)
- self.__dict__.update(platform.configure(CConfig))
- classes_seen[CConfig] = True
-
- def llexternal(self, *args, **kwds):
- kwds = kwds.copy()
- from rpython.rtyper.lltypesystem import rffi
-
- if 'compilation_info' in kwds:
- kwds['compilation_info'] = self.compilation_info.merge(
- kwds['compilation_info'])
- else:
- kwds['compilation_info'] = self.compilation_info
- return rffi.llexternal(*args, **kwds)
-
- def _freeze_(self):
- return True
+import py
class ExtFuncEntry(ExtRegistryEntry):
safe_not_sandboxed = False
@@ -252,8 +138,6 @@
else:
FunEntry.__name__ = function.func_name
-BaseLazyRegistering.register = staticmethod(register_external)
-
def is_external(func):
if hasattr(func, 'value'):
func = func.value
diff --git a/rpython/rtyper/test/test_extfunc.py b/rpython/rtyper/test/test_extfunc.py
--- a/rpython/rtyper/test/test_extfunc.py
+++ b/rpython/rtyper/test/test_extfunc.py
@@ -1,7 +1,7 @@
import py
from rpython.rtyper.extfunc import ExtFuncEntry, register_external,\
- is_external, lazy_register
+ is_external
from rpython.annotator import model as annmodel
from rpython.annotator.annrpython import RPythonAnnotator
from rpython.annotator.policy import AnnotatorPolicy
diff --git a/rpython/rtyper/test/test_extfuncregister.py b/rpython/rtyper/test/test_extfuncregister.py
deleted file mode 100644
--- a/rpython/rtyper/test/test_extfuncregister.py
+++ /dev/null
@@ -1,113 +0,0 @@
-
-""" A small test suite for discovering whether lazy registration
-of register_external functions work as intendet
-"""
-
-import py
-from rpython.rtyper.extfunc import lazy_register, BaseLazyRegistering, \
- registering, registering_if, extdef
-from rpython.rtyper.test.test_llinterp import interpret
-
-def test_lazy_register():
- def f():
- return 3
-
- def g():
- return f()
-
- def reg_func():
- 1/0
-
- lazy_register(f, reg_func)
-
- py.test.raises(ZeroDivisionError, interpret, g, [])
-
-def test_lazy_register_class_raising():
- def f():
- return 3
-
- def g():
- return 3
-
- class LazyRegister(BaseLazyRegistering):
- def __init__(self):
- self.stuff = 8
- self.x = []
-
- @registering(f)
- def register_f(self):
- self.x.append(1)
- 1/0
-
- @registering(g)
- def register_g(self):
- self.x.append(2)
- self.register(g, [], int, llimpl=lambda : self.stuff)
-
- py.test.raises(TypeError, "LazyRegister()")
- assert LazyRegister.instance.x == [1, 2]
- py.test.raises(ZeroDivisionError, interpret, lambda : f(), [])
- assert interpret(lambda : g(), []) == 8
-
-def test_lazy_register_extdef():
- def g():
- return 3
-
- x = []
-
- def register_g():
- x.append('g')
- return extdef([], int, llimpl=lambda : 21)
-
- nothing = lazy_register(g, register_g)
-
- assert x == ['g']
- assert nothing is None
- assert interpret(lambda : g(), []) == 21
-
-def test_lazy_register_raising_init():
- def f():
- return 3
-
- def g():
- return 3
-
- class LazyRegister(BaseLazyRegistering):
- def __init__(self):
- 1/0
-
- @registering(f)
- def register_f(self):
- pass
-
- @registering(g)
- def register_g(self):
- pass
-
- py.test.raises(ZeroDivisionError, interpret, lambda : f(), [])
- py.test.raises(ZeroDivisionError, interpret, lambda : g(), [])
-
-def test_registering_if():
- class A:
- @staticmethod
- def f():
- pass
-
- @registering_if(A, 'f')
- def foo():
- pass
-
- assert foo._registering_func is A.f
-
- @registering_if(A, 'g')
- def bar():
- pass
-
- assert bar is None
-
- @registering_if(A, 'f', False)
- def baz():
- pass
-
- assert baz is None
-
More information about the pypy-commit
mailing list