[pypy-commit] pypy default: Prevent Repr from ever appearing in a calldesc

rlamy noreply at buildbot.pypy.org
Fri Mar 27 20:56:03 CET 2015


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: 
Changeset: r76603:6274aea11083
Date: 2015-03-27 19:56 +0000
http://bitbucket.org/pypy/pypy/changeset/6274aea11083/

Log:	Prevent Repr from ever appearing in a calldesc

diff --git a/rpython/annotator/description.py b/rpython/annotator/description.py
--- a/rpython/annotator/description.py
+++ b/rpython/annotator/description.py
@@ -404,6 +404,8 @@
                  name=None, basedesc=None, classdict=None,
                  specialize=None):
         super(ClassDesc, self).__init__(bookkeeper, cls)
+        if '__NOT_RPYTHON__' in cls.__dict__:
+            raise AnnotatorError('Bad class')
 
         if name is None:
             name = cls.__module__ + '.' + cls.__name__
diff --git a/rpython/rtyper/lltypesystem/rbuilder.py b/rpython/rtyper/lltypesystem/rbuilder.py
--- a/rpython/rtyper/lltypesystem/rbuilder.py
+++ b/rpython/rtyper/lltypesystem/rbuilder.py
@@ -401,18 +401,6 @@
     def empty(self):
         return nullptr(self.lowleveltype.TO)
 
-    @classmethod
-    def ll_new(cls, init_size):
-        # Clamp 'init_size' to be a value between 0 and 1280.
-        # Negative values are mapped to 1280.
-        init_size = intmask(min(r_uint(init_size), r_uint(1280)))
-        ll_builder = lltype.malloc(cls.lowleveltype.TO)
-        ll_builder.current_buf = ll_builder.mallocfn(init_size)
-        ll_builder.current_pos = 0
-        ll_builder.current_end = init_size
-        ll_builder.total_size = init_size
-        return ll_builder
-
     ll_append               = staticmethod(ll_append)
     ll_append_char          = staticmethod(ll_append_char)
     ll_append_slice         = staticmethod(ll_append_slice)
@@ -431,6 +419,19 @@
         lltype.Ptr(lltype.Array(lltype.Char, hints={'nolength': True}))
     )
 
+    @staticmethod
+    def ll_new(init_size):
+        # Clamp 'init_size' to be a value between 0 and 1280.
+        # Negative values are mapped to 1280.
+        init_size = intmask(min(r_uint(init_size), r_uint(1280)))
+        ll_builder = lltype.malloc(STRINGBUILDER)
+        ll_builder.current_buf = ll_builder.mallocfn(init_size)
+        ll_builder.current_pos = 0
+        ll_builder.current_end = init_size
+        ll_builder.total_size = init_size
+        return ll_builder
+
+
 class UnicodeBuilderRepr(BaseStringBuilderRepr):
     lowleveltype = lltype.Ptr(UNICODEBUILDER)
     basetp = UNICODE
@@ -440,5 +441,18 @@
         lltype.Ptr(lltype.Array(lltype.UniChar, hints={'nolength': True}))
     )
 
+    @staticmethod
+    def ll_new(init_size):
+        # Clamp 'init_size' to be a value between 0 and 1280.
+        # Negative values are mapped to 1280.
+        init_size = intmask(min(r_uint(init_size), r_uint(1280)))
+        ll_builder = lltype.malloc(UNICODEBUILDER)
+        ll_builder.current_buf = ll_builder.mallocfn(init_size)
+        ll_builder.current_pos = 0
+        ll_builder.current_end = init_size
+        ll_builder.total_size = init_size
+        return ll_builder
+
+
 unicodebuilder_repr = UnicodeBuilderRepr()
 stringbuilder_repr = StringBuilderRepr()
diff --git a/rpython/rtyper/rmodel.py b/rpython/rtyper/rmodel.py
--- a/rpython/rtyper/rmodel.py
+++ b/rpython/rtyper/rmodel.py
@@ -25,6 +25,7 @@
     """
     __metaclass__ = extendabletype
     _initialized = setupstate.NOTINITIALIZED
+    __NOT_RPYTHON__ = True
 
     def __repr__(self):
         return '<%s %s>' % (self.__class__.__name__, self.lowleveltype)


More information about the pypy-commit mailing list