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:
		@@ -3241,9 +3241,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);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -273,9 +273,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);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2825,9 +2825,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);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -2955,9 +2957,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);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user