[pypy-svn] r19975 - in pypy/branch/somepbc-refactoring/pypy: annotation translator translator/test
pedronis at codespeak.net
pedronis at codespeak.net
Thu Nov 17 15:43:06 CET 2005
Author: pedronis
Date: Thu Nov 17 15:43:04 2005
New Revision: 19975
Modified:
pypy/branch/somepbc-refactoring/pypy/annotation/bookkeeper.py
pypy/branch/somepbc-refactoring/pypy/annotation/classdef.py
pypy/branch/somepbc-refactoring/pypy/annotation/description.py
pypy/branch/somepbc-refactoring/pypy/translator/annrpython.py
pypy/branch/somepbc-refactoring/pypy/translator/test/test_annrpython.py
Log:
(arigo, pedronis)
- disable one test with unclear status.
- progress passing the rest of the test_annrpython tests up to class specialisation
Modified: pypy/branch/somepbc-refactoring/pypy/annotation/bookkeeper.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/annotation/bookkeeper.py (original)
+++ pypy/branch/somepbc-refactoring/pypy/annotation/bookkeeper.py Thu Nov 17 15:43:04 2005
@@ -402,9 +402,10 @@
cls = result.knowntype
if cls not in self.pbctypes:
self.pbctypes[cls] = True
- if cls in self.userclasses:
- self.warning("making some PBC of type %r, which has "
- "already got a ClassDef" % (cls,))
+ # XXX what to do about this old check?:
+ #if cls in self.userclasses:
+ # self.warning("making some PBC of type %r, which has "
+ # "already got a ClassDef" % (cls,))
self.descs[pyobj] = result
return result
@@ -531,6 +532,9 @@
first.mergecallfamilies(*descs[1:])
callfamily = first.getcallfamily()
+ shape = args.rawshape()
+ callfamily.patterns[shape] = True
+
if emulated is None:
whence = self.position_key
else:
Modified: pypy/branch/somepbc-refactoring/pypy/annotation/classdef.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/annotation/classdef.py (original)
+++ pypy/branch/somepbc-refactoring/pypy/annotation/classdef.py Thu Nov 17 15:43:04 2005
@@ -353,7 +353,7 @@
"""
d = []
uplookup = None
- upfunc = None
+ updesc = None
meth = False
check_for_missing_attrs = False
for desc in pbc.descriptions:
@@ -366,7 +366,7 @@
# upward consider only the best match
if uplookup is None or methclassdef.issubclass(uplookup):
uplookup = methclassdef
- upfunc = desc.funcdesc
+ updesc = desc
continue
# for clsdef1 >= clsdef2, we guarantee that
# clsdef1.lookup_filter(pbc) includes
@@ -384,11 +384,7 @@
uplookup.attr_sources.setdefault(name, {})
check_for_missing_attrs = True
- # when the method is found in a parent class, it get bound to the
- # 'self' subclass. This allows the MethodDesc entry of the
- # PBC descriptions to track more precisely with which 'self' the
- # method is called.
- d.append(self.bookkeeper.getmethoddesc(upfunc, self))
+ d.append(updesc)
elif meth and name is not None:
check_for_missing_attrs = True
Modified: pypy/branch/somepbc-refactoring/pypy/annotation/description.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/annotation/description.py (original)
+++ pypy/branch/somepbc-refactoring/pypy/annotation/description.py Thu Nov 17 15:43:04 2005
@@ -247,3 +247,9 @@
def __repr__(self):
return '<MethodOfFrozenDesc %r of %r>' % (self.funcdesc,
self.frozendesc)
+
+ def pycall(self, schedule, args):
+ from pypy.annotation.model import SomePBC
+ s_self = SomePBC([self.frozendesc])
+ args = args.prepend(s_self)
+ return self.funcdesc.pycall(schedule, args)
Modified: pypy/branch/somepbc-refactoring/pypy/translator/annrpython.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/translator/annrpython.py (original)
+++ pypy/branch/somepbc-refactoring/pypy/translator/annrpython.py Thu Nov 17 15:43:04 2005
@@ -120,21 +120,6 @@
"""Return a list of ClassDefs."""
return self.bookkeeper.classdefs
- def getpbcaccesssets(self):
- """Return mapping const obj -> PBCAccessSet"""
- return self.bookkeeper.pbc_maximal_access_sets
-
- def getpbccallables(self):
- """Return mapping callable -> {(ClassDef|None, callable): True...},
-
- The tuples are indices in getpbcfamilies returned mapping
- """
- return self.bookkeeper.pbc_callables
-
- def getpbccallfamilies(self):
- """Return mapping (ClassDef|None, callable) -> PBCCallFamily"""
- return self.bookkeeper.pbc_maximal_call_families
-
#___ medium-level interface ____________________________
def addpendingblock(self, graph, block, cells, called_from_graph=None):
Modified: pypy/branch/somepbc-refactoring/pypy/translator/test/test_annrpython.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/translator/test/test_annrpython.py (original)
+++ pypy/branch/somepbc-refactoring/pypy/translator/test/test_annrpython.py Thu Nov 17 15:43:04 2005
@@ -726,13 +726,14 @@
a = self.RPythonAnnotator()
s = a.build_types(lambda: myobj, [])
assert myobj.called
- assert s == annmodel.SomePBC({myobj: True})
+ assert isinstance(s, annmodel.SomePBC)
+ assert s.const == myobj
myobj = Stuff(False)
a = self.RPythonAnnotator()
s = a.build_types(lambda: myobj, [])
assert myobj.called
assert isinstance(s, annmodel.SomeInstance)
- assert s.classdef is a.bookkeeper.getclassdef(Stuff)
+ assert s.classdef is a.bookkeeper.getuniqueclassdef(Stuff)
def test_circular_mutable_getattr(self):
class C:
@@ -820,21 +821,16 @@
assert listitem(l1).knowntype == int
assert listitem(l2).knowntype == str
- access_sets = a.getpbcaccesssets()
- ign, rep1,acc1 = access_sets.find(c1)
- ign, rep2,acc2 = access_sets.find(c2)
- ing, rep3,acc3 = access_sets.find(c3)
+ acc1 = a.bookkeeper.getdesc(c1).getattrfamily()
+ acc2 = a.bookkeeper.getdesc(c2).getattrfamily()
+ acc3 = a.bookkeeper.getdesc(c3).getattrfamily()
- assert rep1 is rep2 is rep3
assert acc1 is acc2 is acc3
- assert len(acc1.objects) == 3
+ assert len(acc1.descs) == 3
assert dict.fromkeys(acc1.attrs) == {'v1': None, 'v2': None}
- assert access_sets[c1] is acc1
- py.test.raises(KeyError, "access_sets[object()]")
-
def test_simple_pbc_call(self):
def f1(x,y=0):
pass
@@ -853,21 +849,13 @@
a = self.RPythonAnnotator()
s = a.build_types(h, [])
- callables = a.getpbccallables()
- call_families = a.getpbccallfamilies()
-
- fc = lambda x: {(None, x): True}
-
- assert len(callables) == 4
- assert callables == {g: fc(g), f1: fc(f1), f2: fc(f2), f3: fc(f3)}
-
- ign, rep1, fam1 = call_families.find((None, f1))
- ign, rep2, fam2 = call_families.find((None, f2))
- ign, rep3, fam3 = call_families.find((None, f3))
-
- assert rep1 is not rep2
- assert rep1 is not rep3
- assert rep3 is rep2
+ fdesc1 = a.bookkeeper.getdesc(f1)
+ fdesc2 = a.bookkeeper.getdesc(f2)
+ fdesc3 = a.bookkeeper.getdesc(f3)
+
+ fam1 = fdesc1.getcallfamily()
+ fam2 = fdesc2.getcallfamily()
+ fam3 = fdesc3.getcallfamily()
assert fam1 is not fam2
assert fam1 is not fam3
@@ -904,24 +892,16 @@
a = self.RPythonAnnotator()
s = a.build_types(f, [bool])
- callables = a.getpbccallables()
- call_families = a.getpbccallfamilies()
-
clsdef = a.bookkeeper.getuniqueclassdef
+ bookkeeper = a.bookkeeper
- fc = lambda x: {(None, x): True}
- mc = lambda x: {(clsdef(x.im_class), x.im_func): True}
-
- assert len(callables) == 6
- assert callables == { B: fc(B), C: fc(C),
- C.__init__.im_func: fc(C.__init__.im_func),
- A.m.im_func: mc(A.m),
- C.m.im_func: mc(C.m),
- B.n.im_func: mc(B.n) }
-
- ign, repA_m, famA_m = call_families.find((clsdef(A), A.m.im_func))
- ign, repC_m, famC_m = call_families.find((clsdef(C), C.m.im_func))
- ign, repB_n, famB_n = call_families.find((clsdef(B), B.n.im_func))
+ def fam(meth):
+ mdesc = bookkeeper.getmethoddesc(bookkeeper.getdesc(meth.im_func), clsdef(meth.im_class))
+ return mdesc.getcallfamily()
+
+ famA_m = fam(A.m)
+ famC_m = fam(C.m)
+ famB_n = fam(B.n)
assert famA_m is famC_m
assert famB_n is not famA_m
@@ -932,7 +912,7 @@
assert famB_n.patterns == {(0, (), False, False): True }
assert famA_m.patterns == {(0, (), False, False): True }
- ign, repCinit, famCinit = call_families.find((None, C.__init__.im_func))
+ famCinit = bookkeeper.getdesc(C.__init__.im_func).getcallfamily()
assert famCinit.patterns == {(1, (), False, False): True }
def test_isinstance_usigned(self):
@@ -1469,7 +1449,7 @@
s = a.build_types(f, [float])
assert s.const == "dontknow"
- def test_hidden_method(self):
+ def MAYBE_test_hidden_method(self):
class Base:
def method(self):
return ["should be hidden"]
More information about the Pypy-commit
mailing list