Fix slicing with negative indices
Negative indices that remained negative after adding the sequence length caused incorrect slicing. With the default scene for example: bpy.context.scene.objects[-4:2] Gave a different result to: tuple(bpy.context.scene.objects)[-4:2] Clamp indices above zero so loops that step forward works as intended.
This commit is contained in:
parent
4d7f10d614
commit
e862874606
Notes:
blender-bot
2023-02-13 14:30:28 +01:00
Referenced by issue #88449, Blender LTS: Maintenance Task 2.93
|
@ -3252,9 +3252,11 @@ static PyObject *bpy_bmelemseq_subscript(BPy_BMElemSeq *self, PyObject *key)
|
|||
const Py_ssize_t len = bpy_bmelemseq_length(self);
|
||||
if (start < 0) {
|
||||
start += len;
|
||||
CLAMP_MIN(start, 0);
|
||||
}
|
||||
if (stop < 0) {
|
||||
stop += len;
|
||||
CLAMP_MIN(stop, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -843,9 +843,11 @@ static PyObject *bpy_bmlayercollection_subscript(BPy_BMLayerCollection *self, Py
|
|||
const Py_ssize_t len = bpy_bmlayercollection_length(self);
|
||||
if (start < 0) {
|
||||
start += len;
|
||||
CLAMP_MIN(start, 0);
|
||||
}
|
||||
if (stop < 0) {
|
||||
stop += len;
|
||||
CLAMP_MIN(stop, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -282,9 +282,11 @@ static PyObject *bpy_bmeditselseq_subscript(BPy_BMEditSelSeq *self, PyObject *ke
|
|||
const Py_ssize_t len = bpy_bmeditselseq_length(self);
|
||||
if (start < 0) {
|
||||
start += len;
|
||||
CLAMP_MIN(start, 0);
|
||||
}
|
||||
if (stop < 0) {
|
||||
stop += len;
|
||||
CLAMP_MIN(stop, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2785,9 +2785,11 @@ static PyObject *pyrna_prop_collection_subscript(BPy_PropertyRNA *self, PyObject
|
|||
const Py_ssize_t len = (Py_ssize_t)RNA_property_collection_length(&self->ptr, self->prop);
|
||||
if (start < 0) {
|
||||
start += len;
|
||||
CLAMP_MIN(start, 0);
|
||||
}
|
||||
if (stop < 0) {
|
||||
stop += len;
|
||||
CLAMP_MIN(stop, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2915,9 +2917,11 @@ static int pyrna_prop_collection_ass_subscript(BPy_PropertyRNA *self,
|
|||
Py_ssize_t len = (Py_ssize_t)RNA_property_collection_length(&self->ptr, self->prop);
|
||||
if (start < 0) {
|
||||
start += len;
|
||||
CLAMP_MIN(start, 0);
|
||||
}
|
||||
if (stop < 0) {
|
||||
stop += len;
|
||||
CLAMP_MIN(stop, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue