Author: Amaury Forgeot d'Arc <[email protected]>
Branch: const-correctness
Changeset: r66935:66c9a93ea930
Date: 2013-09-13 00:09 +0200
http://bitbucket.org/pypy/pypy/changeset/66c9a93ea930/
Log: More fixes, seems to translate
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
@@ -930,6 +930,7 @@
def descr_setstate(self, space, w_state):
from rpython.rtyper.lltypesystem import rffi
+ from rpython.rlib.rawstorage import RAW_STORAGE_PTR
shape = space.getitem(w_state, space.wrap(1))
dtype = space.getitem(w_state, space.wrap(2))
@@ -937,9 +938,11 @@
isfortran = space.getitem(w_state, space.wrap(3))
storage = space.getitem(w_state, space.wrap(4))
+ raw_storage = rffi.str2charp(space.str_w(storage),
track_allocation=False)
+ raw_storage = rffi.cast(RAW_STORAGE_PTR, raw_storage)
self.implementation = W_NDimArray.from_shape_and_storage(space,
[space.int_w(i) for i in space.listview(shape)],
- rffi.str2charp(space.str_w(storage), track_allocation=False),
+ raw_storage,
dtype, owning=True).implementation
def descr___array_finalize__(self, space, w_obj):
diff --git a/rpython/rtyper/lltypesystem/lltype.py
b/rpython/rtyper/lltypesystem/lltype.py
--- a/rpython/rtyper/lltypesystem/lltype.py
+++ b/rpython/rtyper/lltypesystem/lltype.py
@@ -104,6 +104,8 @@
return not (self == other)
def _is_convertible_from(self, other):
+ # Sometimes this function is called with something completely
+ # different, for example the string "??".
if self == other:
return True
return remove_const(self) == other
diff --git a/rpython/rtyper/rmodel.py b/rpython/rtyper/rmodel.py
--- a/rpython/rtyper/rmodel.py
+++ b/rpython/rtyper/rmodel.py
@@ -125,7 +125,7 @@
realtype = typeOf(value)
except (AssertionError, AttributeError, TypeError):
realtype = '???'
- if realtype != lltype.remove_const(self.lowleveltype):
+ if not lltype.isConvertibleFrom(self.lowleveltype, realtype):
raise TyperError("convert_const(self = %r, value = %r)" % (
self, value))
return value
diff --git a/rpython/rtyper/rptr.py b/rpython/rtyper/rptr.py
--- a/rpython/rtyper/rptr.py
+++ b/rpython/rtyper/rptr.py
@@ -112,7 +112,7 @@
class __extend__(pairtype(PtrRepr, PtrRepr)):
def convert_from_to((r_ptr1, r_ptr2), v, llop):
- assert r_ptr1.lowleveltype == r_ptr2.lowleveltype
+ assert lltype.isConvertibleFrom(r_ptr2.lowleveltype,
r_ptr1.lowleveltype)
return v
diff --git a/rpython/rtyper/rtyper.py b/rpython/rtyper/rtyper.py
--- a/rpython/rtyper/rtyper.py
+++ b/rpython/rtyper/rtyper.py
@@ -23,7 +23,7 @@
from rpython.rtyper.exceptiondata import ExceptionData
from rpython.rtyper.lltypesystem.lltype import (Signed, Void, LowLevelType,
Ptr, ContainerType, FuncType, functionptr, typeOf, RuntimeTypeInfo,
- attachRuntimeTypeInfo, Primitive)
+ attachRuntimeTypeInfo, Primitive, isConvertibleFrom)
from rpython.rtyper.rmodel import Repr, inputconst, BrokenReprTyperError
from rpython.rtyper.typesystem import LowLevelTypeSystem
from rpython.rtyper.normalizecalls import perform_normalizations
@@ -861,7 +861,7 @@
if v is NotImplemented:
raise TyperError("don't know how to convert from %r to %r" %
(r_from, r_to))
- if v.concretetype != r_to.lowleveltype:
+ if not isConvertibleFrom(r_to.lowleveltype, v.concretetype):
raise TyperError("bug in conversion from %r to %r: "
"returned a %r" % (r_from, r_to,
v.concretetype))
diff --git a/rpython/rtyper/tool/rffi_platform.py
b/rpython/rtyper/tool/rffi_platform.py
--- a/rpython/rtyper/tool/rffi_platform.py
+++ b/rpython/rtyper/tool/rffi_platform.py
@@ -489,7 +489,7 @@
def prepare_code(self):
yield '#ifdef %s' % self.macro
yield 'int i;'
- yield 'char *p = %s;' % self.name
+ yield 'const char *p = %s;' % self.name
yield 'dump("defined", 1);'
yield 'for (i = 0; p[i] != 0; i++ ) {'
yield ' printf("value_%d: %d\\n", i, (int)(unsigned char)p[i]);'
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit