Author: Ronan Lamy <ronan.l...@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): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit