[pypy-svn] r13487 - in pypy/dist/pypy: annotation translator/test

arigo at codespeak.net arigo at codespeak.net
Thu Jun 16 19:53:01 CEST 2005


Author: arigo
Date: Thu Jun 16 19:52:59 2005
New Revision: 13487

Modified:
   pypy/dist/pypy/annotation/bookkeeper.py
   pypy/dist/pypy/translator/test/test_annrpython.py
Log:
It seems useful for the rtyper to ask the bookkeeper to record the annotation
given to a attribute read from a set of PBCs.


Modified: pypy/dist/pypy/annotation/bookkeeper.py
==============================================================================
--- pypy/dist/pypy/annotation/bookkeeper.py	(original)
+++ pypy/dist/pypy/annotation/bookkeeper.py	Thu Jun 16 19:52:59 2005
@@ -380,38 +380,36 @@
 
         access_sets = self.pbc_maximal_access_sets
         objects = pbc.prebuiltinstances.keys()
-        access = None
-        first = None
-        change = False
-        
+
         for obj in objects:
             if obj is not None:
                 first = obj
                 break
+        else:
+            return SomeImpossibleValue()
+
+        change, rep, access = access_sets.find(first)
+        for obj in objects:
+            if obj is not None:
+                change1, rep, access = access_sets.union(rep, obj)
+                change = change or change1
 
-        if first is not None:
-            change, rep, access = access_sets.find(first)
-            for obj in objects:
-                if obj is not None:
-                    change1, rep, access = access_sets.union(rep, obj)
-                    change = change or change1
-
-            access.attrs[attr] = True
-            position = self.position_key
-            access.read_locations[position] = True
+        position = self.position_key
+        access.read_locations[position] = True
 
         actuals = []
+        for c in access.objects:
+            if hasattr(c, attr):
+                actuals.append(self.immutablevalue(getattr(c, attr)))
+        s_result = unionof(*actuals)
 
-        if access:
-            for c in access.objects:
-                if hasattr(c, attr):
-                    actuals.append(self.immutablevalue(getattr(c, attr)))
+        access.attrs[attr] = s_result
 
         if change:
             for position in access.read_locations:
                 self.annotator.reflowfromposition(position)
                 
-        return unionof(*actuals)        
+        return s_result
 
     def consider_pbc_call(self, pbc, shape, spaceop=None, implicit_init=None): # computation done at fix-point
         if not isinstance(pbc, SomePBC):

Modified: pypy/dist/pypy/translator/test/test_annrpython.py
==============================================================================
--- pypy/dist/pypy/translator/test/test_annrpython.py	(original)
+++ pypy/dist/pypy/translator/test/test_annrpython.py	Thu Jun 16 19:52:59 2005
@@ -810,7 +810,7 @@
         assert acc1 is acc2 is acc3
 
         assert len(acc1.objects) == 3
-        assert acc1.attrs == {'v1': True, 'v2': True}
+        assert dict.fromkeys(acc1.attrs) == {'v1': None, 'v2': None}
 
         assert access_sets[c1] is acc1
         py.test.raises(KeyError, "access_sets[object()]")



More information about the Pypy-commit mailing list