[pypy-commit] pypy online-transforms: pass the tests on CPython
rlamy
noreply at buildbot.pypy.org
Fri Oct 17 19:05:27 CEST 2014
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: online-transforms
Changeset: r74002:230d0daa9f89
Date: 2014-10-17 17:22 +0100
http://bitbucket.org/pypy/pypy/changeset/230d0daa9f89/
Log: pass the tests on CPython
diff --git a/rpython/annotator/bookkeeper.py b/rpython/annotator/bookkeeper.py
--- a/rpython/annotator/bookkeeper.py
+++ b/rpython/annotator/bookkeeper.py
@@ -32,6 +32,9 @@
return ann_func
return wrapped
+CONTAINERS_S = [SomeList, SomeDict, SomeOrderedDict, SomeTuple]
+_cls2Some = {cls.knowntype: cls for cls in CONTAINERS_S}
+
class Bookkeeper(object):
"""The log of choices that have been made while analysing the operations.
It ensures that the same 'choice objects' will be returned if we ask
@@ -318,8 +321,8 @@
result = s_self.find_method(x.__name__)
assert result is not None
elif hasattr(x, '__objclass__'):
- s_type = self.valueoftype(x.__objclass__)
- result = s_type.find_unboundmethod(x.__name__)
+ cls_s = self.annotationclass(x.__objclass__)
+ result = cls_s.find_unboundmethod(x.__name__)
else:
result = None
if result is None:
@@ -440,6 +443,12 @@
def valueoftype(self, t):
return annotationoftype(t, self)
+ def annotationclass(self, cls):
+ try:
+ return _cls2Some[cls]
+ except KeyError:
+ return type(self.valueoftype(cls))
+
def get_classpbc_attr_families(self, attrname):
"""Return the UnionFind for the ClassAttrFamilies corresponding to
attributes of the given name.
diff --git a/rpython/annotator/unaryop.py b/rpython/annotator/unaryop.py
--- a/rpython/annotator/unaryop.py
+++ b/rpython/annotator/unaryop.py
@@ -119,10 +119,11 @@
else:
return SomeBuiltinMethod(analyser, self, name)
- def find_unboundmethod(self, name):
+ @classmethod
+ def find_unboundmethod(cls, name):
"Look for a special-case implementation for the named method."
try:
- analyser = getattr(self.__class__, 'method_' + name)
+ analyser = getattr(cls, 'method_' + name)
except AttributeError:
return None
else:
More information about the pypy-commit
mailing list