summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2016-10-28 14:45:54 (GMT)
committerdgp <dgp@users.sourceforge.net>2016-10-28 14:45:54 (GMT)
commit335716b81d99c7476e68979fe48b20b0f2bfeeee (patch)
treea08e364e1ff2d0f435cca83bd3a9d4e100f35a5d
parenta81f6b904b3b6777ed2da4e55b669b7e4770dcc9 (diff)
downloadtcl-335716b81d99c7476e68979fe48b20b0f2bfeeee.zip
tcl-335716b81d99c7476e68979fe48b20b0f2bfeeee.tar.gz
tcl-335716b81d99c7476e68979fe48b20b0f2bfeeee.tar.bz2
Add obvious optimizations to [join] implementation.
-rw-r--r--generic/tclCmdIL.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c
index bb3c9b7..7f4ca1d 100644
--- a/generic/tclCmdIL.c
+++ b/generic/tclCmdIL.c
@@ -2173,6 +2173,16 @@ Tcl_JoinObjCmd(
return TCL_ERROR;
}
+ if (listLen == 0) {
+ /* No elements to join; default empty result is correct. */
+ return TCL_OK;
+ }
+ if (listLen == 1) {
+ /* One element; return it */
+ Tcl_SetObjResult(interp, elemPtrs[0]);
+ return TCL_OK;
+ }
+
joinObjPtr = (objc == 2) ? Tcl_NewStringObj(" ", 1) : objv[2];
Tcl_IncrRefCount(joinObjPtr);