Index: generic/nsf.c =================================================================== diff -u -r8c8969ab850d118f76305689bd95e980b8f4543f -r261204ec313bdc468ba1fd690facd05607c99879 --- generic/nsf.c (.../nsf.c) (revision 8c8969ab850d118f76305689bd95e980b8f4543f) +++ generic/nsf.c (.../nsf.c) (revision 261204ec313bdc468ba1fd690facd05607c99879) @@ -9746,6 +9746,55 @@ /* *---------------------------------------------------------------------- + * CheckCStack -- + * + * Monitor the growth of the C Stack when complied with + * NSF_STACKCHECK. + * + * Results: + * none + * + * Side effects: + * update of rst->bottomOfStack + * + *---------------------------------------------------------------------- + */ +#if defined(NSF_STACKCHECK) +NSF_INLINE static void +CheckCStack(Tcl_Interp *interp, CONST char *prefix, CONST char *fullMethodName) { + int somevar; + NsfRuntimeState *rst = RUNTIME_STATE(interp); + + if (rst->exitHandlerDestroyRound == NSF_EXITHANDLER_OFF) { +# if TCL_STACK_GROWS_UP + if ((void *)&somevar < rst->bottomOfStack) { + NsfLog(interp, NSF_LOG_WARN, "Stack adjust bottom %ld - %s %s", + (void *)&somevar - rst->bottomOfStack, prefix, fullMethodName); + rst->bottomOfStack = (void *)&somevar; + } else if ((void *)&somevar > rst->maxStack) { + NsfLog(interp, NSF_LOG_WARN, "Stack adjust top %ld - %s %s", + (void *)&somevar - rst->bottomOfStack, prefix, fullMethodName); + rst->maxStack = (void *)&somevar; + } +# else + if ((void *)&somevar > rst->bottomOfStack) { + NsfLog(interp, NSF_LOG_WARN, "Stack adjust bottom %ld - %s %s", + rst->bottomOfStack - (void *)&somevar, prefix, fullMethodName); + rst->bottomOfStack = (void *)&somevar; + } else if ((void *)&somevar < rst->maxStack) { + NsfLog(interp, NSF_LOG_WARN, "Stack adjust top %ld - %s %s", + rst->bottomOfStack - (void *)&somevar, prefix, fullMethodName); + rst->maxStack = (void *)&somevar; + } +# endif + } +} +#else +# define CheckCStack(interp, prefix, methodName) +#endif + +/* + *---------------------------------------------------------------------- * MethodDispatchCsc -- * * Dispatch a method (scripted or cmd) with an already allocated @@ -9944,23 +9993,7 @@ assert (object->teardown); assert (cmd); -#if defined(NSF_STACKCHECK) - { int somevar; - NsfRuntimeState *rst = RUNTIME_STATE(interp); - - if (rst->exitHandlerDestroyRound == NSF_EXITHANDLER_OFF) { - if ((void *)&somevar > rst->bottomOfStack) { - NsfLog(interp, NSF_LOG_WARN, "Stack adjust bottom %ld", - rst->bottomOfStack - (void *)&somevar); - rst->bottomOfStack = (void *)&somevar; - } else if ((void *)&somevar < rst->maxStack) { - NsfLog(interp, NSF_LOG_WARN, "Stack adjust top %ld %s", - rst->bottomOfStack - (void *)&somevar, methodName); - rst->maxStack = (void *)&somevar; - } - } - } -#endif + CheckCStack(interp, "method", methodName); /*fprintf(stderr, "MethodDispatch method '%s.%s' objc %d flags %.6x\n", ObjectName(object), methodName, objc, flags); */ @@ -12401,7 +12434,7 @@ /* tcd->paramDefs is freed by NsfProcDeleteProc() */ FREE(NsfProcClientData, tcd); } - + /* *---------------------------------------------------------------------- * InvokeShadowedProc -- @@ -12435,24 +12468,8 @@ } #endif -#if defined(NSF_STACKCHECK) - { int somevar; - NsfRuntimeState *rst = RUNTIME_STATE(interp); + CheckCStack(interp, "nsfProc", fullMethodName); - if (rst->exitHandlerDestroyRound == NSF_EXITHANDLER_OFF) { - if ((void *)&somevar > rst->bottomOfStack) { - NsfLog(interp, NSF_LOG_WARN, "Stack adjust bottom %ld - nsfProc %s", - rst->bottomOfStack - (void *)&somevar, fullMethodName); - rst->bottomOfStack = (void *)&somevar; - } else if ((void *)&somevar < rst->maxStack) { - NsfLog(interp, NSF_LOG_WARN, "Stack adjust top %ld - nsfProc %s", - rst->bottomOfStack - (void *)&somevar, fullMethodName); - rst->maxStack = (void *)&somevar; - } - } - } -#endif - /* * The code below is derived from the scripted method dispatch and just * slightly adapted to remove object dependencies. Index: generic/nsf.h =================================================================== diff -u -r8c8969ab850d118f76305689bd95e980b8f4543f -r261204ec313bdc468ba1fd690facd05607c99879 --- generic/nsf.h (.../nsf.h) (revision 8c8969ab850d118f76305689bd95e980b8f4543f) +++ generic/nsf.h (.../nsf.h) (revision 261204ec313bdc468ba1fd690facd05607c99879) @@ -143,7 +143,6 @@ #define NSF_STACKCHECK 1 */ - /* * Sanity checks and dependencies for optional compile flags */