From 9718405db885bf6ff6ab6b9833aee7b5a06d915b Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Mon, 15 May 2017 21:33:03 +1000 Subject: [PATCH] optimisation: Reuse ExprBool in Jim_GetBoolFromExpr() Removes some duplicate code Signed-off-by: Steve Bennett --- jim.c | 41 +++++++++++++++-------------------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/jim.c b/jim.c index 959e4f8..18217b7 100644 --- a/jim.c +++ b/jim.c @@ -9623,37 +9623,26 @@ noopt: int Jim_GetBoolFromExpr(Jim_Interp *interp, Jim_Obj *exprObjPtr, int *boolPtr) { - int retcode; - jim_wide wideValue; - double doubleValue; - int booleanValue; Jim_Obj *exprResultPtr; + int retcode = Jim_EvalExpression(interp, exprObjPtr, &exprResultPtr); - retcode = Jim_EvalExpression(interp, exprObjPtr, &exprResultPtr); - if (retcode != JIM_OK) - return retcode; + if (retcode == JIM_OK) { + switch (ExprBool(interp, exprResultPtr)) { + case 0: + *boolPtr = 0; + break; - if (JimGetWideNoErr(interp, exprResultPtr, &wideValue) != JIM_OK) { - if (Jim_GetDouble(interp, exprResultPtr, &doubleValue) != JIM_OK) { - if (Jim_GetBoolean(interp, exprResultPtr, &booleanValue) != JIM_OK) { - Jim_DecrRefCount(interp, exprResultPtr); - return JIM_ERR; - } else { - Jim_DecrRefCount(interp, exprResultPtr); - *boolPtr = booleanValue; - return JIM_OK; - } - } - else { - Jim_DecrRefCount(interp, exprResultPtr); - *boolPtr = doubleValue != 0; - return JIM_OK; + case 1: + *boolPtr = 1; + break; + + case -1: + retcode = JIM_ERR; + break; } + Jim_DecrRefCount(interp, exprResultPtr); } - *boolPtr = wideValue != 0; - - Jim_DecrRefCount(interp, exprResultPtr); - return JIM_OK; + return retcode; } /* ----------------------------------------------------------------------------- -- 2.11.4.GIT