diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-04-21 12:57:48 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2011-06-10 14:00:12 +1000 |
commit | 43fcc6d0de411d2df3e1214293b186b4d14238d4 (patch) | |
tree | 97e2bbc8f581f3cdafbca3fa088d3345209ee9a5 /jim.c | |
parent | 5233ba4aafc1b8a5fca412001e047760333aff8e (diff) | |
download | jimtcl-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.c | 30 |
1 files changed, 15 insertions, 15 deletions
@@ -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; } |