diff options
| author | dgp <dgp@users.sourceforge.net> | 2018-04-25 15:00:53 (GMT) |
|---|---|---|
| committer | dgp <dgp@users.sourceforge.net> | 2018-04-25 15:00:53 (GMT) |
| commit | 13bcd282e3970b483fe00aa53e58ccf456d17bbc (patch) | |
| tree | 4dbc707399a6e334148c8704fdf5b5450c204d3a /generic/tclCmdIL.c | |
| parent | 26e714137a987c67af5a932fdaf7bd1138d97a2d (diff) | |
| parent | 859bcc9f868c96444e50001dac785edb3e889156 (diff) | |
| download | tcl-13bcd282e3970b483fe00aa53e58ccf456d17bbc.zip tcl-13bcd282e3970b483fe00aa53e58ccf456d17bbc.tar.gz tcl-13bcd282e3970b483fe00aa53e58ccf456d17bbc.tar.bz2 | |
merge 8.7
Diffstat (limited to 'generic/tclCmdIL.c')
| -rw-r--r-- | generic/tclCmdIL.c | 44 |
1 files changed, 1 insertions, 43 deletions
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index d628e80..3d058a4 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -2536,7 +2536,6 @@ Tcl_LrangeObjCmd( register Tcl_Obj *const objv[]) /* Argument objects. */ { - Tcl_Obj **elemPtrs; int listLen, first, last, result; if (objc != 4) { @@ -2554,55 +2553,14 @@ Tcl_LrangeObjCmd( if (result != TCL_OK) { return result; } - if (first < 0) { - first = 0; - } result = TclGetIntForIndexM(interp, objv[3], /*endValue*/ listLen - 1, &last); if (result != TCL_OK) { return result; } - if (last >= listLen) { - last = listLen - 1; - } - - if (first > last) { - /* - * Returning an empty list is easy. - */ - - return TCL_OK; - } - - result = TclListObjGetElements(interp, objv[1], &listLen, &elemPtrs); - if (result != TCL_OK) { - return result; - } - - if (Tcl_IsShared(objv[1]) || - ((ListRepPtr(objv[1])->refCount > 1))) { - Tcl_SetObjResult(interp, Tcl_NewListObj(last - first + 1, - &elemPtrs[first])); - } else { - /* - * In-place is possible. - */ - - if (last < (listLen - 1)) { - Tcl_ListObjReplace(interp, objv[1], last + 1, listLen - 1 - last, - 0, NULL); - } - - /* - * This one is not conditioned on (first > 0) in order to preserve the - * string-canonizing effect of [lrange 0 end]. - */ - - Tcl_ListObjReplace(interp, objv[1], 0, first, 0, NULL); - Tcl_SetObjResult(interp, objv[1]); - } + Tcl_SetObjResult(interp, TclListObjRange(objv[1], first, last)); return TCL_OK; } |
