aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-11-26 15:12:28 +1000
committerSteve Bennett <steveb@workware.net.au>2011-11-28 13:13:42 +1000
commitae8a6597a4220c44c14cd7e4214384926468a732 (patch)
treea36cb1aa49cb547b8bcd56f79259b1472336b817
parente32d14e397f48f7800a83429299134c6d0e3a660 (diff)
downloadjimtcl-ae8a6597a4220c44c14cd7e4214384926468a732.zip
jimtcl-ae8a6597a4220c44c14cd7e4214384926468a732.tar.gz
jimtcl-ae8a6597a4220c44c14cd7e4214384926468a732.tar.bz2
Make Jim_ListJoin() public
The core of [join] Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim.c35
-rw-r--r--jim.h2
2 files changed, 22 insertions, 15 deletions
diff --git a/jim.c b/jim.c
index da9b1b3..d5bdef8 100644
--- a/jim.c
+++ b/jim.c
@@ -6292,6 +6292,24 @@ int Jim_SetListIndex(Jim_Interp *interp, Jim_Obj *varNamePtr,
return JIM_ERR;
}
+Jim_Obj *Jim_ListJoin(Jim_Interp *interp, Jim_Obj *listObjPtr, const char *joinStr, int joinStrLen)
+{
+ int i;
+ int listLen = Jim_ListLength(interp, listObjPtr);
+ Jim_Obj *resObjPtr = Jim_NewEmptyStringObj(interp);
+
+ for (i = 0; i < listLen; ) {
+ Jim_Obj *objPtr;
+
+ Jim_ListIndex(interp, listObjPtr, i, &objPtr, JIM_NONE);
+ Jim_AppendObj(interp, resObjPtr, objPtr);
+ if (++i != listLen) {
+ Jim_AppendString(interp, resObjPtr, joinStr, joinStrLen);
+ }
+ }
+ return resObjPtr;
+}
+
Jim_Obj *Jim_ConcatObj(Jim_Interp *interp, int objc, Jim_Obj *const *objv)
{
int i;
@@ -13919,8 +13937,7 @@ static int Jim_SplitCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *ar
static int Jim_JoinCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
const char *joinStr;
- int joinStrLen, i, listLen;
- Jim_Obj *resObjPtr;
+ int joinStrLen;
if (argc != 2 && argc != 3) {
Jim_WrongNumArgs(interp, 1, argv, "list ?joinString?");
@@ -13934,19 +13951,7 @@ static int Jim_JoinCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *arg
else {
joinStr = Jim_GetString(argv[2], &joinStrLen);
}
- listLen = Jim_ListLength(interp, argv[1]);
- resObjPtr = Jim_NewStringObj(interp, NULL, 0);
- /* Split */
- for (i = 0; i < listLen; i++) {
- Jim_Obj *objPtr = 0;
-
- Jim_ListIndex(interp, argv[1], i, &objPtr, JIM_NONE);
- Jim_AppendObj(interp, resObjPtr, objPtr);
- if (i + 1 != listLen) {
- Jim_AppendString(interp, resObjPtr, joinStr, joinStrLen);
- }
- }
- Jim_SetResult(interp, resObjPtr);
+ Jim_SetResult(interp, Jim_ListJoin(interp, argv[1], joinStr, joinStrLen));
return JIM_OK;
}
diff --git a/jim.h b/jim.h
index a1ae837..4308a69 100644
--- a/jim.h
+++ b/jim.h
@@ -803,6 +803,8 @@ JIM_EXPORT int Jim_SetListIndex (Jim_Interp *interp,
Jim_Obj *newObjPtr);
JIM_EXPORT Jim_Obj * Jim_ConcatObj (Jim_Interp *interp, int objc,
Jim_Obj *const *objv);
+JIM_EXPORT Jim_Obj *Jim_ListJoin(Jim_Interp *interp,
+ Jim_Obj *listObjPtr, const char *joinStr, int joinStrLen);
/* dict object */
JIM_EXPORT Jim_Obj * Jim_NewDictObj (Jim_Interp *interp,