[pypy-svn] r7664 - in pypy/trunk/src/pypy: annotation translator translator/test

arigo at codespeak.net arigo at codespeak.net
Wed Nov 24 20:48:56 CET 2004


Author: arigo
Date: Wed Nov 24 20:48:54 2004
New Revision: 7664

Modified:
   pypy/trunk/src/pypy/annotation/factory.py
   pypy/trunk/src/pypy/annotation/model.py
   pypy/trunk/src/pypy/translator/annrpython.py
   pypy/trunk/src/pypy/translator/genc.py
   pypy/trunk/src/pypy/translator/genpyrex.py
   pypy/trunk/src/pypy/translator/test/test_annrpython.py
Log:
Removed SomeNone and turned it into a prebuilt constant (PBC).
A fix in genpyrex which gets confused by all the stuff that is now annotated
as prebuilt constant.



Modified: pypy/trunk/src/pypy/annotation/factory.py
==============================================================================
--- pypy/trunk/src/pypy/annotation/factory.py	(original)
+++ pypy/trunk/src/pypy/annotation/factory.py	Wed Nov 24 20:48:54 2004
@@ -134,7 +134,7 @@
                 x.freeze()
             return self.getpbc(x)
         elif x is None:
-            result = SomeNone()
+            return self.getpbc(None)
         else:
             result = SomeObject()
         result.const = x
@@ -148,7 +148,7 @@
         except KeyError:
             result = SomePBC({x: True}) # pre-built inst
             clsdef = self.getclassdef(new_or_old_class(x))
-            for attr in x.__dict__:
+            for attr in getattr(x, '__dict__', {}):
                 clsdef.add_source_for_attribute(attr, x)
             self.pbccache[x] = result
             return result
@@ -469,7 +469,11 @@
     def about_attribute(self, name):
         for cdef in self.getmro():
             if name in cdef.attrs:
-                return cdef.attrs[name].s_value
+                s_result = cdef.attrs[name].s_value
+                if s_result != SomeImpossibleValue():
+                    return s_result
+                else:
+                    return None
         return None
 
 

Modified: pypy/trunk/src/pypy/annotation/model.py
==============================================================================
--- pypy/trunk/src/pypy/annotation/model.py	(original)
+++ pypy/trunk/src/pypy/annotation/model.py	Wed Nov 24 20:48:54 2004
@@ -77,12 +77,6 @@
     del set_caused_by_merge
 
 
-class SomeNone(SomeObject):
-    "Stands for None."
-    knowntype = type(None)
-    const = None
-
-
 class SomeInteger(SomeObject):
     "Stands for an object which is known to be an integer."
     knowntype = int

Modified: pypy/trunk/src/pypy/translator/annrpython.py
==============================================================================
--- pypy/trunk/src/pypy/translator/annrpython.py	(original)
+++ pypy/trunk/src/pypy/translator/annrpython.py	Wed Nov 24 20:48:54 2004
@@ -226,7 +226,7 @@
             if graph.hasonlyexceptionreturns(): 
                 # XXX for functions with exceptions what to 
                 #     do anyway? 
-                return annmodel.SomeNone() 
+                return self.bookkeeper.immutablevalue(None)
             return annmodel.SomeImpossibleValue()
 
     def reflowfromposition(self, position_key):

Modified: pypy/trunk/src/pypy/translator/genc.py
==============================================================================
--- pypy/trunk/src/pypy/translator/genc.py	(original)
+++ pypy/trunk/src/pypy/translator/genc.py	Wed Nov 24 20:48:54 2004
@@ -241,8 +241,7 @@
             else:
                 return "probably"   # True
         classdef = ann.getuserclasses().get(pbc.__class__)
-        if (classdef and classdef.about_attribute(attr) not in [
-                                None, annmodel.SomeImpossibleValue()]):
+        if classdef and classdef.about_attribute(attr) is not None:
             return True
         return False
 

Modified: pypy/trunk/src/pypy/translator/genpyrex.py
==============================================================================
--- pypy/trunk/src/pypy/translator/genpyrex.py	(original)
+++ pypy/trunk/src/pypy/translator/genpyrex.py	Wed Nov 24 20:48:54 2004
@@ -256,7 +256,8 @@
     def _gettypename(self, vartype):
         if vartype in (int, bool):
             ctype = "int"
-        elif self.annotator and vartype in self.annotator.getuserclasses():
+        elif (self.annotator and vartype in self.annotator.getuserclasses()
+              and vartype.__module__ != '__builtin__'):
             ctype = self.getclassname(vartype)
         else:
             ctype = "object"

Modified: pypy/trunk/src/pypy/translator/test/test_annrpython.py
==============================================================================
--- pypy/trunk/src/pypy/translator/test/test_annrpython.py	(original)
+++ pypy/trunk/src/pypy/translator/test/test_annrpython.py	Wed Nov 24 20:48:54 2004
@@ -344,7 +344,7 @@
         s = a.build_types(snippet.is_and_knowntype, [bool])
         #a.simplify()
         #a.translator.view()
-        self.assert_(isinstance(s, annmodel.SomeNone))
+        self.assertEquals(s, a.bookkeeper.immutablevalue(None))
 
     def test_isinstance_and_knowntype_data(self): 
         a = RPythonAnnotator()



More information about the Pypy-commit mailing list