Index: generic/nsf.c =================================================================== diff -u -r4b9ddd1b06ce34fd352791fcae53ad91a79b43ce -r14101af0c3253e79cf68622cb05e51eb780e1f39 --- generic/nsf.c (.../nsf.c) (revision 4b9ddd1b06ce34fd352791fcae53ad91a79b43ce) +++ generic/nsf.c (.../nsf.c) (revision 14101af0c3253e79cf68622cb05e51eb780e1f39) @@ -19999,6 +19999,11 @@ break; case AssertionsubcmdClass_invarIdx: + + if (!NsfObjectIsClass(object)) { + return NsfPrintError(interp, "object is not a class"); + } + class = (NsfClass *)object; if (arg) { NsfClassOpt *opt = NsfRequireClassOpt(class); @@ -21427,7 +21432,8 @@ case CurrentoptionClassIdx: /* class subcommand */ cscPtr = CallStackGetTopFrame0(interp); - Tcl_SetObjResult(interp, cscPtr->cl ? cscPtr->cl->object.cmdName : NsfGlobalObjs[NSF_EMPTY]); + Tcl_SetObjResult(interp, cscPtr && cscPtr->cl ? + cscPtr->cl->object.cmdName : NsfGlobalObjs[NSF_EMPTY]); break; case CurrentoptionActivelevelIdx: @@ -21439,14 +21445,19 @@ Tcl_Obj **nobjv; cscPtr = CallStackGetTopFrame(interp, &framePtr); - if (cscPtr->objv) { - nobjc = cscPtr->objc; - nobjv = (Tcl_Obj **)cscPtr->objv; + + if (cscPtr) { + if (cscPtr->objv) { + nobjc = cscPtr->objc; + nobjv = (Tcl_Obj **)cscPtr->objv; + } else { + nobjc = Tcl_CallFrame_objc(framePtr); + nobjv = (Tcl_Obj **)Tcl_CallFrame_objv(framePtr); + } + Tcl_SetObjResult(interp, Tcl_NewListObj(nobjc-1, nobjv+1)); } else { - nobjc = Tcl_CallFrame_objc(framePtr); - nobjv = (Tcl_Obj **)Tcl_CallFrame_objv(framePtr); + return NsfPrintError(interp, "can't find proc"); } - Tcl_SetObjResult(interp, Tcl_NewListObj(nobjc-1, nobjv+1)); break; }