pack_into(writable_buf, None, test_string)
with self.assertRaises(TypeError):
pack_into(writable_buf, 0.0, test_string)
- with self.assertRaises((IndexError, OverflowError)):
+ with self.assertRaises(OverflowError):
pack_into(writable_buf, 2**1000, test_string)
- with self.assertRaises((IndexError, OverflowError)):
+ with self.assertRaises(OverflowError):
pack_into(writable_buf, -2**1000, test_string)
def test_pack_into(self):
Struct.pack_into
buffer: Py_buffer(accept={rwbuffer})
- offset as offset_obj: object
+ offset: Py_ssize_t
/
*values: array
static PyObject *
Struct_pack_into_impl(PyStructObject *self, Py_buffer *buffer,
- PyObject *offset_obj, PyObject * const *values,
+ Py_ssize_t offset, PyObject * const *values,
Py_ssize_t values_length)
-/*[clinic end generated code: output=b0c2ef496135dad3 input=d0de9b9f138c782d]*/
+/*[clinic end generated code: output=aa9d9a93f5f8f77b input=9d842a368ee14245]*/
{
- Py_ssize_t offset;
_structmodulestate *state = get_struct_state_structinst(self);
ENSURE_STRUCT_IS_READY(self);
return NULL;
}
- /* Extract the offset from the first argument */
- offset = PyNumber_AsSsize_t(offset_obj, PyExc_IndexError);
- if (offset == -1 && PyErr_Occurred()) {
- return NULL;
- }
-
/* Support negative offsets. */
if (offset < 0) {
/* Check that negative offset is low enough to fit data */
format as s_object: cache_struct
buffer: Py_buffer(accept={rwbuffer})
- offset as offset_obj: object
+ offset: Py_ssize_t
/
*values: array
static PyObject *
pack_into_impl(PyObject *module, PyStructObject *s_object, Py_buffer *buffer,
- PyObject *offset_obj, PyObject * const *values,
+ Py_ssize_t offset, PyObject * const *values,
Py_ssize_t values_length)
-/*[clinic end generated code: output=148ef659a490eec3 input=3c5fe5bd3b6fd396]*/
+/*[clinic end generated code: output=e8bf7d422b2088ef input=086867c0f5d8a8e4]*/
{
- return Struct_pack_into_impl(s_object, buffer, offset_obj,
+ return Struct_pack_into_impl(s_object, buffer, offset,
values, values_length);
}
static PyObject *
Struct_pack_into_impl(PyStructObject *self, Py_buffer *buffer,
- PyObject *offset_obj, PyObject * const *values,
+ Py_ssize_t offset, PyObject * const *values,
Py_ssize_t values_length);
static PyObject *
{
PyObject *return_value = NULL;
Py_buffer buffer = {NULL, NULL};
- PyObject *offset_obj;
+ Py_ssize_t offset;
PyObject * const *values;
Py_ssize_t values_length;
_PyArg_BadArgument("pack_into", "argument 1", "read-write bytes-like object", args[0]);
goto exit;
}
- offset_obj = args[1];
+ {
+ Py_ssize_t ival = -1;
+ PyObject *iobj = _PyNumber_Index(args[1]);
+ if (iobj != NULL) {
+ ival = PyLong_AsSsize_t(iobj);
+ Py_DECREF(iobj);
+ }
+ if (ival == -1 && PyErr_Occurred()) {
+ goto exit;
+ }
+ offset = ival;
+ }
values = args + 2;
values_length = nargs - 2;
- return_value = Struct_pack_into_impl((PyStructObject *)self, &buffer, offset_obj, values, values_length);
+ return_value = Struct_pack_into_impl((PyStructObject *)self, &buffer, offset, values, values_length);
exit:
/* Cleanup for buffer */
static PyObject *
pack_into_impl(PyObject *module, PyStructObject *s_object, Py_buffer *buffer,
- PyObject *offset_obj, PyObject * const *values,
+ Py_ssize_t offset, PyObject * const *values,
Py_ssize_t values_length);
static PyObject *
PyObject *return_value = NULL;
PyStructObject *s_object = NULL;
Py_buffer buffer = {NULL, NULL};
- PyObject *offset_obj;
+ Py_ssize_t offset;
PyObject * const *values;
Py_ssize_t values_length;
_PyArg_BadArgument("pack_into", "argument 2", "read-write bytes-like object", args[1]);
goto exit;
}
- offset_obj = args[2];
+ {
+ Py_ssize_t ival = -1;
+ PyObject *iobj = _PyNumber_Index(args[2]);
+ if (iobj != NULL) {
+ ival = PyLong_AsSsize_t(iobj);
+ Py_DECREF(iobj);
+ }
+ if (ival == -1 && PyErr_Occurred()) {
+ goto exit;
+ }
+ offset = ival;
+ }
values = args + 3;
values_length = nargs - 3;
- return_value = pack_into_impl(module, s_object, &buffer, offset_obj, values, values_length);
+ return_value = pack_into_impl(module, s_object, &buffer, offset, values, values_length);
exit:
/* Cleanup for s_object */
return return_value;
}
-/*[clinic end generated code: output=dc4f86c77ab3b1c9 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=09ee4ac45b7e709b input=a9049054013a1b77]*/