Index: TODO =================================================================== diff -u -rc659c8c4e22424cf93551e33db9360bc235bee81 -r5fc10090d62e8d8a53d79f526debc705056f1007 --- TODO (.../TODO) (revision c659c8c4e22424cf93551e33db9360bc235bee81) +++ TODO (.../TODO) (revision 5fc10090d62e8d8a53d79f526debc705056f1007) @@ -2836,7 +2836,9 @@ - remove alias warnings from gcc under ubuntu (4.2.4) - nsf.c: fixed possible crash in tcl8.6 with nsfprocs, still one inconsistency +- nsf.c: fixed bad interaction between mixins and ensembles in tcl8.6 + TODO: - evaluate the folloging change * make disposition an option of abritraty other types for objectparameters Index: generic/nsf.c =================================================================== diff -u -rc659c8c4e22424cf93551e33db9360bc235bee81 -r5fc10090d62e8d8a53d79f526debc705056f1007 --- generic/nsf.c (.../nsf.c) (revision c659c8c4e22424cf93551e33db9360bc235bee81) +++ generic/nsf.c (.../nsf.c) (revision 5fc10090d62e8d8a53d79f526debc705056f1007) @@ -8102,8 +8102,8 @@ objc-1, (Tcl_Obj **)objv+1); } - /*fprintf(stderr, "MethodDispatch method '%s' cmd %p cp=%p objc=%d\n", - methodName, cmd, cp, objc);*/ + /*fprintf(stderr, "MethodDispatch method '%s' cmd %p cp=%p objc=%d cscPtr %p flags %.6x\n", + methodName, cmd, cp, objc, cscPtr, cscPtr->flags);*/ assert(object->teardown); /* @@ -8218,12 +8218,12 @@ * already. */ - /*fprintf(stderr, ".... ensemble dispatch on %s.%s csc %p\n", - ObjectName(object),methodName, cscPtr);*/ + /*fprintf(stderr, ".... ensemble dispatch on %s.%s cscPtr %p base flags %.6x\n", + ObjectName(object),methodName, cscPtr, (0xFF & cscPtr->flags));*/ result = MethodDispatch(object, interp, objc-1, objv+1, cmd, object, NULL, methodName, cscPtr->frameType|NSF_CSC_TYPE_ENSEMBLE, - cscPtr->flags|NSF_CSC_IMMEDIATE); + (cscPtr->flags & 0xFF)|NSF_CSC_IMMEDIATE); goto obj_dispatch_ok; } } @@ -8309,6 +8309,9 @@ return CmdMethodDispatch(clientData, interp, objc, objv, methodName, object, cmd, NULL); } + /*fprintf(stderr, "cmdMethodDispatch %s.%s, cscPtr %p objflags %.6x\n", + ObjectName(object), methodName, cscPtr, object->flags); */ + return CmdMethodDispatch(cp, interp, objc, objv, methodName, object, cmd, cscPtr); } @@ -8442,9 +8445,10 @@ /* * Resetting mixin and filter stacks */ + if ((flags & NSF_CSC_MIXIN_STACK_PUSHED) && object->mixinStack) { - /*fprintf(stderr, "MixinStackPop %s.%s %p %s\n", - ObjectName(object),methodName, object->mixinStack, msg);*/ + /* fprintf(stderr, "MixinStackPop %s.%s %p %s\n", + ObjectName(object), methodName, object->mixinStack, msg);*/ MixinStackPop(object); } if ((flags & NSF_CSC_FILTER_STACK_PUSHED) && object->filterStack) { @@ -8592,6 +8596,9 @@ } } + /*fprintf(stderr, "MixinStackPush check for %p %s.%s objflags %.6x == %d\n", + object,ObjectName(object),methodName, objflags & NSF_MIXIN_ORDER_DEFINED_AND_VALID, + (objflags & NSF_MIXIN_ORDER_DEFINED_AND_VALID) == NSF_MIXIN_ORDER_DEFINED_AND_VALID);*/ /* * Check if a mixed in method has to be called. */ @@ -8726,6 +8733,10 @@ cscPtr->objv = objv+shift; } + /*fprintf(stderr, "MethodDispatch %s.%s %p flags %.6x cscPtr %p\n", + ObjectName(object), methodName, object->mixinStack, cscPtr->flags, + cscPtr);*/ + result = MethodDispatchCsc(clientData, interp, objc-shift, objv+shift, cscPtr, methodName, &validCscPtr); @@ -11385,8 +11396,6 @@ result = NextSearchMethod(object, interp, cscPtr, &cl, &methodName, &cmd, &isMixinEntry, &isFilterEntry, &endOfFilterChain, ¤tCmd); - fprintf(stderr, "findSelfNext %s object %p (%s) cl %p returns cmd %p\n", - methodName, object, ObjectName(object), cl, cmd); if (cmd) { Tcl_SetObjResult(interp, MethodHandleObj(cl ? (NsfObject *)cl : object, cl == NULL, methodName)); Index: library/xotcl/library/xotcl2.tcl =================================================================== diff -u -rc659c8c4e22424cf93551e33db9360bc235bee81 -r5fc10090d62e8d8a53d79f526debc705056f1007 --- library/xotcl/library/xotcl2.tcl (.../xotcl2.tcl) (revision c659c8c4e22424cf93551e33db9360bc235bee81) +++ library/xotcl/library/xotcl2.tcl (.../xotcl2.tcl) (revision 5fc10090d62e8d8a53d79f526debc705056f1007) @@ -75,7 +75,6 @@ "" {uplevel ::nsf::self} next { set handle [uplevel ::nsf::current $arg] - puts stderr handle=$handle method_handle_to_xotcl $handle } default {uplevel ::nsf::current $arg}