Index: generic/nsf.c =================================================================== diff -u -r96f4410aa6510a664938b6ef6e5d43c3a3a18d68 -ra887920ace70f573d50f7324bc58f3ef3e45f6f6 --- generic/nsf.c (.../nsf.c) (revision 96f4410aa6510a664938b6ef6e5d43c3a3a18d68) +++ generic/nsf.c (.../nsf.c) (revision a887920ace70f573d50f7324bc58f3ef3e45f6f6) @@ -13815,7 +13815,7 @@ } assert(result == TCL_OK); - + fprintf(stderr, "... cmd %p\n", cmd); if (likely(cmd != NULL)) { /* * We found the method to dispatch. @@ -13846,9 +13846,9 @@ cscPtr->objv = objv+shift; } - /*fprintf(stderr, "MethodDispatchCsc %s.%s %p flags %.6x cscPtr %p\n", + fprintf(stderr, "MethodDispatchCsc %s.%s %p flags %.6x cscPtr %p\n", ObjectName(object), methodName, object->mixinStack, cscPtr->flags, - cscPtr);*/ + cscPtr); result = MethodDispatchCsc(clientData, interp, objc-shift, objv+shift, resolvedCmd, cscPtr, methodName, &isValidCsc); @@ -27754,11 +27754,12 @@ } else { assert(class != NULL); self = &class->object; + fprintf(stderr, "c_configureparameter obj %s (%s)\n", ObjectName(self), ClassName(class)); methodObj = NsfMethodObj(self, NSF_c_configureparameter_idx); } if (methodObj != NULL) { - /*fprintf(stderr, "calling %s %s\n", ObjectName(self), ObjStr(methodObj));*/ + fprintf(stderr, "calling %s %s\n", ObjectName(self), ObjStr(methodObj)); result = CallMethod(self, interp, methodObj, 2, NULL, NSF_CM_IGNORE_PERMISSIONS|NSF_CSC_IMMEDIATE); @@ -27862,12 +27863,14 @@ parsedParamPtr->paramDefs = clParsedParamPtr->paramDefs; parsedParamPtr->possibleUnknowns = clParsedParamPtr->possibleUnknowns; result = TCL_OK; + fprintf(stderr, "11111 class reuse obj param for obj %s (%s)\n", ObjectName(object), ClassName(class)); #if defined(PER_OBJECT_PARAMETER_CACHING) } else if (object != NULL && object->opt != NULL && object->opt->parsedParamPtr != NULL && object->opt->classParamPtrEpoch == RUNTIME_STATE(interp)->classParamPtrEpoch) { NsfParsedParam *objParsedParamPtr = object->opt->parsedParamPtr; + fprintf(stderr, "22222 obj reuse obj param for obj %s\n", ObjectName(object)); /*fprintf(stderr, "reuse obj param for obj %p %s paramPtr %p\n", (void *)object, ObjectName(object), (void *)objParsedParamPtr);*/ parsedParamPtr->paramDefs = objParsedParamPtr->paramDefs; @@ -27876,6 +27879,7 @@ #endif } else { + fprintf(stderr, "33333 no cache %s\n", ObjectName(object)); /* * There is no parameter definition available, get a new one in * the the string representation. Index: library/nx/nx.tcl =================================================================== diff -u -rf6ddb05b0fe131474053d905d3cf6b581a07488e -ra887920ace70f573d50f7324bc58f3ef3e45f6f6 --- library/nx/nx.tcl (.../nx.tcl) (revision f6ddb05b0fe131474053d905d3cf6b581a07488e) +++ library/nx/nx.tcl (.../nx.tcl) (revision a887920ace70f573d50f7324bc58f3ef3e45f6f6) @@ -1539,10 +1539,12 @@ ###################################################################### Object protected method __object_configureparameter {} { + puts stderr ---here1 set slotObjects [nsf::directdispatch [self] ::nsf::methods::object::info::lookupslots -type ::nx::Slot] return [::nsf::parameter::specs $slotObjects] } Class protected method __class_configureparameter {} { + puts stderr ---here2 set slotObjects [nsf::directdispatch [self] ::nsf::methods::class::info::slotobjects -closure -type ::nx::Slot] return [::nsf::parameter::specs $slotObjects] }