Commit e84211b5 authored by Dag Sverre Seljebotn's avatar Dag Sverre Seljebotn

Buffer: Cleanup. There are no unsigned floats.

parent 5ba19402
...@@ -567,18 +567,21 @@ def create_typestringchecker(protocode, defcode, name, dtype): ...@@ -567,18 +567,21 @@ def create_typestringchecker(protocode, defcode, name, dtype):
('b', 'char'), ('h', 'short'), ('i', 'int'), ('b', 'char'), ('h', 'short'), ('i', 'int'),
('l', 'long'), ('q', 'long long') ('l', 'long'), ('q', 'long long')
] ]
elif dtype.is_float:
types = [('f', 'float'), ('d', 'double'), ('g', 'long double')]
else:
assert False
if dtype.signed == 0: if dtype.signed == 0:
for char, against in types: for char, against in types:
defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(unsigned %s) && (%s)-1 > 0); break;" % defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(%s) && (%s)-1 > 0); break;" %
(char.upper(), ctype, against, ctype)) (char.upper(), ctype, against, ctype))
else: else:
for char, against in types: for char, against in types:
defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(%s) && (%s)-1 < 0); break;" % defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(%s) && (%s)-1 < 0); break;" %
(char, ctype, against, ctype)) (char, ctype, against, ctype))
elif dtype.is_float:
types = [('f', 'float'), ('d', 'double'), ('g', 'long double')]
for char, against in types:
defcode.putln("case '%s': ok = (sizeof(%s) == sizeof(%s)); break;" %
(char, ctype, against))
else:
assert False
defcode.putln("default: ok = 0;") defcode.putln("default: ok = 0;")
defcode.putln("}") defcode.putln("}")
put_assert("ok", "expected %s, got %%s" % dtype) put_assert("ok", "expected %s, got %%s" % dtype)
...@@ -670,11 +673,6 @@ def get_getbuffer_code(dtype, code): ...@@ -670,11 +673,6 @@ def get_getbuffer_code(dtype, code):
__Pyx_BufferNdimError(buf, nd); __Pyx_BufferNdimError(buf, nd);
goto fail; 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) { if (!cast) {
ts = buf->format; ts = buf->format;
ts = __Pyx_ConsumeWhitespace(ts); ts = __Pyx_ConsumeWhitespace(ts);
...@@ -690,6 +688,11 @@ def get_getbuffer_code(dtype, code): ...@@ -690,6 +688,11 @@ def get_getbuffer_code(dtype, code):
goto fail; 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; if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
return 0; return 0;
fail:; fail:;
......
...@@ -1033,7 +1033,7 @@ def buffer_cast_fails(object[char, cast=True] buf): ...@@ -1033,7 +1033,7 @@ def buffer_cast_fails(object[char, cast=True] buf):
>>> buffer_cast_fails(IntMockBuffer(None, [0])) >>> buffer_cast_fails(IntMockBuffer(None, [0]))
Traceback (most recent call last): 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] return buf[0]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment