[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