Index: generic/nsf.c =================================================================== diff -u -r4344f09a497442a67dd503dcdce348a376491749 -rf8749ea35fec22e747e070825ff094c4f2725071 --- generic/nsf.c (.../nsf.c) (revision 4344f09a497442a67dd503dcdce348a376491749) +++ generic/nsf.c (.../nsf.c) (revision f8749ea35fec22e747e070825ff094c4f2725071) @@ -12636,7 +12636,6 @@ ObjStr(callInfoObj)); */ result = DispatchUnknownMethod(interp, invokedObject, objc-1, objv+1, callInfoObj, objv[1], NSF_CM_NO_OBJECT_METHOD|NSF_CSC_IMMEDIATE); - RUNTIME_STATE(interp)->unknown = 0; DECR_REF_COUNT(callInfoObj); } } @@ -13040,10 +13039,6 @@ result = DispatchUnknownMethod(interp, object, cscPtr->objc, cscPtr->objv, NULL, cscPtr->objv[0], (cscPtr->flags & NSF_CSC_CALL_NO_UNKNOWN)|NSF_CSC_IMMEDIATE); - /* - * Final reset of unknown flag - */ - rst->unknown = 0; } } @@ -13796,8 +13791,9 @@ * Results: * result code * - * Side effects: - * indirect effects by calling Tcl code + * Side effects: + * There might be indirect effects by calling Tcl code; also, + * the interp's unknown-state is reset. * *---------------------------------------------------------------------- */ @@ -13809,6 +13805,7 @@ int result; Tcl_Obj *unknownObj = NsfMethodObj(object, NSF_o_unknown_idx); CONST char *methodName = MethodName(methodObj); + NsfRuntimeState *rst = RUNTIME_STATE(interp); assert(interp); assert(object); @@ -13870,6 +13867,11 @@ tailMethodObj ? MethodName(tailMethodObj) : methodName); } + /* + * Reset interp state, unknown has been fired. + */ + rst->unknown = 0; + return result; }