Index: generic/nsf.c =================================================================== diff -u -r2dca7abdd5d83421b31b220bc6dabba1047d68fb -r929db54ebd7cf84befee362a94c1b9e1a32a041d --- generic/nsf.c (.../nsf.c) (revision 2dca7abdd5d83421b31b220bc6dabba1047d68fb) +++ generic/nsf.c (.../nsf.c) (revision 929db54ebd7cf84befee362a94c1b9e1a32a041d) @@ -19690,16 +19690,27 @@ return TCL_ERROR; } + /* + * Upon [interp create], set up NSF for the new child interp by running + * Nsf_Init() + */ + if (isCreateString(name)) { + Tcl_Obj *slaveCmdObj; + Tcl_Interp *slavePtr; + /* - * The command was an interp create, so perform an Nsf_Init() on - * the new interpreter. + * Tcl_InterpObjCmd() stores the newly created child interp's command name + * in the interp result store. */ - Tcl_Interp *slave = Tcl_GetSlave(interp, ObjStr(objv[2])); - if (!slave) { + + slaveCmdObj = Tcl_GetObjResult(interp); + slavePtr = Tcl_GetSlave(interp, ObjStr(slaveCmdObj)); + + if (!slavePtr) { return NsfPrintError(interp, "creation of slave interpreter failed"); } - if (Nsf_Init(slave) == TCL_ERROR) { + if (Nsf_Init(slavePtr) == TCL_ERROR) { return TCL_ERROR; } } Index: tests/interp.test =================================================================== diff -u -r45e24b34c85bf0fc3e14db5250550100bd07ff31 -r929db54ebd7cf84befee362a94c1b9e1a32a041d --- tests/interp.test (.../interp.test) (revision 45e24b34c85bf0fc3e14db5250550100bd07ff31) +++ tests/interp.test (.../interp.test) (revision 929db54ebd7cf84befee362a94c1b9e1a32a041d) @@ -740,4 +740,15 @@ unset i } +nx::test case nsf-interp-basics { + global i + set i [::nsf::interp create] + ? {$i eval {info commands ::nsf::is}} "::nsf::is" + ? {interp issafe $i} 0 + ? {::nsf::interp create zzz} "zzz" + set i [::nsf::interp create -safe] + ? {$i eval {info commands ::nsf::is}} "::nsf::is" + ? {interp issafe $i} 1 +} +