[pypy-commit] pypy default: kill _make_none_union()

rlamy noreply at buildbot.pypy.org
Tue May 27 22:23:48 CEST 2014


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: 
Changeset: r71749:a57283e9fbd9
Date: 2014-05-27 21:23 +0100
http://bitbucket.org/pypy/pypy/changeset/a57283e9fbd9/

Log:	kill _make_none_union()

diff --git a/rpython/annotator/binaryop.py b/rpython/annotator/binaryop.py
--- a/rpython/annotator/binaryop.py
+++ b/rpython/annotator/binaryop.py
@@ -2,12 +2,11 @@
 Binary operations between SomeValues.
 """
 
-import py
 import operator
 from rpython.tool.pairtype import pair, pairtype
 from rpython.annotator.model import (
     SomeObject, SomeInteger, SomeBool, s_Bool, SomeString, SomeChar, SomeList,
-    SomeDict, SomeOrderedDict, SomeUnicodeCodePoint, SomeUnicodeString,
+    SomeDict, SomeUnicodeCodePoint, SomeUnicodeString,
     SomeTuple, SomeImpossibleValue, s_ImpossibleValue, SomeInstance,
     SomeBuiltinMethod, SomeIterator, SomePBC, SomeNone, SomeFloat, s_None,
     SomeByteArray, SomeWeakRef, SomeSingleFloat,
@@ -784,29 +783,6 @@
     def union((none, imp2)):
         return s_None
 
-def _make_none_union(classname, constructor_args='', glob=None):
-    if glob is None:
-        glob = globals()
-    loc = locals()
-    source = py.code.Source("""
-        class __extend__(pairtype(%(classname)s, SomeNone)):
-            def union((obj, none)):
-                return %(classname)s(%(constructor_args)s)
-
-        class __extend__(pairtype(SomeNone, %(classname)s)):
-            def union((none, obj)):
-                return %(classname)s(%(constructor_args)s)
-    """ % loc)
-    exec source.compile() in glob
-
-_make_none_union('SomeInstance',   'classdef=obj.classdef, can_be_None=True')
-_make_none_union('SomeString',      'no_nul=obj.no_nul, can_be_None=True')
-_make_none_union('SomeUnicodeString', 'can_be_None=True')
-_make_none_union('SomeList',         'obj.listdef')
-_make_none_union('SomeOrderedDict',          'obj.dictdef')
-_make_none_union('SomeDict',          'obj.dictdef')
-_make_none_union('SomeWeakRef',         'obj.classdef')
-
 
 class __extend__(pairtype(SomePBC, SomeObject)):
     def getitem((pbc, o)):
diff --git a/rpython/annotator/model.py b/rpython/annotator/model.py
--- a/rpython/annotator/model.py
+++ b/rpython/annotator/model.py
@@ -261,11 +261,17 @@
     "Stands for an object which is known to be a string."
     knowntype = str
 
+    def noneify(self):
+        return SomeString(can_be_None=True, no_nul=self.no_nul)
+
 
 class SomeUnicodeString(SomeStringOrUnicode):
     "Stands for an object which is known to be an unicode string"
     knowntype = unicode
 
+    def noneify(self):
+        return SomeUnicodeString(can_be_None=True, no_nul=self.no_nul)
+
 
 class SomeByteArray(SomeStringOrUnicode):
     immutable = False
@@ -316,6 +322,9 @@
     def can_be_none(self):
         return True
 
+    def noneify(self):
+        return SomeList(self.listdef)
+
 
 class SomeTuple(SomeObject):
     "Stands for a tuple of known length."
@@ -361,6 +370,9 @@
         else:
             return '{...%s...}' % (len(const),)
 
+    def noneify(self):
+        return type(self)(self.dictdef)
+
 class SomeOrderedDict(SomeDict):
     try:
         from collections import OrderedDict as knowntype
@@ -420,6 +432,9 @@
     def nonnoneify(self):
         return SomeInstance(self.classdef, can_be_None=False)
 
+    def noneify(self):
+        return SomeInstance(self.classdef, can_be_None=True)
+
 
 class SomePBC(SomeObject):
     """Stands for a global user instance, built prior to the analysis,
@@ -592,6 +607,9 @@
         # 'classdef' is None for known-to-be-dead weakrefs.
         self.classdef = classdef
 
+    def noneify(self):
+        return SomeWeakRef(self.classdef)
+
 # ____________________________________________________________
 
 
diff --git a/rpython/rlib/rstring.py b/rpython/rlib/rstring.py
--- a/rpython/rlib/rstring.py
+++ b/rpython/rlib/rstring.py
@@ -446,6 +446,9 @@
     def rtyper_makekey(self):
         return self.__class__,
 
+    def noneify(self):
+        return self
+
 
 class SomeUnicodeBuilder(SomeObject):
     def method_append(self, s_str):
@@ -483,6 +486,9 @@
     def rtyper_makekey(self):
         return self.__class__,
 
+    def noneify(self):
+        return self
+
 
 class BaseEntry(object):
     def compute_result_annotation(self, s_init_size=None):
@@ -506,29 +512,6 @@
     use_unicode = True
 
 
-class __extend__(pairtype(SomeStringBuilder, SomePBC)):
-    def union((sb, p)):
-        assert p.const is None
-        return SomeStringBuilder()
-
-
-class __extend__(pairtype(SomePBC, SomeStringBuilder)):
-    def union((p, sb)):
-        assert p.const is None
-        return SomeStringBuilder()
-
-
-class __extend__(pairtype(SomeUnicodeBuilder, SomePBC)):
-    def union((sb, p)):
-        assert p.const is None
-        return SomeUnicodeBuilder()
-
-
-class __extend__(pairtype(SomePBC, SomeUnicodeBuilder)):
-    def union((p, sb)):
-        assert p.const is None
-        return SomeUnicodeBuilder()
-
 #___________________________________________________________________
 # Support functions for SomeString.no_nul
 
diff --git a/rpython/rtyper/controllerentry.py b/rpython/rtyper/controllerentry.py
--- a/rpython/rtyper/controllerentry.py
+++ b/rpython/rtyper/controllerentry.py
@@ -1,6 +1,5 @@
 from rpython.annotator import model as annmodel
 from rpython.tool.pairtype import pairtype
-from rpython.annotator.binaryop import _make_none_union, SomeNone # SomeNone needed by _make_none_union
 from rpython.annotator.bookkeeper import getbookkeeper
 from rpython.rtyper.extregistry import ExtRegistryEntry
 from rpython.rtyper.annlowlevel import cachedtype
@@ -216,6 +215,9 @@
     def can_be_none(self):
         return self.controller.can_be_None
 
+    def noneify(self):
+        return SomeControlledInstance(self.s_real_obj, self.controller)
+
     def rtyper_makerepr(self, rtyper):
         from rpython.rtyper.rcontrollerentry import ControlledInstanceRepr
         return ControlledInstanceRepr(rtyper, self.s_real_obj, self.controller)
@@ -224,7 +226,6 @@
         real_key = self.s_real_obj.rtyper_makekey()
         return self.__class__, real_key, self.controller
 
-_make_none_union("SomeControlledInstance", "obj.s_real_obj, obj.controller", globals())
 
 class __extend__(SomeControlledInstance):
 


More information about the pypy-commit mailing list