[pypy-commit] pypy py3k: merge default
pjenvey
noreply at buildbot.pypy.org
Tue Jan 28 22:14:06 CET 2014
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r68981:15b720ac779c
Date: 2014-01-28 12:43 -0800
http://bitbucket.org/pypy/pypy/changeset/15b720ac779c/
Log: merge default
diff --git a/pypy/interpreter/error.py b/pypy/interpreter/error.py
--- a/pypy/interpreter/error.py
+++ b/pypy/interpreter/error.py
@@ -428,8 +428,8 @@
class OpErrFmtNoArgs(OperationError):
def __init__(self, w_type, value):
+ self._value = value
self.setup(w_type)
- self._value = value
def get_w_value(self, space):
w_value = self._w_value
diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -903,8 +903,8 @@
w_res = self.descr_mul(space, other)
assert isinstance(w_res, W_NDimArray)
return w_res.descr_sum(space, space.wrap(-1), out)
- dtype = interp_ufuncs.find_binop_result_dtype(space,
- self.get_dtype(), other.get_dtype())
+ dtype = interp_ufuncs.find_binop_result_dtype(space, self.get_dtype(),
+ other.get_dtype())
if self.get_size() < 1 and other.get_size() < 1:
# numpy compatability
return W_NDimArray.new_scalar(space, dtype, space.wrap(0))
@@ -912,25 +912,27 @@
out_shape, other_critical_dim = _match_dot_shapes(space, self, other)
if out:
matches = True
- if len(out.get_shape()) != len(out_shape):
+ if dtype != out.get_dtype():
+ matches = False
+ elif not out.implementation.order == "C":
+ matches = False
+ elif len(out.get_shape()) != len(out_shape):
matches = False
else:
for i in range(len(out_shape)):
if out.get_shape()[i] != out_shape[i]:
matches = False
break
- if dtype != out.get_dtype():
- matches = False
- if not out.implementation.order == "C":
- matches = False
if not matches:
raise OperationError(space.w_ValueError, space.wrap(
- 'output array is not acceptable (must have the right type, nr dimensions, and be a C-Array)'))
+ 'output array is not acceptable (must have the right type, '
+ 'nr dimensions, and be a C-Array)'))
w_res = out
+ w_res.fill(space, self.get_dtype().coerce(space, None))
else:
w_res = W_NDimArray.from_shape(space, out_shape, dtype, w_instance=self)
# This is the place to add fpypy and blas
- return loop.multidim_dot(space, self, other, w_res, dtype,
+ return loop.multidim_dot(space, self, other, w_res, dtype,
other_critical_dim)
def descr_mean(self, space, __args__):
diff --git a/pypy/module/micronumpy/interp_ufuncs.py b/pypy/module/micronumpy/interp_ufuncs.py
--- a/pypy/module/micronumpy/interp_ufuncs.py
+++ b/pypy/module/micronumpy/interp_ufuncs.py
@@ -254,6 +254,13 @@
return out
return res
+ def descr_outer(self, space, __args__):
+ return self._outer(space, __args__)
+
+ def _outer(self, space, __args__):
+ raise OperationError(space.w_ValueError,
+ space.wrap("outer product only supported for binary functions"))
+
class W_Ufunc1(W_Ufunc):
_immutable_fields_ = ["func", "bool_result"]
argcount = 1
@@ -432,6 +439,7 @@
nin = interp_attrproperty("argcount", cls=W_Ufunc),
reduce = interp2app(W_Ufunc.descr_reduce),
+ outer = interp2app(W_Ufunc.descr_outer),
)
diff --git a/pypy/module/micronumpy/loop.py b/pypy/module/micronumpy/loop.py
--- a/pypy/module/micronumpy/loop.py
+++ b/pypy/module/micronumpy/loop.py
@@ -146,8 +146,7 @@
while not obj_iter.done():
reduce_driver.jit_merge_point(shapelen=shapelen, func=func,
done_func=done_func,
- calc_dtype=calc_dtype,
- )
+ calc_dtype=calc_dtype)
rval = obj_iter.getitem().convert_to(space, calc_dtype)
if done_func is not None and done_func(calc_dtype, rval):
return rval
@@ -172,8 +171,7 @@
shapelen = len(obj.get_shape())
while not obj_iter.done():
reduce_cum_driver.jit_merge_point(shapelen=shapelen, func=func,
- dtype=calc_dtype,
- )
+ dtype=calc_dtype)
rval = obj_iter.getitem().convert_to(space, calc_dtype)
cur_value = func(calc_dtype, cur_value, rval)
out_iter.setitem(cur_value)
@@ -271,8 +269,7 @@
iter.next()
shapelen = len(arr.get_shape())
while not iter.done():
- arg_driver.jit_merge_point(shapelen=shapelen, dtype=dtype,
- )
+ arg_driver.jit_merge_point(shapelen=shapelen, dtype=dtype)
w_val = iter.getitem()
new_best = getattr(dtype.itemtype, op_name)(cur_best, w_val)
if dtype.itemtype.ne(new_best, cur_best):
@@ -311,6 +308,7 @@
if i != right_critical_dim]
right_skip = range(len(left_shape) - 1)
result_skip = [len(result.get_shape()) - (len(right_shape) > 1)]
+ assert result.get_dtype() == dtype
outi = result.create_dot_iter(broadcast_shape, result_skip)
lefti = left.create_dot_iter(broadcast_shape, left_skip)
righti = right.create_dot_iter(broadcast_shape, right_skip)
@@ -318,10 +316,10 @@
dot_driver.jit_merge_point(dtype=dtype)
lval = lefti.getitem().convert_to(space, dtype)
rval = righti.getitem().convert_to(space, dtype)
- outval = outi.getitem().convert_to(space, dtype)
+ outval = outi.getitem()
v = dtype.itemtype.mul(lval, rval)
- value = dtype.itemtype.add(v, outval).convert_to(space, dtype)
- outi.setitem(value)
+ v = dtype.itemtype.add(v, outval)
+ outi.setitem(v)
outi.next()
righti.next()
lefti.next()
@@ -652,8 +650,8 @@
out_iter = out.create_iter(shape)
while not arr_iter.done():
round_driver.jit_merge_point(shapelen=shapelen, dtype=dtype)
- w_v = dtype.itemtype.round(arr_iter.getitem().convert_to(space, dtype),
- decimals)
+ w_v = arr_iter.getitem().convert_to(space, dtype)
+ w_v = dtype.itemtype.round(w_v, decimals)
out_iter.setitem(w_v)
arr_iter.next()
out_iter.next()
diff --git a/pypy/module/micronumpy/test/test_arrayops.py b/pypy/module/micronumpy/test/test_arrayops.py
--- a/pypy/module/micronumpy/test/test_arrayops.py
+++ b/pypy/module/micronumpy/test/test_arrayops.py
@@ -56,6 +56,10 @@
b = arange(12).reshape(4, 3)
c = a.dot(b)
assert (c == [[ 42, 48, 54], [114, 136, 158], [186, 224, 262]]).all()
+ c = a.dot(b.astype(float))
+ assert (c == [[ 42, 48, 54], [114, 136, 158], [186, 224, 262]]).all()
+ c = a.astype(float).dot(b)
+ assert (c == [[ 42, 48, 54], [114, 136, 158], [186, 224, 262]]).all()
a = arange(24).reshape(2, 3, 4)
raises(ValueError, "a.dot(a)")
@@ -91,9 +95,11 @@
out = arange(9).reshape(3, 3)
c = dot(a, b, out=out)
assert (c == out).all()
- out = arange(9,dtype=float).reshape(3, 3)
+ assert (c == [[42, 48, 54], [114, 136, 158], [186, 224, 262]]).all()
+ out = arange(9, dtype=float).reshape(3, 3)
exc = raises(ValueError, dot, a, b, out)
- assert exc.value[0].find('not acceptable') > 0
+ assert exc.value[0] == ('output array is not acceptable (must have the '
+ 'right type, nr dimensions, and be a C-Array)')
def test_choose_basic(self):
from numpypy import array
diff --git a/pypy/module/micronumpy/test/test_ufuncs.py b/pypy/module/micronumpy/test/test_ufuncs.py
--- a/pypy/module/micronumpy/test/test_ufuncs.py
+++ b/pypy/module/micronumpy/test/test_ufuncs.py
@@ -1052,3 +1052,9 @@
np.array([0, -1, -3, -6, -10])).all()
assert (np.divide.accumulate(todivide) ==
np.array([2., 4., 16.])).all()
+
+ def test_outer(self):
+ import numpy as np
+ from numpypy import absolute
+ exc = raises(ValueError, np.absolute.outer, [-1, -2])
+ assert exc.value[0] == 'outer product only supported for binary functions'
diff --git a/rpython/annotator/binaryop.py b/rpython/annotator/binaryop.py
--- a/rpython/annotator/binaryop.py
+++ b/rpython/annotator/binaryop.py
@@ -829,7 +829,7 @@
# ____________________________________________________________
# annotation of low-level types
-from rpython.annotator.model import SomePtr
+from rpython.rtyper.llannotation import SomePtr
from rpython.annotator.model import ll_to_annotation, annotation_to_lltype
class __extend__(pairtype(SomePtr, SomePtr)):
diff --git a/rpython/annotator/bookkeeper.py b/rpython/annotator/bookkeeper.py
--- a/rpython/annotator/bookkeeper.py
+++ b/rpython/annotator/bookkeeper.py
@@ -8,12 +8,12 @@
from rpython.flowspace.model import Constant
from rpython.annotator.model import (SomeOrderedDict,
- SomeString, SomeChar, SomeFloat, SomePtr, unionof, SomeInstance, SomeDict,
+ SomeString, SomeChar, SomeFloat, unionof, SomeInstance, SomeDict,
SomeBuiltin, SomePBC, SomeInteger, TLS, SomeUnicodeCodePoint,
- s_None, s_ImpossibleValue, SomeLLADTMeth, SomeBool, SomeTuple,
+ s_None, s_ImpossibleValue, SomeBool, SomeTuple,
SomeImpossibleValue, SomeUnicodeString, SomeList, HarmlesslyBlocked,
- SomeWeakRef, lltype_to_annotation, SomeType, SomeByteArray, SomeConstantType)
-from rpython.rtyper.llannotation import SomeAddress
+ SomeWeakRef, lltype_to_annotation, SomeByteArray, SomeConstantType)
+from rpython.rtyper.llannotation import SomeAddress, SomePtr, SomeLLADTMeth
from rpython.annotator.classdef import InstanceSource, ClassDef
from rpython.annotator.listdef import ListDef, ListItem
from rpython.annotator.dictdef import DictDef
diff --git a/rpython/annotator/builtin.py b/rpython/annotator/builtin.py
--- a/rpython/annotator/builtin.py
+++ b/rpython/annotator/builtin.py
@@ -357,7 +357,7 @@
@analyzer_for(rpython.rtyper.lltypesystem.llmemory.cast_ptr_to_adr)
def llmemory_cast_ptr_to_adr(s):
- from rpython.annotator.model import SomeInteriorPtr
+ from rpython.rtyper.llannotation import SomeInteriorPtr
assert not isinstance(s, SomeInteriorPtr)
return SomeAddress()
@@ -390,7 +390,7 @@
# annotation of low-level types
-from rpython.annotator.model import SomePtr
+from rpython.rtyper.llannotation import SomePtr
from rpython.rtyper.lltypesystem import lltype
@analyzer_for(lltype.malloc)
diff --git a/rpython/annotator/description.py b/rpython/annotator/description.py
--- a/rpython/annotator/description.py
+++ b/rpython/annotator/description.py
@@ -624,7 +624,7 @@
except ValueError:
pass
else:
- from rpython.annotator.model import SomePtr
+ from rpython.rtyper.llannotation import SomePtr
assert not isinstance(s_arg, SomePtr)
else:
# call the constructor
diff --git a/rpython/annotator/model.py b/rpython/annotator/model.py
--- a/rpython/annotator/model.py
+++ b/rpython/annotator/model.py
@@ -574,36 +574,8 @@
from rpython.rtyper.lltypesystem import lltype
-class SomePtr(SomeObject):
- knowntype = lltype._ptr
- immutable = True
- def __init__(self, ll_ptrtype):
- assert isinstance(ll_ptrtype, lltype.Ptr)
- self.ll_ptrtype = ll_ptrtype
-
- def can_be_none(self):
- return False
-
-
-class SomeInteriorPtr(SomePtr):
- def __init__(self, ll_ptrtype):
- assert isinstance(ll_ptrtype, lltype.InteriorPtr)
- self.ll_ptrtype = ll_ptrtype
-
-
-class SomeLLADTMeth(SomeObject):
- immutable = True
-
- def __init__(self, ll_ptrtype, func):
- self.ll_ptrtype = ll_ptrtype
- self.func = func
-
- def can_be_none(self):
- return False
-
-
-from rpython.rtyper.llannotation import SomeAddress
+from rpython.rtyper.llannotation import SomeAddress, SomePtr, SomeInteriorPtr
from rpython.rtyper.lltypesystem import llmemory
annotation_to_ll_map = [
diff --git a/rpython/annotator/test/test_model.py b/rpython/annotator/test/test_model.py
--- a/rpython/annotator/test/test_model.py
+++ b/rpython/annotator/test/test_model.py
@@ -1,6 +1,7 @@
import py
from rpython.annotator.model import *
+from rpython.rtyper.llannotation import SomePtr
from rpython.annotator.listdef import ListDef
from rpython.translator.translator import TranslationContext
diff --git a/rpython/annotator/unaryop.py b/rpython/annotator/unaryop.py
--- a/rpython/annotator/unaryop.py
+++ b/rpython/annotator/unaryop.py
@@ -759,7 +759,7 @@
raise AnnotatorError("Cannot call len on a pbc")
# annotation of low-level types
-from rpython.annotator.model import SomePtr, SomeLLADTMeth
+from rpython.rtyper.llannotation import SomePtr, SomeLLADTMeth
from rpython.annotator.model import ll_to_annotation, lltype_to_annotation, annotation_to_lltype
class __extend__(SomePtr):
diff --git a/rpython/memory/gctransform/framework.py b/rpython/memory/gctransform/framework.py
--- a/rpython/memory/gctransform/framework.py
+++ b/rpython/memory/gctransform/framework.py
@@ -1,5 +1,5 @@
from rpython.annotator import model as annmodel
-from rpython.rtyper.llannotation import SomeAddress
+from rpython.rtyper.llannotation import SomeAddress, SomePtr
from rpython.rlib import rgc
from rpython.rtyper import rmodel, annlowlevel
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi, llgroup
@@ -268,7 +268,7 @@
from rpython.memory.gc.base import ARRAY_TYPEID_MAP
from rpython.memory.gc import inspector
- s_gcref = annmodel.SomePtr(llmemory.GCREF)
+ s_gcref = SomePtr(llmemory.GCREF)
gcdata = self.gcdata
translator = self.translator
@@ -314,7 +314,7 @@
if hasattr(GCClass, 'heap_stats'):
self.heap_stats_ptr = getfn(GCClass.heap_stats.im_func,
- [s_gc], annmodel.SomePtr(lltype.Ptr(ARRAY_TYPEID_MAP)),
+ [s_gc], SomePtr(lltype.Ptr(ARRAY_TYPEID_MAP)),
minimal_transform=False)
self.get_member_index_ptr = getfn(
GCClass.get_member_index.im_func,
@@ -448,8 +448,7 @@
minimal_transform=False)
self.get_typeids_z_ptr = getfn(inspector.get_typeids_z,
[s_gc],
- annmodel.SomePtr(
- lltype.Ptr(rgc.ARRAY_OF_CHAR)),
+ SomePtr(lltype.Ptr(rgc.ARRAY_OF_CHAR)),
minimal_transform=False)
self.set_max_heap_size_ptr = getfn(GCClass.set_max_heap_size.im_func,
diff --git a/rpython/memory/gctransform/shadowstack.py b/rpython/memory/gctransform/shadowstack.py
--- a/rpython/memory/gctransform/shadowstack.py
+++ b/rpython/memory/gctransform/shadowstack.py
@@ -1,4 +1,5 @@
from rpython.annotator import model as annmodel
+from rpython.rtyper.llannotation import SomePtr
from rpython.rlib.debug import ll_assert
from rpython.rlib.nonconst import NonConstant
from rpython.rlib import rgc
@@ -242,7 +243,7 @@
def gc_start_fresh_new_state():
shadow_stack_pool.start_fresh_new_state()
- s_gcref = annmodel.SomePtr(llmemory.GCREF)
+ s_gcref = SomePtr(llmemory.GCREF)
s_addr = SomeAddress()
self.gc_shadowstackref_new_ptr = getfn(gc_shadowstackref_new,
[], s_gcref,
diff --git a/rpython/memory/test/test_transformed_gc.py b/rpython/memory/test/test_transformed_gc.py
--- a/rpython/memory/test/test_transformed_gc.py
+++ b/rpython/memory/test/test_transformed_gc.py
@@ -3,6 +3,7 @@
from rpython.translator.c import gc
from rpython.annotator import model as annmodel
+from rpython.rtyper.llannotation import SomePtr
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi, llgroup
from rpython.memory.gctransform import framework, shadowstack
from rpython.rtyper.lltypesystem.lloperation import llop, void
@@ -98,7 +99,7 @@
from rpython.translator.c.genc import CStandaloneBuilder
- s_args = annmodel.SomePtr(lltype.Ptr(ARGS))
+ s_args = SomePtr(lltype.Ptr(ARGS))
t = rtype(entrypoint, [s_args], gcname=cls.gcname,
taggedpointers=cls.taggedpointers)
@@ -827,7 +828,7 @@
from rpython.translator.translator import graphof
from rpython.flowspace.model import Constant
from rpython.rtyper.lltypesystem import rffi
- layoutbuilder = cls.ensure_layoutbuilder(translator)
+ layoutbuilder = cls.ensure_layoutbuilder(translator)
type_id = layoutbuilder.get_type_id(P)
#
# now fix the do_malloc_fixedsize_clear in the graph of g
@@ -1116,7 +1117,7 @@
def test_adr_of_nursery(self):
run = self.runner("adr_of_nursery")
- res = run([])
+ res = run([])
class TestGenerationalNoFullCollectGC(GCTest):
# test that nursery is doing its job and that no full collection
diff --git a/rpython/rlib/jit_hooks.py b/rpython/rlib/jit_hooks.py
--- a/rpython/rlib/jit_hooks.py
+++ b/rpython/rlib/jit_hooks.py
@@ -1,4 +1,5 @@
from rpython.annotator import model as annmodel
+from rpython.rtyper.llannotation import SomePtr
from rpython.rlib.objectmodel import specialize
from rpython.rtyper.annlowlevel import (cast_instance_to_base_ptr,
cast_base_ptr_to_instance, llstr)
@@ -50,7 +51,7 @@
def emptyval():
return lltype.nullptr(llmemory.GCREF.TO)
- at register_helper(annmodel.SomePtr(llmemory.GCREF))
+ at register_helper(SomePtr(llmemory.GCREF))
def resop_new(no, llargs, llres):
from rpython.jit.metainterp.history import ResOperation
@@ -61,7 +62,7 @@
res = None
return _cast_to_gcref(ResOperation(no, args, res))
- at register_helper(annmodel.SomePtr(llmemory.GCREF))
+ at register_helper(SomePtr(llmemory.GCREF))
def boxint_new(no):
from rpython.jit.metainterp.history import BoxInt
return _cast_to_gcref(BoxInt(no))
@@ -74,7 +75,7 @@
def resop_getopname(llop):
return llstr(_cast_to_resop(llop).getopname())
- at register_helper(annmodel.SomePtr(llmemory.GCREF))
+ at register_helper(SomePtr(llmemory.GCREF))
def resop_getarg(llop, no):
return _cast_to_gcref(_cast_to_resop(llop).getarg(no))
@@ -82,7 +83,7 @@
def resop_setarg(llop, no, llbox):
_cast_to_resop(llop).setarg(no, _cast_to_box(llbox))
- at register_helper(annmodel.SomePtr(llmemory.GCREF))
+ at register_helper(SomePtr(llmemory.GCREF))
def resop_getresult(llop):
return _cast_to_gcref(_cast_to_resop(llop).result)
@@ -94,15 +95,15 @@
def box_getint(llbox):
return _cast_to_box(llbox).getint()
- at register_helper(annmodel.SomePtr(llmemory.GCREF))
+ at register_helper(SomePtr(llmemory.GCREF))
def box_clone(llbox):
return _cast_to_gcref(_cast_to_box(llbox).clonebox())
- at register_helper(annmodel.SomePtr(llmemory.GCREF))
+ at register_helper(SomePtr(llmemory.GCREF))
def box_constbox(llbox):
return _cast_to_gcref(_cast_to_box(llbox).constbox())
- at register_helper(annmodel.SomePtr(llmemory.GCREF))
+ at register_helper(SomePtr(llmemory.GCREF))
def box_nonconstbox(llbox):
return _cast_to_gcref(_cast_to_box(llbox).nonconstbox())
diff --git a/rpython/rlib/rgc.py b/rpython/rlib/rgc.py
--- a/rpython/rlib/rgc.py
+++ b/rpython/rlib/rgc.py
@@ -94,9 +94,9 @@
_about_ = _heap_stats
def compute_result_annotation(self):
- from rpython.annotator import model as annmodel
+ from rpython.rtyper.llannotation import SomePtr
from rpython.memory.gc.base import ARRAY_TYPEID_MAP
- return annmodel.SomePtr(lltype.Ptr(ARRAY_TYPEID_MAP))
+ return SomePtr(lltype.Ptr(ARRAY_TYPEID_MAP))
def specialize_call(self, hop):
hop.exception_is_here()
@@ -452,8 +452,9 @@
global _cache_s_list_of_gcrefs
if _cache_s_list_of_gcrefs is None:
from rpython.annotator import model as annmodel
+ from rpython.rtyper.llannotation import SomePtr
from rpython.annotator.listdef import ListDef
- s_gcref = annmodel.SomePtr(llmemory.GCREF)
+ s_gcref = SomePtr(llmemory.GCREF)
_cache_s_list_of_gcrefs = annmodel.SomeList(
ListDef(None, s_gcref, mutated=True, resized=False))
return _cache_s_list_of_gcrefs
@@ -468,15 +469,17 @@
class Entry(ExtRegistryEntry):
_about_ = get_rpy_referents
+
def compute_result_annotation(self, s_gcref):
- from rpython.annotator import model as annmodel
- assert annmodel.SomePtr(llmemory.GCREF).contains(s_gcref)
+ from rpython.rtyper.llannotation import SomePtr
+ assert SomePtr(llmemory.GCREF).contains(s_gcref)
return s_list_of_gcrefs()
+
def specialize_call(self, hop):
vlist = hop.inputargs(hop.args_r[0])
hop.exception_cannot_occur()
return hop.genop('gc_get_rpy_referents', vlist,
- resulttype = hop.r_result)
+ resulttype=hop.r_result)
class Entry(ExtRegistryEntry):
_about_ = get_rpy_memory_usage
@@ -522,10 +525,11 @@
class Entry(ExtRegistryEntry):
_about_ = _get_llcls_from_cls
def compute_result_annotation(self, s_Class):
- from rpython.annotator import model as annmodel
+ from rpython.rtyper.llannotation import SomePtr
from rpython.rtyper.lltypesystem import rclass
assert s_Class.is_constant()
- return annmodel.SomePtr(rclass.CLASSTYPE)
+ return SomePtr(rclass.CLASSTYPE)
+
def specialize_call(self, hop):
from rpython.rtyper.rclass import getclassrepr
from rpython.flowspace.model import Constant
@@ -550,9 +554,11 @@
class Entry(ExtRegistryEntry):
_about_ = get_typeids_z
+
def compute_result_annotation(self):
- from rpython.annotator.model import SomePtr
+ from rpython.rtyper.llannotation import SomePtr
return SomePtr(lltype.Ptr(ARRAY_OF_CHAR))
+
def specialize_call(self, hop):
hop.exception_is_here()
return hop.genop('gc_typeids_z', [], resulttype = hop.r_result)
diff --git a/rpython/rlib/rstring.py b/rpython/rlib/rstring.py
--- a/rpython/rlib/rstring.py
+++ b/rpython/rlib/rstring.py
@@ -3,7 +3,8 @@
import sys
from rpython.annotator.model import (SomeObject, SomeString, s_None, SomeChar,
- SomeInteger, SomeUnicodeCodePoint, SomeUnicodeString, SomePtr, SomePBC)
+ SomeInteger, SomeUnicodeCodePoint, SomeUnicodeString, SomePBC)
+from rpython.rtyper.llannotation import SomePtr
from rpython.rlib import jit
from rpython.rlib.objectmodel import newlist_hint, specialize, enforceargs
from rpython.rlib.rarithmetic import ovfcheck
diff --git a/rpython/rlib/test/test_signature.py b/rpython/rlib/test/test_signature.py
--- a/rpython/rlib/test/test_signature.py
+++ b/rpython/rlib/test/test_signature.py
@@ -2,6 +2,7 @@
from rpython.rlib.signature import signature, finishsigs, FieldSpec, ClassSpec
from rpython.rlib import types
from rpython.annotator import model
+from rpython.rtyper.llannotation import SomePtr
from rpython.annotator.signature import SignatureError
from rpython.translator.translator import TranslationContext, graphof
from rpython.rtyper.lltypesystem import rstr
@@ -127,7 +128,7 @@
def f(buf):
pass
argtype = getsig(f, policy=policy)[0]
- assert isinstance(argtype, model.SomePtr)
+ assert isinstance(argtype, SomePtr)
assert argtype.ll_ptrtype.TO == rstr.STR
def g():
diff --git a/rpython/rtyper/annlowlevel.py b/rpython/rtyper/annlowlevel.py
--- a/rpython/rtyper/annlowlevel.py
+++ b/rpython/rtyper/annlowlevel.py
@@ -7,6 +7,7 @@
from rpython.annotator.policy import AnnotatorPolicy
from rpython.annotator.signature import Sig
from rpython.annotator.specialize import flatten_star_args
+from rpython.rtyper.llannotation import SomePtr
from rpython.rtyper.normalizecalls import perform_normalizations
from rpython.rtyper.lltypesystem import lltype, llmemory
from rpython.flowspace.model import Constant
@@ -359,7 +360,7 @@
key = (llhelper, s_callable.const)
s_res = self.bookkeeper.emulate_pbc_call(key, s_callable, args_s)
assert annmodel.lltype_to_annotation(FUNC.RESULT).contains(s_res)
- return annmodel.SomePtr(F)
+ return SomePtr(F)
def specialize_call(self, hop):
hop.exception_cannot_occur()
@@ -476,7 +477,7 @@
def compute_result_annotation(self, s_PTR, s_object):
assert s_PTR.is_constant()
if isinstance(s_PTR.const, lltype.Ptr):
- return annmodel.SomePtr(s_PTR.const)
+ return SomePtr(s_PTR.const)
else:
assert False
@@ -535,14 +536,14 @@
def placeholder_sigarg(s):
if s == "self":
def expand(s_self, *args_s):
- assert isinstance(s_self, annmodel.SomePtr)
+ assert isinstance(s_self, SomePtr)
return s_self
elif s == "SELF":
raise NotImplementedError
else:
assert s.islower()
def expand(s_self, *args_s):
- assert isinstance(s_self, annmodel.SomePtr)
+ assert isinstance(s_self, SomePtr)
return getattr(s_self.ll_ptrtype.TO, s.upper())
return expand
diff --git a/rpython/rtyper/exceptiondata.py b/rpython/rtyper/exceptiondata.py
--- a/rpython/rtyper/exceptiondata.py
+++ b/rpython/rtyper/exceptiondata.py
@@ -1,4 +1,5 @@
from rpython.annotator import model as annmodel
+from rpython.rtyper.llannotation import SomePtr
from rpython.rlib import rstackovf
from rpython.rtyper import rclass
from rpython.rtyper.lltypesystem.rclass import (ll_issubclass, ll_type,
@@ -72,12 +73,12 @@
def make_exception_matcher(self, rtyper):
# ll_exception_matcher(real_exception_vtable, match_exception_vtable)
- s_typeptr = annmodel.SomePtr(self.lltype_of_exception_type)
+ s_typeptr = SomePtr(self.lltype_of_exception_type)
helper_fn = rtyper.annotate_helper_fn(ll_issubclass, [s_typeptr, s_typeptr])
return helper_fn
def make_type_of_exc_inst(self, rtyper):
# ll_type_of_exc_inst(exception_instance) -> exception_vtable
- s_excinst = annmodel.SomePtr(self.lltype_of_exception_value)
+ s_excinst = SomePtr(self.lltype_of_exception_value)
helper_fn = rtyper.annotate_helper_fn(ll_type, [s_excinst])
return helper_fn
diff --git a/rpython/rtyper/llannotation.py b/rpython/rtyper/llannotation.py
--- a/rpython/rtyper/llannotation.py
+++ b/rpython/rtyper/llannotation.py
@@ -2,6 +2,7 @@
Code for annotating low-level thingies.
"""
from rpython.annotator.model import SomeObject
+from rpython.rtyper.lltypesystem import lltype
class SomeAddress(SomeObject):
immutable = True
@@ -24,3 +25,30 @@
def can_be_none(self):
return False
+class SomePtr(SomeObject):
+ knowntype = lltype._ptr
+ immutable = True
+
+ def __init__(self, ll_ptrtype):
+ assert isinstance(ll_ptrtype, lltype.Ptr)
+ self.ll_ptrtype = ll_ptrtype
+
+ def can_be_none(self):
+ return False
+
+
+class SomeInteriorPtr(SomePtr):
+ def __init__(self, ll_ptrtype):
+ assert isinstance(ll_ptrtype, lltype.InteriorPtr)
+ self.ll_ptrtype = ll_ptrtype
+
+
+class SomeLLADTMeth(SomeObject):
+ immutable = True
+
+ def __init__(self, ll_ptrtype, func):
+ self.ll_ptrtype = ll_ptrtype
+ self.func = func
+
+ def can_be_none(self):
+ return False
diff --git a/rpython/rtyper/lltypesystem/ll2ctypes.py b/rpython/rtyper/lltypesystem/ll2ctypes.py
--- a/rpython/rtyper/lltypesystem/ll2ctypes.py
+++ b/rpython/rtyper/lltypesystem/ll2ctypes.py
@@ -22,6 +22,7 @@
from rpython.rlib.rarithmetic import r_singlefloat, r_longfloat, base_int, intmask
from rpython.rlib.rarithmetic import is_emulated_long, maxint
from rpython.annotator import model as annmodel
+from rpython.rtyper.llannotation import SomePtr
from rpython.rtyper.llinterp import LLInterpreter, LLException
from rpython.rtyper.lltypesystem.rclass import OBJECT, OBJECT_VTABLE
from rpython.rtyper import raddress
@@ -161,7 +162,7 @@
llmemory.GCREF: ctypes.c_void_p,
llmemory.WeakRef: ctypes.c_void_p, # XXX
})
-
+
if '__int128_t' in rffi.TYPES:
_ctypes_cache[rffi.__INT128_T] = ctypes.c_longlong # XXX: Not right at all. But for some reason, It started by while doing JIT compile after a merge with default. Can't extend ctypes, because thats a python standard, right?
@@ -1339,7 +1340,7 @@
def compute_result_annotation(self, s_ptr, s_n):
assert isinstance(s_n, annmodel.SomeInteger)
- assert isinstance(s_ptr, annmodel.SomePtr)
+ assert isinstance(s_ptr, SomePtr)
typecheck_ptradd(s_ptr.ll_ptrtype)
return annmodel.lltype_to_annotation(s_ptr.ll_ptrtype)
diff --git a/rpython/rtyper/lltypesystem/rffi.py b/rpython/rtyper/lltypesystem/rffi.py
--- a/rpython/rtyper/lltypesystem/rffi.py
+++ b/rpython/rtyper/lltypesystem/rffi.py
@@ -1,5 +1,6 @@
import py
from rpython.annotator import model as annmodel
+from rpython.rtyper.llannotation import SomePtr
from rpython.rtyper.lltypesystem import lltype, rstr
from rpython.rtyper.lltypesystem import ll2ctypes
from rpython.rtyper.lltypesystem.llmemory import cast_ptr_to_adr
@@ -52,7 +53,7 @@
class _IsLLPtrEntry(ExtRegistryEntry):
_about_ = _isllptr
def compute_result_annotation(self, s_p):
- result = isinstance(s_p, annmodel.SomePtr)
+ result = isinstance(s_p, SomePtr)
return self.bookkeeper.immutablevalue(result)
def specialize_call(self, hop):
hop.exception_cannot_occur()
@@ -996,7 +997,7 @@
TP = s_type.const
if not isinstance(TP, lltype.Struct):
raise TypeError("make called with %s instead of Struct as first argument" % TP)
- return annmodel.SomePtr(lltype.Ptr(TP))
+ return SomePtr(lltype.Ptr(TP))
def specialize_call(self, hop, **fields):
assert hop.args_s[0].is_constant()
diff --git a/rpython/rtyper/rptr.py b/rpython/rtyper/rptr.py
--- a/rpython/rtyper/rptr.py
+++ b/rpython/rtyper/rptr.py
@@ -1,4 +1,6 @@
from rpython.annotator import model as annmodel
+from rpython.rtyper.llannotation import (
+ SomePtr, SomeInteriorPtr, SomeLLADTMeth)
from rpython.flowspace import model as flowmodel
from rpython.rlib.rarithmetic import r_uint
from rpython.rtyper.error import TyperError
@@ -7,7 +9,7 @@
from rpython.tool.pairtype import pairtype
-class __extend__(annmodel.SomePtr):
+class __extend__(SomePtr):
def rtyper_makerepr(self, rtyper):
return PtrRepr(self.ll_ptrtype)
@@ -15,7 +17,7 @@
return self.__class__, self.ll_ptrtype
-class __extend__(annmodel.SomeInteriorPtr):
+class __extend__(SomeInteriorPtr):
def rtyper_makerepr(self, rtyper):
return InteriorPtrRepr(self.ll_ptrtype)
@@ -38,7 +40,7 @@
def rtype_getattr(self, hop):
attr = hop.args_s[1].const
- if isinstance(hop.s_result, annmodel.SomeLLADTMeth):
+ if isinstance(hop.s_result, SomeLLADTMeth):
return hop.inputarg(hop.r_result, arg=0)
try:
self.lowleveltype._example()._lookup_adtmeth(attr)
@@ -179,7 +181,7 @@
# ________________________________________________________________
# ADT methods
-class __extend__(annmodel.SomeLLADTMeth):
+class __extend__(SomeLLADTMeth):
def rtyper_makerepr(self, rtyper):
return LLADTMethRepr(self, rtyper)
def rtyper_makekey(self):
@@ -270,7 +272,7 @@
def rtype_getattr(self, hop):
attr = hop.args_s[1].const
- if isinstance(hop.s_result, annmodel.SomeLLADTMeth):
+ if isinstance(hop.s_result, SomeLLADTMeth):
return hop.inputarg(hop.r_result, arg=0)
FIELD_TYPE = getattr(self.resulttype.TO, attr)
if isinstance(FIELD_TYPE, lltype.ContainerType):
diff --git a/rpython/rtyper/rtyper.py b/rpython/rtyper/rtyper.py
--- a/rpython/rtyper/rtyper.py
+++ b/rpython/rtyper/rtyper.py
@@ -16,6 +16,7 @@
import py
from rpython.annotator import model as annmodel, unaryop, binaryop
+from rpython.rtyper.llannotation import SomePtr
from rpython.annotator.annrpython import FAIL
from rpython.flowspace.model import Variable, Constant, SpaceOperation, c_last_exception
from rpython.rtyper.annlowlevel import annotate_lowlevel_helper, LowLevelAnnotatorPolicy
@@ -639,10 +640,10 @@
self.call_all_setups() # compute ForwardReferences now
if ARG_GCSTRUCT is None:
ARG_GCSTRUCT = GCSTRUCT
- args_s = [annmodel.SomePtr(Ptr(ARG_GCSTRUCT))]
+ args_s = [SomePtr(Ptr(ARG_GCSTRUCT))]
graph = self.annotate_helper(func, args_s)
s = self.annotator.binding(graph.getreturnvar())
- if (not isinstance(s, annmodel.SomePtr) or
+ if (not isinstance(s, SomePtr) or
s.ll_ptrtype != Ptr(RuntimeTypeInfo)):
raise TyperError("runtime type info function %r returns %r, "
"excepted Ptr(RuntimeTypeInfo)" % (func, s))
diff --git a/rpython/rtyper/test/test_llann.py b/rpython/rtyper/test/test_llann.py
--- a/rpython/rtyper/test/test_llann.py
+++ b/rpython/rtyper/test/test_llann.py
@@ -1,6 +1,7 @@
import py
from rpython.annotator import model as annmodel
+from rpython.rtyper.llannotation import SomePtr
from rpython.conftest import option
from rpython.rtyper.annlowlevel import (annotate_lowlevel_helper,
MixLevelHelperAnnotator, PseudoHighLevelCallable, llhelper,
@@ -100,8 +101,8 @@
p2 = p1.sub1
p3 = cast_pointer(PS1, p2)
return p3
- s = self.annotate(llf, [annmodel.SomePtr(PS1)])
- assert isinstance(s, annmodel.SomePtr)
+ s = self.annotate(llf, [SomePtr(PS1)])
+ assert isinstance(s, SomePtr)
assert s.ll_ptrtype == PS1
def test_cast_simple_widening_from_gc(self):
@@ -114,7 +115,7 @@
p3 = cast_pointer(PS1, p2)
return p3
s = self.annotate(llf, [])
- assert isinstance(s, annmodel.SomePtr)
+ assert isinstance(s, SomePtr)
assert s.ll_ptrtype == PS1
def test_cast_pointer(self):
@@ -152,7 +153,7 @@
PF = Ptr(F)
def llf(p):
return p(0)
- s = self.annotate(llf, [annmodel.SomePtr(PF)])
+ s = self.annotate(llf, [SomePtr(PF)])
assert s.knowntype == int
@@ -344,7 +345,7 @@
def llf():
return getRuntimeTypeInfo(S)
s = self.annotate(llf, [])
- assert isinstance(s, annmodel.SomePtr)
+ assert isinstance(s, SomePtr)
assert s.ll_ptrtype == Ptr(RuntimeTypeInfo)
assert s.const == getRuntimeTypeInfo(S)
@@ -352,8 +353,8 @@
S = GcStruct('s', ('x', Signed), rtti=True)
def llf(p):
return runtime_type_info(p)
- s = self.annotate(llf, [annmodel.SomePtr(Ptr(S))])
- assert isinstance(s, annmodel.SomePtr)
+ s = self.annotate(llf, [SomePtr(Ptr(S))])
+ assert isinstance(s, SomePtr)
assert s.ll_ptrtype == Ptr(RuntimeTypeInfo)
def test_cast_primitive(self):
diff --git a/rpython/rtyper/test/test_rpbc.py b/rpython/rtyper/test/test_rpbc.py
--- a/rpython/rtyper/test/test_rpbc.py
+++ b/rpython/rtyper/test/test_rpbc.py
@@ -3,6 +3,7 @@
from rpython.annotator import policy, specialize
from rpython.rtyper.lltypesystem.lltype import typeOf
from rpython.rtyper.test.tool import BaseRtypingTest
+from rpython.rtyper.llannotation import SomePtr
class MyBase:
@@ -1817,7 +1818,8 @@
s_ll_f = annmodel.lltype_to_annotation(r_f.lowleveltype)
A_repr = rclass.getinstancerepr(rt, a.bookkeeper.getdesc(A).
getuniqueclassdef())
- ll_h_graph = annlowlevel.annotate_lowlevel_helper(a, ll_h, [s_R, s_ll_f, annmodel.SomePtr(A_repr.lowleveltype)])
+ ll_h_graph = annlowlevel.annotate_lowlevel_helper(
+ a, ll_h, [s_R, s_ll_f, SomePtr(A_repr.lowleveltype)])
s = a.binding(ll_h_graph.getreturnvar())
assert s.ll_ptrtype == A_repr.lowleveltype
rt.specialize_more_blocks()
@@ -1873,7 +1875,8 @@
s_ll_f = annmodel.lltype_to_annotation(r_f.lowleveltype)
A_repr = rclass.getinstancerepr(rt, a.bookkeeper.getdesc(A).
getuniqueclassdef())
- ll_h_graph = annlowlevel.annotate_lowlevel_helper(a, ll_h, [s_R, s_ll_f, annmodel.SomePtr(A_repr.lowleveltype)])
+ ll_h_graph = annlowlevel.annotate_lowlevel_helper(
+ a, ll_h, [s_R, s_ll_f, SomePtr(A_repr.lowleveltype)])
s = a.binding(ll_h_graph.getreturnvar())
assert s.ll_ptrtype == A_repr.lowleveltype
rt.specialize_more_blocks()
@@ -1929,7 +1932,8 @@
A_repr = rclass.getinstancerepr(rt, a.bookkeeper.getdesc(A).
getuniqueclassdef())
- ll_h_graph = annlowlevel.annotate_lowlevel_helper(a, ll_h, [s_R, s_ll_f, annmodel.SomePtr(A_repr.lowleveltype)])
+ ll_h_graph = annlowlevel.annotate_lowlevel_helper(
+ a, ll_h, [s_R, s_ll_f, SomePtr(A_repr.lowleveltype)])
s = a.binding(ll_h_graph.getreturnvar())
assert s.ll_ptrtype == A_repr.lowleveltype
rt.specialize_more_blocks()
diff --git a/rpython/rtyper/test/test_rptr.py b/rpython/rtyper/test/test_rptr.py
--- a/rpython/rtyper/test/test_rptr.py
+++ b/rpython/rtyper/test/test_rptr.py
@@ -3,6 +3,7 @@
import py
from rpython.annotator import model as annmodel
+from rpython.rtyper.llannotation import SomePtr
from rpython.annotator.annrpython import RPythonAnnotator
from rpython.rlib.rarithmetic import is_valid_int
from rpython.rtyper.annlowlevel import annotate_lowlevel_helper, LowLevelAnnotatorPolicy
@@ -31,11 +32,11 @@
PS2 = lltype.Ptr(S2)
def lldown(p):
return lltype.cast_pointer(PS, p)
- s, t = ll_rtype(lldown, [annmodel.SomePtr(PS2)])
+ s, t = ll_rtype(lldown, [SomePtr(PS2)])
assert s.ll_ptrtype == PS
def llup(p):
return lltype.cast_pointer(PS2, p)
- s, t = ll_rtype(llup, [annmodel.SomePtr(PS)])
+ s, t = ll_rtype(llup, [SomePtr(PS)])
assert s.ll_ptrtype == PS2
def test_runtime_type_info():
@@ -45,8 +46,8 @@
lltype.runtime_type_info(p) == lltype.getRuntimeTypeInfo(S))
assert ll_example(lltype.malloc(S)) == (lltype.getRuntimeTypeInfo(S), True)
- s, t = ll_rtype(ll_example, [annmodel.SomePtr(lltype.Ptr(S))])
- assert s == annmodel.SomeTuple([annmodel.SomePtr(lltype.Ptr(lltype.RuntimeTypeInfo)),
+ s, t = ll_rtype(ll_example, [SomePtr(lltype.Ptr(S))])
+ assert s == annmodel.SomeTuple([SomePtr(lltype.Ptr(lltype.RuntimeTypeInfo)),
annmodel.SomeBool()])
from rpython.rtyper.test.test_llinterp import interpret, gengraph
diff --git a/rpython/rtyper/test/test_rvirtualizable.py b/rpython/rtyper/test/test_rvirtualizable.py
--- a/rpython/rtyper/test/test_rvirtualizable.py
+++ b/rpython/rtyper/test/test_rvirtualizable.py
@@ -1,4 +1,5 @@
import py
+from rpython.rtyper.llannotation import SomePtr
from rpython.rtyper.lltypesystem import lltype, llmemory
from rpython.rtyper.test.tool import BaseRtypingTest
from rpython.rtyper.rvirtualizable import replace_force_virtualizable_with_call
@@ -153,7 +154,7 @@
raise ValueError
annhelper = MixLevelHelperAnnotator(rtyper)
if self.type_system == 'lltype':
- s_vinst = annmodel.SomePtr(v_inst_ll_type)
+ s_vinst = SomePtr(v_inst_ll_type)
else:
s_vinst = annmodel.SomeOOInstance(v_inst_ll_type)
funcptr = annhelper.delayedfunction(mycall, [s_vinst], annmodel.s_None)
More information about the pypy-commit
mailing list