Index: generic/nsf.c =================================================================== diff -u -N -r1723e9537ea42ca3bd64e887329e236cd032b75a -re2dfacabb8760880a13464575d8a3385dca531de --- generic/nsf.c (.../nsf.c) (revision 1723e9537ea42ca3bd64e887329e236cd032b75a) +++ generic/nsf.c (.../nsf.c) (revision e2dfacabb8760880a13464575d8a3385dca531de) @@ -12402,36 +12402,35 @@ static int ProcDispatchFinalize(ClientData data[], Tcl_Interp *interp, int result) { ParseContext *pcPtr = data[1]; + Tcl_Time *ttPtr = data[2]; /*const char *methodName = data[0]; fprintf(stderr, "ProcDispatchFinalize of method %s\n", methodName);*/ nonnull_assert(data != NULL); nonnull_assert(interp != NULL); -# if defined(NSF_PROFILE) - { + if (ttPtr != NULL) { const char *methodName = data[0]; - Tcl_Time *ttPtr = data[2]; unsigned long cmdFlags = (unsigned long)data[3]; +#if defined(NSF_PROFILE) NsfRuntimeState *rst = RUNTIME_STATE(interp); - +#endif /*fprintf(stderr, "ProcDispatchFinalize methodName %s flags %.6lx\n", methodName, (cmdFlags & NSF_CMD_DEBUG_METHOD));*/ if ((cmdFlags & NSF_CMD_DEBUG_METHOD) != 0u) { NsfProfileDebugExit(interp, NULL, NULL, methodName, ttPtr->sec, ttPtr->usec); } - +#if defined(NSF_PROFILE) if (rst->doProfile != 0) { NsfProfileRecordProcData(interp, methodName, ttPtr->sec, ttPtr->usec); } +#endif if (ttPtr != NULL) { ckfree(ttPtr); } } -# endif - ParseContextRelease(pcPtr); NsfTclStackFree(interp, pcPtr, "nsf::proc dispatch finalize release parse context"); return result; @@ -16645,15 +16644,12 @@ InvokeShadowedProc(Tcl_Interp *interp, Tcl_Obj *procNameObj, Tcl_Command cmd, ParseContext *pcPtr, struct Tcl_Time *trtPtr, unsigned long cmdFlags) { Tcl_Obj *CONST *objv; - int objc, result; + int objc, result, includeTiming; const char *fullMethodName; Tcl_CallFrame *framePtr; Proc *procPtr; -#if defined(NSF_PROFILE) Tcl_Time *ttPtr; -#endif - nonnull_assert(interp != NULL); nonnull_assert(procNameObj != NULL); nonnull_assert(cmd != NULL); @@ -16713,51 +16709,45 @@ return result; } - Tcl_CallFrame_objc(framePtr) = objc; - Tcl_CallFrame_objv(framePtr) = objv; - Tcl_CallFrame_procPtr(framePtr) = procPtr; + includeTiming = ((cmdFlags & NSF_CMD_DEBUG_METHOD) != 0u); -# if defined(NSF_PROFILE) - { +#if defined(NSF_PROFILE) + if (includeTiming == 0) { NsfRuntimeState *rst = RUNTIME_STATE(interp); /*fprintf(stderr, "InvokeShadowedProc %s cmdFlags %.6lx\n", fullMethodName, cmdFlags);*/ - if (rst->doProfile || (cmdFlags & NSF_CMD_DEBUG_METHOD) != 0u) { - ttPtr = (Tcl_Time *) ckalloc(sizeof(Tcl_Time)); - memcpy(ttPtr, trtPtr, sizeof(Tcl_Time)); - } else { - ttPtr = NULL; - } + includeTiming = rst->doProfile; } #endif + Tcl_CallFrame_objc(framePtr) = objc; + Tcl_CallFrame_objv(framePtr) = objv; + Tcl_CallFrame_procPtr(framePtr) = procPtr; + + if (includeTiming) { + ttPtr = (Tcl_Time *) ckalloc(sizeof(Tcl_Time)); + memcpy(ttPtr, trtPtr, sizeof(Tcl_Time)); + } else { + ttPtr = NULL; + } + #if defined(NRE) /*fprintf(stderr, "CALL TclNRInterpProcCore proc '%s' %s nameObj %p %s\n", ObjStr(objv[0]), fullMethodName, procNameObj, ObjStr(procNameObj));*/ Tcl_NRAddCallback(interp, ProcDispatchFinalize, (ClientData)fullMethodName, pcPtr, -# if defined(NSF_PROFILE) (ClientData)ttPtr, (ClientData)(unsigned long)cmdFlags -# else - NULL, - NULL -# endif ); result = TclNRInterpProcCore(interp, procNameObj, 1, &MakeProcError); #else { ClientData data[4] = { (ClientData)fullMethodName, pcPtr, -# if defined(NSF_PROFILE) (ClientData)ttPtr, (ClientData)(unsigned long)cmdFlags -# else - NULL, - NULL -# endif }; result = TclObjInterpProcCore(interp, procNameObj, 1, &MakeProcError); result = ProcDispatchFinalize(data, interp, result);