From 06df03f78cb1b23f4e9bd10d7f7f4fab3a16e86f Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Sat, 16 Sep 2017 13:29:34 +1000 Subject: defer: fast lookup existence of $jim::defer This speeds up call frame destruction in the common case that $jim::defer does not exist. Signed-off-by: Steve Bennett --- jim.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/jim.c b/jim.c index 131924c..4489f50 100644 --- a/jim.c +++ b/jim.c @@ -5034,10 +5034,17 @@ static int JimDeleteLocalProcs(Jim_Interp *interp, Jim_Stack *localCommands) */ static int JimInvokeDefer(Jim_Interp *interp, int retcode) { - Jim_Obj *objPtr = Jim_GetVariableStr(interp, "jim::defer", JIM_NONE); - int ret = JIM_OK; + Jim_Obj *objPtr; + + /* Fast check for the likely case that the variable doesn't exist */ + if (Jim_FindHashEntry(&interp->framePtr->vars, "jim::defer") == NULL) { + return retcode; + } + + objPtr = Jim_GetVariableStr(interp, "jim::defer", JIM_NONE); if (objPtr) { + int ret = JIM_OK; int i; int listLen = Jim_ListLength(interp, objPtr); Jim_Obj *resultObjPtr; -- cgit v1.1