From: Dag Sverre Seljebotn Date: Sun, 19 Apr 2009 21:16:05 +0000 (+0200) Subject: Buffer: Cleanup. There are no unsigned floats. X-Git-Tag: 0.11.2.rc1~53 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=e84211b5c7a613e7bd959f023d398cce12912043;p=cython.git Buffer: Cleanup. There are no unsigned floats. --- diff --git a/Cython/Compiler/Buffer.py b/Cython/Compiler/Buffer.py index 2d72c56f..04a721c0 100644 --- a/Cython/Compiler/Buffer.py +++ b/Cython/Compiler/Buffer.py @@ -567,18 +567,21 @@ def create_typestringchecker(protocode, defcode, name, dtype): ('b', 'char'), ('h', 'short'), ('i', 'int'), ('l', 'long'), ('q', 'long long') ] + if dtype.signed == 0: + for char, against in types: + defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(%s) && (%s)-1 > 0); break;" % + (char.upper(), ctype, against, ctype)) + else: + for char, against in types: + defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(%s) && (%s)-1 < 0); break;" % + (char, ctype, against, ctype)) elif dtype.is_float: types = [('f', 'float'), ('d', 'double'), ('g', 'long double')] - else: - assert False - if dtype.signed == 0: for char, against in types: - defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(unsigned %s) && (%s)-1 > 0); break;" % - (char.upper(), ctype, against, ctype)) + defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(%s)); break;" % + (char, ctype, against)) else: - for char, against in types: - defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(%s) && (%s)-1 < 0); break;" % - (char, ctype, against, ctype)) + assert False defcode.putln("default: ok = 0;") defcode.putln("}") put_assert("ok", "expected %s, got %%s" % dtype) @@ -670,11 +673,6 @@ def get_getbuffer_code(dtype, code): __Pyx_BufferNdimError(buf, nd); goto fail; } - if (buf->itemsize != sizeof(%(dtype_cname)s)) { - PyErr_SetString(PyExc_ValueError, - "Item size of buffer does not match size of %(dtype)s."); - goto fail; - } if (!cast) { ts = buf->format; ts = __Pyx_ConsumeWhitespace(ts); @@ -690,6 +688,11 @@ def get_getbuffer_code(dtype, code): goto fail; } } + if (buf->itemsize != sizeof(%(dtype_cname)s)) { + PyErr_SetString(PyExc_ValueError, + "Item size of buffer does not match size of '%(dtype)s'"); + goto fail; + } if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; return 0; fail:; diff --git a/tests/run/bufaccess.pyx b/tests/run/bufaccess.pyx index 81d2238d..155e9e18 100644 --- a/tests/run/bufaccess.pyx +++ b/tests/run/bufaccess.pyx @@ -1033,7 +1033,7 @@ def buffer_cast_fails(object[char, cast=True] buf): >>> buffer_cast_fails(IntMockBuffer(None, [0])) Traceback (most recent call last): ... - ValueError: Attempted cast of buffer to datatype of different size. + ValueError: Item size of buffer does not match size of 'char' """ return buf[0]