Index: TODO =================================================================== diff -u -N -r643f38a3651566f228a9756b09760930c553f7e8 -r8da343e4eb0b6166a184a0ab8eb7189d97eaff6f --- TODO (.../TODO) (revision 643f38a3651566f228a9756b09760930c553f7e8) +++ TODO (.../TODO) (revision 8da343e4eb0b6166a184a0ab8eb7189d97eaff6f) @@ -3405,6 +3405,10 @@ * factored out CmdIsNsfObject() for NRE handling with slave interpreters. * added flag ZSE_NRE_PROC for using nreProc instead of objProc +- nsf.c + * implemented NsfObjDispatchNRE and NsfObjDispatch + * this fixed all issues of tcl8.6 and interp.test (xocomm still hangs in 8.6) + TODO: - fix interp.test for tcl 8.6 - fix xocomm.test for tcl 8.6 Index: doc/example-scripts/rosetta-distinct-objects.html =================================================================== diff -u -N -r5693145107c55b5f64bf0fb487aa43e0f2238f1a -r8da343e4eb0b6166a184a0ab8eb7189d97eaff6f --- doc/example-scripts/rosetta-distinct-objects.html (.../rosetta-distinct-objects.html) (revision 5693145107c55b5f64bf0fb487aa43e0f2238f1a) +++ doc/example-scripts/rosetta-distinct-objects.html (.../rosetta-distinct-objects.html) (revision 8da343e4eb0b6166a184a0ab8eb7189d97eaff6f) @@ -767,7 +767,7 @@

Index: generic/nsf.c =================================================================== diff -u -N -r643f38a3651566f228a9756b09760930c553f7e8 -r8da343e4eb0b6166a184a0ab8eb7189d97eaff6f --- generic/nsf.c (.../nsf.c) (revision 643f38a3651566f228a9756b09760930c553f7e8) +++ generic/nsf.c (.../nsf.c) (revision 8da343e4eb0b6166a184a0ab8eb7189d97eaff6f) @@ -3939,15 +3939,7 @@ static int CmdIsNsfObject(Tcl_Command cmd) { assert(cmd); -#if defined(NRE) -# if defined(USE_NRE_PROC) - return Tcl_Command_nreProc(cmd) == NsfObjDispatch; -# else return Tcl_Command_objProc(cmd) == NsfObjDispatch; -# endif -#else - return Tcl_Command_objProc(cmd) == NsfObjDispatch; -#endif } @@ -10042,8 +10034,21 @@ * *---------------------------------------------------------------------- */ +#if defined(NRE) +Tcl_ObjCmdProc NsfObjDispatchNRE; +extern int +NsfObjDispatch(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + return Tcl_NRCallObjProc(interp, NsfObjDispatchNRE, clientData, objc, objv); +} extern int +NsfObjDispatchNRE(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + +#else + +extern int NsfObjDispatch(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + +#endif int result; #ifdef STACK_TRACE NsfStackDump(interp); @@ -13459,12 +13464,8 @@ } #if defined(NRE) object->id = Tcl_NRCreateCommand(interp, nameString, -# if defined(USE_NRE_PROC) - NULL, -# else NsfObjDispatch, -# endif - NsfObjDispatch, + NsfObjDispatchNRE, object, TclDeletesObject); #else object->id = Tcl_CreateObjCommand(interp, nameString, NsfObjDispatch, @@ -13889,12 +13890,8 @@ } #if defined(NRE) object->id = Tcl_NRCreateCommand(interp, nameString, -# if defined(USE_NRE_PROC) - NULL, -# else NsfObjDispatch, -# endif - NsfObjDispatch, + NsfObjDispatchNRE, cl, TclDeletesObject); #else object->id = Tcl_CreateObjCommand(interp, nameString, NsfObjDispatch, Index: tests/interp.test =================================================================== diff -u -N -re516122728ddcd7c6d92e43de9cfe497b305bee5 -r8da343e4eb0b6166a184a0ab8eb7189d97eaff6f --- tests/interp.test (.../interp.test) (revision e516122728ddcd7c6d92e43de9cfe497b305bee5) +++ tests/interp.test (.../interp.test) (revision 8da343e4eb0b6166a184a0ab8eb7189d97eaff6f) @@ -117,9 +117,7 @@ ? {interp eval $i {c bar}} OK # dispatch to mixed-in methods (which do basic introspection on the hidden object) ... - if {$::tcl_version < 8.6} { - ? {interp invokehidden $i C foo} ::C-::nx::Class-::M - } + ? {interp invokehidden $i C foo} ::C-::nx::Class-::M ? {interp eval $i {c foo}} ::c-::C-::M # @@ -188,11 +186,9 @@ ? {$i eval {nx::Object info instances ::o2}} ::o2 ? {$i eval {nsf::object::exists ::o2}} 0 - if {$::tcl_version < 8.6} { - ? {interp invokehidden $i o2 destroy} "ok" - ? {$i eval {interp hidden}} "" - ? {$i eval {nx::Object info instances ::o2}} "" - } + ? {interp invokehidden $i o2 destroy} "ok" + ? {$i eval {interp hidden}} "" + ? {$i eval {nx::Object info instances ::o2}} "" ? {$i eval {info commands ::o2}} "" ? {$i eval {nsf::object::exists ::o2}} 0 @@ -281,10 +277,8 @@ ? {interp eval $i {nx::Object info instances ::o}} ::o ? {interp eval $i {nsf::object::exists ::o}} 0 - if {$::tcl_version < 8.6} { - ? {interp invokehidden $i O foo} \ - {::o {} ::nx::Object {invalid command name "::o"}} - } + ? {interp invokehidden $i O foo} \ + {::o {} ::nx::Object {invalid command name "::o"}} interp expose $i O OO @@ -414,9 +408,7 @@ ? {interp eval $i {::rename ::o ""}} \ {can't delete "::o": command doesn't exist} - if {$::tcl_version < 8.6} { - ? {interp invokehidden $i o destroy} "BAFF!" - } + ? {interp invokehidden $i o destroy} "BAFF!" ? {interp eval $i {interp hidden}} "o" ? {interp eval $i {info commands ::o}} "" @@ -497,12 +489,10 @@ ? {interp eval $i {::o destroy}} {invalid command name "::o"} - if {$::tcl_version < 8.6} { - ? {interp invokehidden $i o destroy} \ - {can't delete "::o": command doesn't exist} - ? {interp eval $i {interp hidden}} "" - ? {interp eval $i {nx::Object info instances ::o}} "" - } + ? {interp invokehidden $i o destroy} \ + {can't delete "::o": command doesn't exist} + ? {interp eval $i {interp hidden}} "" + ? {interp eval $i {nx::Object info instances ::o}} "" ? {interp eval $i {info commands ::o}} "" ? {interp eval $i {nsf::object::exists ::o}} 0