Author: Ronan Lamy <[email protected]>
Branch: extregistry-refactor
Changeset: r62326:f5464a2d44dd
Date: 2013-03-13 02:10 +0000
http://bitbucket.org/pypy/pypy/changeset/f5464a2d44dd/
Log: kill genericcallable
diff --git a/rpython/annotator/binaryop.py b/rpython/annotator/binaryop.py
--- a/rpython/annotator/binaryop.py
+++ b/rpython/annotator/binaryop.py
@@ -18,7 +18,6 @@
from rpython.annotator.model import TLS
from rpython.annotator.model import read_can_only_throw
from rpython.annotator.model import add_knowntypedata, merge_knowntypedata
-from rpython.annotator.model import SomeGenericCallable
from rpython.annotator.bookkeeper import getbookkeeper
from rpython.flowspace.model import Variable, Constant
from rpython.rlib import rarithmetic
@@ -812,20 +811,6 @@
s.const = False # no common desc in the two sets
return s
-class __extend__(pairtype(SomeGenericCallable, SomePBC)):
- def union((gencall, pbc)):
- for desc in pbc.descriptions:
- unique_key = desc
- bk = desc.bookkeeper
- s_result = bk.emulate_pbc_call(unique_key, pbc, gencall.args_s)
- s_result = unionof(s_result, gencall.s_result)
- assert gencall.s_result.contains(s_result)
- return gencall
-
-class __extend__(pairtype(SomePBC, SomeGenericCallable)):
- def union((pbc, gencall)):
- return pair(gencall, pbc).union()
-
class __extend__(pairtype(SomeImpossibleValue, SomeObject)):
def union((imp1, obj2)):
return obj2
diff --git a/rpython/annotator/model.py b/rpython/annotator/model.py
--- a/rpython/annotator/model.py
+++ b/rpython/annotator/model.py
@@ -449,16 +449,6 @@
else:
return kt.__name__
-class SomeGenericCallable(SomeObject):
- """ Stands for external callable with known signature
- """
- def __init__(self, args, result):
- self.args_s = args
- self.s_result = result
-
- def can_be_None(self):
- return True
-
class SomeBuiltin(SomeObject):
"Stands for a built-in function or method with special-cased analysis."
knowntype = BuiltinFunctionType # == BuiltinMethodType
diff --git a/rpython/annotator/test/test_annrpython.py
b/rpython/annotator/test/test_annrpython.py
--- a/rpython/annotator/test/test_annrpython.py
+++ b/rpython/annotator/test/test_annrpython.py
@@ -3014,33 +3014,6 @@
s = a.build_types(fun, [])
assert s.const == 0
- def test_some_generic_function_call(self):
- def h(x):
- return int(x)
-
- def c(x):
- return int(x)
-
- def g(a, x):
- if x == -1:
- a = None
- if x < 0:
- if x == -1:
- a = h
- else:
- a = c
- x = x + .01
- return a(x)
-
- #def fun(x):
-
- a = self.RPythonAnnotator(policy=policy.AnnotatorPolicy())
- s = a.build_types(g, [annmodel.SomeGenericCallable(
- args=[annmodel.SomeFloat()], result=annmodel.SomeInteger()),
- annmodel.SomeFloat()])
- assert isinstance(s, annmodel.SomeInteger)
- assert not hasattr(s, 'const')
-
def test_compare_int_bool(self):
def fun(x):
return 50 < x
diff --git a/rpython/annotator/test/test_signature.py
b/rpython/annotator/test/test_signature.py
--- a/rpython/annotator/test/test_signature.py
+++ b/rpython/annotator/test/test_signature.py
@@ -6,10 +6,3 @@
assert _annotation_key({str:(str, [str])}) == ('dict', (str, (str,
('list', str))))
for i in ([[str]], [str], (int, int, {str: [str]})):
assert hash(_annotation_key(i))
-
-def test_genericcallable():
- py.test.skip("this two annotations should be equal - fix!")
- from rpython.rtyper.extfunc import genericcallable
- s1 = annotation([genericcallable([str], int)])
- s2 = annotation([genericcallable([str], int)])
- assert s1 == s2
diff --git a/rpython/annotator/unaryop.py b/rpython/annotator/unaryop.py
--- a/rpython/annotator/unaryop.py
+++ b/rpython/annotator/unaryop.py
@@ -12,7 +12,7 @@
SomeTypedAddressAccess, SomeAddress, SomeType, \
s_ImpossibleValue, s_Bool, s_None, \
unionof, missing_operation, add_knowntypedata, HarmlesslyBlocked, \
- SomeGenericCallable, SomeWeakRef, SomeUnicodeString
+ SomeWeakRef, SomeUnicodeString
from rpython.annotator.bookkeeper import getbookkeeper
from rpython.annotator import builtin
from rpython.annotator.binaryop import _clone ## XXX where to put this?
@@ -741,14 +741,6 @@
else:
return SomeObject() # len() on a pbc? no chance
-class __extend__(SomeGenericCallable):
- def call(self, args):
- bookkeeper = getbookkeeper()
- for arg, expected in zip(args.unpack()[0], self.args_s):
- assert expected.contains(arg)
-
- return self.s_result
-
# annotation of low-level types
from rpython.annotator.model import SomePtr, SomeLLADTMeth
from rpython.annotator.model import SomeOOInstance, SomeOOBoundMeth,
SomeOOStaticMeth
diff --git a/rpython/rtyper/extfunc.py b/rpython/rtyper/extfunc.py
--- a/rpython/rtyper/extfunc.py
+++ b/rpython/rtyper/extfunc.py
@@ -125,23 +125,6 @@
def _freeze_(self):
return True
-class genericcallable(object):
- """ A way to specify the callable annotation, but deferred until
- we have bookkeeper
- """
- def __init__(self, args, result=None):
- self.args = args
- self.result = result
-
-class _ext_callable(ExtRegistryEntry):
- _type_ = genericcallable
- # we defer a bit annotation here
-
- def compute_result_annotation(self):
- return annmodel.SomeGenericCallable([annotation(i, self.bookkeeper)
- for i in self.instance.args],
- annotation(self.instance.result, self.bookkeeper))
-
class ExtFuncEntry(ExtRegistryEntry):
safe_not_sandboxed = False
@@ -249,7 +232,7 @@
llfakeimpl, oofakeimpl: optional; if provided, they are called by the
llinterpreter
sandboxsafe: use True if the function performs no I/O (safe for --sandbox)
"""
-
+
if export_name is None:
export_name = function.__name__
diff --git a/rpython/rtyper/lltypesystem/rgeneric.py
b/rpython/rtyper/lltypesystem/rgeneric.py
deleted file mode 100644
--- a/rpython/rtyper/lltypesystem/rgeneric.py
+++ /dev/null
@@ -1,9 +0,0 @@
-
-from rpython.rtyper.rgeneric import AbstractGenericCallableRepr
-from rpython.rtyper.lltypesystem.lltype import Ptr, FuncType
-
-class GenericCallableRepr(AbstractGenericCallableRepr):
- def create_low_leveltype(self):
- l_args = [r_arg.lowleveltype for r_arg in self.args_r]
- l_retval = self.r_result.lowleveltype
- return Ptr(FuncType(l_args, l_retval))
diff --git a/rpython/rtyper/ootypesystem/rgeneric.py
b/rpython/rtyper/ootypesystem/rgeneric.py
deleted file mode 100644
--- a/rpython/rtyper/ootypesystem/rgeneric.py
+++ /dev/null
@@ -1,9 +0,0 @@
-
-from rpython.rtyper.rgeneric import AbstractGenericCallableRepr
-from rpython.rtyper.ootypesystem import ootype
-
-class GenericCallableRepr(AbstractGenericCallableRepr):
- def create_low_leveltype(self):
- l_args = [r_arg.lowleveltype for r_arg in self.args_r]
- l_retval = self.r_result.lowleveltype
- return ootype.StaticMethod(l_args, l_retval)
diff --git a/rpython/rtyper/rgeneric.py b/rpython/rtyper/rgeneric.py
deleted file mode 100644
--- a/rpython/rtyper/rgeneric.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from rpython.annotator import model as annmodel
-from rpython.rtyper.lltypesystem import lltype
-from rpython.rtyper.rmodel import Repr
-from rpython.rtyper.rpbc import AbstractFunctionsPBCRepr
-from rpython.tool.pairtype import pairtype
-
-
-class AbstractGenericCallableRepr(Repr):
- def __init__(self, rtyper, s_generic):
- self.rtyper = rtyper
- self.s_generic = s_generic
- self.args_r = [self.rtyper.getrepr(arg) for arg in s_generic.args_s]
- self.r_result = self.rtyper.getrepr(s_generic.s_result)
- self.lowleveltype = self.create_low_leveltype()
-
- def rtype_simple_call(self, hop):
- return self.call('simple_call', hop)
-
- def rtype_call_args(self, hop):
- return self.call('call_args', hop)
-
- def call(self, opname, hop):
- vlist = hop.inputargs(self, *self.args_r) +
[hop.inputconst(lltype.Void, None)]
- hop.exception_is_here()
- v_result = hop.genop('indirect_call', vlist, resulttype=self.r_result)
- return v_result
-
- def convert_const(self, value):
- bookkeeper = self.rtyper.annotator.bookkeeper
- if value is None:
- return self.rtyper.type_system.null_callable(self.lowleveltype)
- r_func = self.rtyper.getrepr(bookkeeper.immutablevalue(value))
- return r_func.get_unique_llfn().value
-
- def _setup_repr(self):
- for r in self.args_r:
- r.setup()
- self.r_result.setup()
-
-class __extend__(annmodel.SomeGenericCallable):
- def rtyper_makerepr(self, rtyper):
- return rtyper.type_system.rgeneric.GenericCallableRepr(rtyper, self)
-
- def rtyper_makekey(self):
- return self.__class__, tuple([i.rtyper_makekey() for i in
self.args_s]),\
- self.s_result.rtyper_makekey()
-
-class __extend__(pairtype(AbstractFunctionsPBCRepr,
AbstractGenericCallableRepr)):
- def convert_from_to((pbcrepr, gencallrepr), v, llops):
- if pbcrepr.lowleveltype is lltype.Void:
- r = gencallrepr.convert_const(pbcrepr.s_pbc.const)
- r.setup()
- return r
- if pbcrepr.lowleveltype == gencallrepr.lowleveltype:
- return v
- return NotImplemented
diff --git a/rpython/rtyper/rtyper.py b/rpython/rtyper/rtyper.py
--- a/rpython/rtyper/rtyper.py
+++ b/rpython/rtyper/rtyper.py
@@ -1013,7 +1013,6 @@
from rpython.rtyper import rstr, rdict, rlist, rbytearray
from rpython.rtyper import rclass, rbuiltin, rpbc
from rpython.rtyper import rptr
-from rpython.rtyper import rgeneric
from rpython.rtyper import rweakref
from rpython.rtyper import raddress # memory addresses
from rpython.rtyper.ootypesystem import rootype
diff --git a/rpython/rtyper/test/test_extfunc.py
b/rpython/rtyper/test/test_extfunc.py
--- a/rpython/rtyper/test/test_extfunc.py
+++ b/rpython/rtyper/test/test_extfunc.py
@@ -58,32 +58,6 @@
res = interpret(f, [])
assert res == 7
- def test_callback(self):
- """
- Verify annotation when a callback function is in the arguments list.
- """
- def d(y):
- return eval("y()")
-
- class DTestFuncEntry(ExtFuncEntry):
- _about_ = d
- name = 'd'
- signature_args = [annmodel.SomeGenericCallable(args=[], result=
-
annmodel.SomeFloat())]
- signature_result = annmodel.SomeFloat()
-
- def callback():
- return 2.5
-
- def f():
- return d(callback)
-
- policy = AnnotatorPolicy()
- a = RPythonAnnotator(policy=policy)
- s = a.build_types(f, [])
- assert isinstance(s, annmodel.SomeFloat)
- assert a.translator._graphof(callback)
-
def test_register_external_signature(self):
"""
Test the standard interface for external functions.
@@ -198,5 +172,5 @@
return os_execve(l)
py.test.raises(Exception, a.build_types, g, [[str]])
a.build_types(g, [[str0]]) # Does not raise
-
+
diff --git a/rpython/rtyper/test/test_rgeneric.py
b/rpython/rtyper/test/test_rgeneric.py
deleted file mode 100644
--- a/rpython/rtyper/test/test_rgeneric.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from rpython.rtyper.rtyper import RPythonTyper
-from rpython.annotator import model as annmodel
-from rpython.annotator.annrpython import RPythonAnnotator
-from rpython.annotator import policy
-from rpython.rtyper.test.test_llinterp import interpret, interpret_raises
-
-import py
-from rpython.rtyper.test.tool import LLRtypeMixin, OORtypeMixin
-
-class BaseRGenericTest:
- def test_some_generic_function_call(self):
- def h(x):
- return int(x)
-
- def c(x):
- return int(x) + 1
-
- def default(x):
- return int(x) + 3
-
- def g(a, x):
- if x == -1:
- a = None
- if x > 0:
- if x == 1:
- a = h
- else:
- a = c
- x = x + 0.01
- return a(x)
-
- def f(x):
- return g(default, x)
-
- g._annenforceargs_ = policy.Sig(annmodel.SomeGenericCallable(
- args=[annmodel.SomeFloat()], result=annmodel.SomeInteger()),
- float)
-
- assert interpret(f, [1.]) == 1
- assert interpret(f, [10.]) == 11
- assert interpret(f, [-3.]) == 0
-
-class TestLLRgeneric(BaseRGenericTest, LLRtypeMixin):
- pass
-
-class TestOORgeneric(BaseRGenericTest, OORtypeMixin):
- pass
diff --git a/rpython/rtyper/typesystem.py b/rpython/rtyper/typesystem.py
--- a/rpython/rtyper/typesystem.py
+++ b/rpython/rtyper/typesystem.py
@@ -21,7 +21,7 @@
except ImportError:
return None
if name in ('rclass', 'rpbc', 'rbuiltin', 'rtuple', 'rlist',
- 'rslice', 'rdict', 'rrange', 'rstr', 'rgeneric',
+ 'rslice', 'rdict', 'rrange', 'rstr',
'll_str', 'rbuilder', 'rvirtualizable2', 'rbytearray',
'exceptiondata'):
mod = load(name)
@@ -50,7 +50,7 @@
def getcallabletype(self, ARGS, RESTYPE):
cls = self.callable_trait[0]
return cls(ARGS, RESTYPE)
-
+
def getcallable(self, graph, getconcretetype=None):
"""Return callable given a Python function."""
if getconcretetype is None:
@@ -59,7 +59,7 @@
lloutput = getconcretetype(graph.getreturnvar())
typ, constr = self.callable_trait
-
+
FT = typ(llinputs, lloutput)
name = graph.name
if hasattr(graph, 'func') and callable(graph.func):
@@ -138,7 +138,7 @@
if robj1.lowleveltype != robj2.lowleveltype:
raise TyperError('is of instances of different pointer types: %r,
%r' % (
roriginal1, roriginal2))
-
+
v_list = hop.inputargs(robj1, robj2)
return hop.genop('ptr_eq', v_list, resulttype=lltype.Bool)
@@ -177,7 +177,7 @@
robj2.lowleveltype is not ootype.Class):
raise TyperError('is of instances of the non-instances: %r, %r' % (
roriginal1, roriginal2))
-
+
v_list = hop.inputargs(robj1, robj2)
return hop.genop('oois', v_list, resulttype=lltype.Bool)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit