Lines Matching defs:start
109 /* start, stop, and step are python objects with None indicating no
114 PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
119 if (start == NULL) {
120 start = Py_None;
142 Py_INCREF(start);
143 obj->start = start;
154 PyObject *start, *end, *slice;
155 start = PyLong_FromSsize_t(istart);
156 if (!start)
160 Py_DECREF(start);
164 slice = PySlice_New(start, end, NULL);
165 Py_DECREF(start);
172 Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
182 if (r->start == Py_None) {
183 *start = *step < 0 ? length-1 : 0;
185 if (!PyLong_Check(r->start)) return -1;
186 *start = PyLong_AsSsize_t(r->start);
187 if (*start < 0) *start += length;
197 if (*start >= length) return -1;
204 Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
231 if (r->start == Py_None) {
232 *start = *step < 0 ? PY_SSIZE_T_MAX : 0;
235 if (!_PyEval_SliceIndex(r->start, start)) return -1;
250 Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)
257 if (*start < 0) {
258 *start += length;
259 if (*start < 0) {
260 *start = (step < 0) ? -1 : 0;
263 else if (*start >= length) {
264 *start = (step < 0) ? length - 1 : length;
278 if (*stop < *start) {
279 return (*start - *stop - 1) / (-step) + 1;
283 if (*start < *stop) {
284 return (*stop - *start - 1) / step + 1;
294 Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
297 if (PySlice_Unpack(_r, start, stop, step) < 0)
299 *slicelength = PySlice_AdjustIndices(length, start, stop, *step);
306 PyObject *start, *stop, *step;
308 start = stop = step = NULL;
313 if (!PyArg_UnpackTuple(args, "slice", 1, 3, &start, &stop, &step))
316 /* This swapping of stop and start is to maintain similarity with
319 stop = start;
320 start = NULL;
322 return PySlice_New(start, stop, step);
327 slice(start, stop[, step])\n\
337 Py_DECREF(r->start);
350 return PyUnicode_FromFormat("slice(%R, %R, %R)", r->start, r->stop, r->step);
354 {"start", T_OBJECT, offsetof(PySliceObject, start), READONLY},
386 PyObject *start=NULL, *stop=NULL, *step=NULL;
410 /* Find lower and upper bounds for start and stop. */
427 /* Compute start. */
428 if (self->start == Py_None) {
429 start = step_is_negative ? upper : lower;
430 Py_INCREF(start);
433 start = evaluate_slice_index(self->start);
434 if (start == NULL)
437 if (_PyLong_Sign(start) < 0) {
438 /* start += length */
439 PyObject *tmp = PyNumber_Add(start, length);
440 Py_DECREF(start);
441 start = tmp;
442 if (start == NULL)
445 cmp_result = PyObject_RichCompareBool(start, lower, Py_LT);
450 Py_DECREF(start);
451 start = lower;
455 cmp_result = PyObject_RichCompareBool(start, upper, Py_GT);
460 Py_DECREF(start);
461 start = upper;
505 *start_ptr = start;
514 Py_XDECREF(start);
527 PyObject *start, *stop, *step;
543 error = _PySlice_GetLongIndices(self, length, &start, &stop, &step);
548 return Py_BuildValue("(NNN)", start, stop, step);
552 "S.indices(len) -> (start, stop, stride)\n\
554 Assuming a sequence of length len, calculate the start and stop\n\
562 return Py_BuildValue("O(OOO)", Py_TYPE(self), self->start, self->stop, self->step);
601 ((PySliceObject *)v)->start,
609 ((PySliceObject *)w)->start,
626 Py_VISIT(v->start);