diff options
author | Steve Bennett <steveb@workware.net.au> | 2017-05-15 21:33:03 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2017-05-23 14:36:41 +1000 |
commit | 9718405db885bf6ff6ab6b9833aee7b5a06d915b (patch) | |
tree | 6bd03d9e8ba86617ca89013eb9bfb4ab5a412453 | |
parent | e1bf40597713aa821eb91c7e6c0aee96519f32c4 (diff) | |
download | jimtcl-9718405db885bf6ff6ab6b9833aee7b5a06d915b.zip jimtcl-9718405db885bf6ff6ab6b9833aee7b5a06d915b.tar.gz jimtcl-9718405db885bf6ff6ab6b9833aee7b5a06d915b.tar.bz2 |
optimisation: Reuse ExprBool in Jim_GetBoolFromExpr()
Removes some duplicate code
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 41 |
1 files changed, 15 insertions, 26 deletions
@@ -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; } /* ----------------------------------------------------------------------------- |