From 43fcc6d0de411d2df3e1214293b186b4d14238d4 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Thu, 21 Apr 2011 12:57:48 +1000 Subject: Small code optimisation for [append] Signed-off-by: Steve Bennett --- jim.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'jim.c') 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; } -- cgit v1.1