aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2014-11-16 14:23:54 +1000
committerSteve Bennett <steveb@workware.net.au>2014-11-17 12:22:48 +1000
commit77329fbe453beddd11607fa437ae83940435e1a4 (patch)
tree87f660f38efa57c94fe1f0fa8d714c2288e266da /jim.c
parente60018c2797b6edb2d05336178c88e429ba62f73 (diff)
downloadjimtcl-77329fbe453beddd11607fa437ae83940435e1a4.zip
jimtcl-77329fbe453beddd11607fa437ae83940435e1a4.tar.gz
jimtcl-77329fbe453beddd11607fa437ae83940435e1a4.tar.bz2
Implement string cat (TIP #429)
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/jim.c b/jim.c
index 6bc6856..7db453a 100644
--- a/jim.c
+++ b/jim.c
@@ -13444,13 +13444,13 @@ static int Jim_StringCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *a
int option;
static const char * const options[] = {
"bytelength", "length", "compare", "match", "equal", "is", "byterange", "range", "replace",
- "map", "repeat", "reverse", "index", "first", "last",
+ "map", "repeat", "reverse", "index", "first", "last", "cat",
"trim", "trimleft", "trimright", "tolower", "toupper", "totitle", NULL
};
enum
{
OPT_BYTELENGTH, OPT_LENGTH, OPT_COMPARE, OPT_MATCH, OPT_EQUAL, OPT_IS, OPT_BYTERANGE, OPT_RANGE, OPT_REPLACE,
- OPT_MAP, OPT_REPEAT, OPT_REVERSE, OPT_INDEX, OPT_FIRST, OPT_LAST,
+ OPT_MAP, OPT_REPEAT, OPT_REVERSE, OPT_INDEX, OPT_FIRST, OPT_LAST, OPT_CAT,
OPT_TRIM, OPT_TRIMLEFT, OPT_TRIMRIGHT, OPT_TOLOWER, OPT_TOUPPER, OPT_TOTITLE
};
static const char * const nocase_options[] = {
@@ -13484,6 +13484,25 @@ static int Jim_StringCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *a
Jim_SetResultInt(interp, len);
return JIM_OK;
+ case OPT_CAT:{
+ Jim_Obj *objPtr;
+ if (argc == 3) {
+ /* optimise the one-arg case */
+ objPtr = argv[2];
+ }
+ else {
+ int i;
+
+ objPtr = Jim_NewStringObj(interp, "", 0);
+
+ for (i = 2; i < argc; i++) {
+ Jim_AppendObj(interp, objPtr, argv[i]);
+ }
+ }
+ Jim_SetResult(interp, objPtr);
+ return JIM_OK;
+ }
+
case OPT_COMPARE:
case OPT_EQUAL:
{