aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2023-02-10 13:59:44 +1000
committerSteve Bennett <steveb@workware.net.au>2023-02-10 14:00:37 +1000
commitd04020a992d6287017a7f76cb3d5b89f7776ebb2 (patch)
tree26c322e046b42722fb0ff3fefbf55dd38f715d61 /jim.c
parent722f38a10bcbb07ba13dbbaf4489c1241b107673 (diff)
downloadjimtcl-d04020a992d6287017a7f76cb3d5b89f7776ebb2.zip
jimtcl-d04020a992d6287017a7f76cb3d5b89f7776ebb2.tar.gz
jimtcl-d04020a992d6287017a7f76cb3d5b89f7776ebb2.tar.bz2
Optimisation for Jim_GetWideExpr()
If the expression is a simple integer, use it as-is rather than converting to an expression and evaluating. Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/jim.c b/jim.c
index 68a703e..fba93cb 100644
--- a/jim.c
+++ b/jim.c
@@ -6102,6 +6102,10 @@ int Jim_GetWide(Jim_Interp *interp, Jim_Obj *objPtr, jim_wide * widePtr)
int Jim_GetWideExpr(Jim_Interp *interp, Jim_Obj *objPtr, jim_wide * widePtr)
{
int ret = JIM_OK;
+ /* As an optimisation, try to convert to int first */
+ if (objPtr->typePtr == &sourceObjType || objPtr->typePtr == NULL) {
+ SetIntFromAny(interp, objPtr, 0);
+ }
if (objPtr->typePtr == &intObjType) {
*widePtr = JimWideValue(objPtr);
}