Index: generic/nsf.c =================================================================== diff -u -r551a41a1d6502070f966b5f0be2559cf3fe12804 -r17880e63ccb02577a5c856aaa6344cd83028a07b --- generic/nsf.c (.../nsf.c) (revision 551a41a1d6502070f966b5f0be2559cf3fe12804) +++ generic/nsf.c (.../nsf.c) (revision 17880e63ccb02577a5c856aaa6344cd83028a07b) @@ -14823,10 +14823,12 @@ * Provide warnings for double-settings. */ if (pcPtr->flags[j] & NSF_ARG_SET) { - NsfLog(interp, NSF_LOG_WARN, "Non-positional parameter %s was passed more than once (%s%s%s)", + Tcl_Obj *cmdLineObj = Tcl_NewListObj(objc-1, objv+1); + NsfLog(interp, NSF_LOG_WARN, "Non-positional parameter %s was passed more than once (%s%s%s %s)", nppPtr->name, object ? ObjectName(object) : "", object ? " method " : "", - ObjStr(procNameObj)); + ObjStr(procNameObj), ObjStr(cmdLineObj)); + DECR_REF_COUNT(cmdLineObj); } pcPtr->flags[j] |= NSF_ARG_SET; @@ -18881,8 +18883,9 @@ * does not use this as a base frame, and methods like * activelevel ignore it. */ + //yyyy cscPtr->frameType = NSF_CSC_TYPE_INACTIVE; - + /* * If "method=" was given, use it as method name */ @@ -19261,6 +19264,28 @@ CONST char *methodName, *nextMethodName, *initString = NULL; Tcl_Obj **argv, **nextArgv; + //yyyy + CallFrame *savedVarFramePtr = Tcl_Interp_varFramePtr(interp); + CallFrame *callerPtr = savedVarFramePtr->callerPtr; + if (callerPtr->callerPtr) { callerPtr = callerPtr->callerPtr;} + + // We seem to have problems in cases, -volatile is called via unknown + // TODO: fixme, the comparison with "unknown" can't be the solution + if ((Tcl_CallFrame_isProcCallFrame(callerPtr) & FRAME_IS_NSF_METHOD)) { + NsfCallStackContent *cscPtr = (NsfCallStackContent *)Tcl_CallFrame_clientData(callerPtr); + CONST char *methodName = cscPtr && cscPtr->cmdPtr ? Tcl_GetCommandName(interp, cscPtr->cmdPtr) : ""; + if (strcmp(methodName, "unknown") == 0) { + //fprintf(stderr, "ONE MORE\n"); + if (callerPtr->callerPtr) { callerPtr = callerPtr->callerPtr;} + } + } + + callerPtr = (CallFrame *)CallStackGetActiveProcFrame((Tcl_CallFrame *)callerPtr); + + //fprintf(stderr, "CHANGE FRAME to %p\n", callerPtr); + //NsfShowStack(interp); + Tcl_Interp_varFramePtr(interp) = callerPtr; + #if 0 fprintf(stderr, "NsfOResidualargsMethod %s %2d ",ObjectName(object), objc); for(i=0; i