Index: TODO
===================================================================
diff -u -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 -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 @@
 <div id="footnotes"><hr /></div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2011-08-15 19:29:24 CEST
+Last updated 2011-08-27 00:19:37 CEST
 </div>
 </div>
 </body>
Index: generic/nsf.c
===================================================================
diff -u -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 -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