aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2017-05-15 21:33:03 +1000
committerSteve Bennett <steveb@workware.net.au>2017-05-23 14:36:41 +1000
commit9718405db885bf6ff6ab6b9833aee7b5a06d915b (patch)
tree6bd03d9e8ba86617ca89013eb9bfb4ab5a412453
parente1bf40597713aa821eb91c7e6c0aee96519f32c4 (diff)
downloadjimtcl-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.c41
1 files 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;
}
/* -----------------------------------------------------------------------------