summaryrefslogtreecommitdiffstats
path: root/generic/tclExecute.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2018-03-30 21:10:04 (GMT)
committerdgp <dgp@users.sourceforge.net>2018-03-30 21:10:04 (GMT)
commitd525fa6f68f87682f9296333a802a3f02ff66f94 (patch)
tree78af641860471e22666d7868086c2cf33c0dc2c6 /generic/tclExecute.c
parentc12062248332a3208e7950b1775ab1b547ab60fa (diff)
parenta5d6e9657a73455c2b0163d64a0fd0938962849b (diff)
downloadtcl-d525fa6f68f87682f9296333a802a3f02ff66f94.zip
tcl-d525fa6f68f87682f9296333a802a3f02ff66f94.tar.gz
tcl-d525fa6f68f87682f9296333a802a3f02ff66f94.tar.bz2
merge 8.7
Diffstat (limited to 'generic/tclExecute.c')
-rw-r--r--generic/tclExecute.c31
1 files changed, 7 insertions, 24 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index ccee5a0..5a1966f 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -4940,11 +4940,11 @@ TEBCresume(
TclGetInt4AtPtr(pc+5)));
/*
- * Get the contents of the list, making sure that it really is a list
+ * Get the length of the list, making sure that it really is a list
* in the process.
*/
- if (TclListObjGetElements(interp, valuePtr, &objc, &objv) != TCL_OK) {
+ if (TclListObjLength(interp, valuePtr, &objc) != TCL_OK) {
TRACE_ERROR(interp);
goto gotError;
}
@@ -4978,7 +4978,10 @@ TEBCresume(
}
if ((toIdx == TCL_INDEX_BEFORE) || (fromIdx == TCL_INDEX_AFTER)) {
- goto emptyList;
+ emptyList:
+ objResultPtr = Tcl_NewObj();
+ TRACE_APPEND(("\"%.30s\"", O2S(objResultPtr)));
+ NEXT_INST_F(9, 1, 1);
}
toIdx = TclIndexDecode(toIdx, objc - 1);
if (toIdx < 0) {
@@ -4998,28 +5001,8 @@ TEBCresume(
}
fromIdx = TclIndexDecode(fromIdx, objc - 1);
- if (fromIdx < 0) {
- fromIdx = 0;
- }
- if (fromIdx <= toIdx) {
- /* Construct the subsquence list */
- /* unshared optimization */
- if (Tcl_IsShared(valuePtr)) {
- objResultPtr = Tcl_NewListObj(toIdx-fromIdx+1, objv+fromIdx);
- } else {
- if (toIdx != objc - 1) {
- Tcl_ListObjReplace(NULL, valuePtr, toIdx + 1, LIST_MAX,
- 0, NULL);
- }
- Tcl_ListObjReplace(NULL, valuePtr, 0, fromIdx, 0, NULL);
- TRACE_APPEND(("%.30s\n", O2S(valuePtr)));
- NEXT_INST_F(9, 0, 0);
- }
- } else {
- emptyList:
- TclNewObj(objResultPtr);
- }
+ objResultPtr = TclListObjRange(valuePtr, fromIdx, toIdx);
TRACE_APPEND(("\"%.30s\"", O2S(objResultPtr)));
NEXT_INST_F(9, 1, 1);