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):
('b', 'char'), ('h', 'short'), ('i', 'int'),
('l', 'long'), ('q', 'long long')
]
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;" %
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')]
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("}")
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:;
......
......@@ -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]
......
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