aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-04-21 12:57:48 +1000
committerSteve Bennett <steveb@workware.net.au>2011-06-10 14:00:12 +1000
commit43fcc6d0de411d2df3e1214293b186b4d14238d4 (patch)
tree97e2bbc8f581f3cdafbca3fa088d3345209ee9a5 /jim.c
parent5233ba4aafc1b8a5fca412001e047760333aff8e (diff)
downloadjimtcl-43fcc6d0de411d2df3e1214293b186b4d14238d4.zip
jimtcl-43fcc6d0de411d2df3e1214293b186b4d14238d4.tar.gz
jimtcl-43fcc6d0de411d2df3e1214293b186b4d14238d4.tar.bz2
Small code optimisation for [append]
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/jim.c b/jim.c
index 5421e62..85d3bc0 100644
--- a/jim.c
+++ b/jim.c
@@ -11911,7 +11911,7 @@ static int Jim_LsortCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const arg
static int Jim_AppendCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
Jim_Obj *stringObjPtr;
- int shared, i;
+ int i;
if (argc < 2) {
Jim_WrongNumArgs(interp, 1, argv, "varName ?value value ...?");
@@ -11923,27 +11923,27 @@ static int Jim_AppendCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *a
return JIM_ERR;
}
else {
+ int freeobj = 0;
stringObjPtr = Jim_GetVariable(interp, argv[1], JIM_UNSHARED);
if (!stringObjPtr) {
- /* Create the string if it does not exists */
+ /* Create the string if it doesn't exist */
stringObjPtr = Jim_NewEmptyStringObj(interp);
- if (Jim_SetVariable(interp, argv[1], stringObjPtr)
- != JIM_OK) {
+ freeobj = 1;
+ }
+ else if (Jim_IsShared(stringObjPtr)) {
+ freeobj = 1;
+ stringObjPtr = Jim_DuplicateObj(interp, stringObjPtr);
+ }
+ for (i = 2; i < argc; i++) {
+ Jim_AppendObj(interp, stringObjPtr, argv[i]);
+ }
+ if (Jim_SetVariable(interp, argv[1], stringObjPtr) != JIM_OK) {
+ if (freeobj) {
Jim_FreeNewObj(interp, stringObjPtr);
- return JIM_ERR;
}
+ return JIM_ERR;
}
}
- shared = Jim_IsShared(stringObjPtr);
- if (shared)
- stringObjPtr = Jim_DuplicateObj(interp, stringObjPtr);
- for (i = 2; i < argc; i++)
- Jim_AppendObj(interp, stringObjPtr, argv[i]);
- if (Jim_SetVariable(interp, argv[1], stringObjPtr) != JIM_OK) {
- if (shared)
- Jim_FreeNewObj(interp, stringObjPtr);
- return JIM_ERR;
- }
Jim_SetResult(interp, stringObjPtr);
return JIM_OK;
}