Author: Philip Jenvey <pjen...@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) -@register_helper(annmodel.SomePtr(llmemory.GCREF)) +@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)) -@register_helper(annmodel.SomePtr(llmemory.GCREF)) +@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()) -@register_helper(annmodel.SomePtr(llmemory.GCREF)) +@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)) -@register_helper(annmodel.SomePtr(llmemory.GCREF)) +@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() -@register_helper(annmodel.SomePtr(llmemory.GCREF)) +@register_helper(SomePtr(llmemory.GCREF)) def box_clone(llbox): return _cast_to_gcref(_cast_to_box(llbox).clonebox()) -@register_helper(annmodel.SomePtr(llmemory.GCREF)) +@register_helper(SomePtr(llmemory.GCREF)) def box_constbox(llbox): return _cast_to_gcref(_cast_to_box(llbox).constbox()) -@register_helper(annmodel.SomePtr(llmemory.GCREF)) +@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) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit