Index: generic/predefined.h =================================================================== diff -u -r091d3c94b06fd94c8e2bf39f806c43483909e2af -rb9eae4f9d548939af915f0f27141389d18172485 --- generic/predefined.h (.../predefined.h) (revision 091d3c94b06fd94c8e2bf39f806c43483909e2af) +++ generic/predefined.h (.../predefined.h) (revision b9eae4f9d548939af915f0f27141389d18172485) @@ -356,7 +356,7 @@ "::xotcl::RelationSlot create ${os}::Object::slot::filter -elementtype \"\"\n" "::xotcl::RelationSlot create ${os}::Class::slot::mixin -methodname class-mixin\n" "::xotcl::RelationSlot create ${os}::Class::slot::filter -elementtype \"\" \\\n" -"-methodname filter-mixin\n" +"-methodname class-filter\n" "::xotcl::RelationSlot create ${os}::Class::slot::object-mixin\n" "::xotcl::RelationSlot create ${os}::Class::slot::object-filter -elementtype \"\"}\n" "::xotcl::register_system_slots ::xotcl2\n" Index: generic/predefined.xotcl =================================================================== diff -u -r091d3c94b06fd94c8e2bf39f806c43483909e2af -rb9eae4f9d548939af915f0f27141389d18172485 --- generic/predefined.xotcl (.../predefined.xotcl) (revision 091d3c94b06fd94c8e2bf39f806c43483909e2af) +++ generic/predefined.xotcl (.../predefined.xotcl) (revision b9eae4f9d548939af915f0f27141389d18172485) @@ -678,7 +678,7 @@ ::xotcl::RelationSlot create ${os}::Class::slot::mixin -methodname class-mixin ::xotcl::RelationSlot create ${os}::Class::slot::filter -elementtype "" \ - -methodname filter-mixin + -methodname class-filter # Create two conveniance slots to allow configuration of # object-slots for classes via object-mixin Index: generic/xotcl.c =================================================================== diff -u -r091d3c94b06fd94c8e2bf39f806c43483909e2af -rb9eae4f9d548939af915f0f27141389d18172485 --- generic/xotcl.c (.../xotcl.c) (revision 091d3c94b06fd94c8e2bf39f806c43483909e2af) +++ generic/xotcl.c (.../xotcl.c) (revision b9eae4f9d548939af915f0f27141389d18172485) @@ -5876,21 +5876,29 @@ (b) the toplevel csc entry is not an filter on self */ + /*fprintf(stderr, "call %s, objflags %.6x, defined and valid %.6x doFilters %d guard count %d\n", + methodName, objflags, XOTCL_FILTER_ORDER_DEFINED_AND_VALID, + rst->doFilters, rst->guardCount);*/ + if (((objflags & XOTCL_FILTER_ORDER_DEFINED_AND_VALID) == XOTCL_FILTER_ORDER_DEFINED_AND_VALID) && rst->doFilters && !rst->guardCount) { XOTclCallStackContent *cscPtr = CallStackGetTopFrame(interp, NULL); - if (cscPtr && (object != cscPtr->self || - cscPtr->frameType != XOTCL_CSC_TYPE_ACTIVE_FILTER)) { - + /*fprintf(stderr, "... check ok, cscPtr = %p\n", cscPtr); + if (!cscPtr) { + tcl85showStack(interp); + }*/ + if (!cscPtr || (object != cscPtr->self || + cscPtr->frameType != XOTCL_CSC_TYPE_ACTIVE_FILTER)) { filterStackPushed = FilterStackPush(interp, object, methodObj); cmd = FilterSearchProc(interp, object, &object->filterStack->currentCmdPtr, &cl); if (cmd) { - /*fprintf(stderr, "filterSearchProc returned cmd %p proc %p\n", cmd, proc);*/ + /*fprintf(stderr, "filterSearchProc returned cmd %p\n", cmd);*/ frameType = XOTCL_CSC_TYPE_ACTIVE_FILTER; methodName = (char *)Tcl_GetCommandName(interp, cmd); } else { + /*fprintf(stderr, "filterSearchProc returned no cmd\n");*/ FilterStackPop(object); filterStackPushed = 0; } @@ -10857,8 +10865,8 @@ if (!withObjscope && withNonleaf) { Tcl_Command_flags(newCmd) |= XOTCL_CMD_NONLEAF_METHOD; - fprintf(stderr, "setting aliased for cmd %p %s flags %.6x, tcd = %p\n", - newCmd,methodName,Tcl_Command_flags(newCmd), tcd); + /*fprintf(stderr, "setting aliased for cmd %p %s flags %.6x, tcd = %p\n", + newCmd,methodName,Tcl_Command_flags(newCmd), tcd);*/ } result = ListMethodName(interp, object, cl == NULL, methodName); @@ -11958,9 +11966,8 @@ XOTclClassOpt *clopt = NULL, *nclopt = NULL; int i; - /*fprintf(stderr, "XOTclRelationCmd %s %d rel=%d val='%s'\n", - objectName(object), withPer_object, relationtype, value?ObjStr(value):"NULL");*/ - /* set withPer_object according to object- or class- */ + /*fprintf(stderr, "XOTclRelationCmd %s rel=%d val='%s'\n", + objectName(object), relationtype, valueObj ? ObjStr(valueObj) : "NULL");*/ switch (relationtype) { case RelationtypeObject_filterIdx: Index: generic/xotclShadow.c =================================================================== diff -u -rd1369a8b2d5b02d622a18cfccc2f9dd99959d05d -rb9eae4f9d548939af915f0f27141389d18172485 --- generic/xotclShadow.c (.../xotclShadow.c) (revision d1369a8b2d5b02d622a18cfccc2f9dd99959d05d) +++ generic/xotclShadow.c (.../xotclShadow.c) (revision b9eae4f9d548939af915f0f27141389d18172485) @@ -110,7 +110,6 @@ static int XOTcl_InfoFrameObjCmd(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int result; - CONST char* resultString; result = XOTclCallCommand(interp, XOTE_INFO_FRAME, objc, objv); @@ -143,7 +142,10 @@ Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewStringObj("object",6)); Tcl_ListObjAppendElement(interp, resultObj, cscPtr->self->cmdName); Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewStringObj("class",5)); - Tcl_ListObjAppendElement(interp, resultObj, cscPtr->cl ? cscPtr->cl->object.cmdName : XOTclGlobalObjects[XOTE_EMPTY]); + Tcl_ListObjAppendElement(interp, resultObj, + cscPtr->cl ? cscPtr->cl->object.cmdName : XOTclGlobalObjects[XOTE_EMPTY]); + Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewStringObj("frametype",9)); + Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewIntObj(cscPtr->frameType)); } } Index: tests/parameters.xotcl =================================================================== diff -u -r4bed7e95551d4d44fa8348c9f18e22dae85423fe -rb9eae4f9d548939af915f0f27141389d18172485 --- tests/parameters.xotcl (.../parameters.xotcl) (revision 4bed7e95551d4d44fa8348c9f18e22dae85423fe) +++ tests/parameters.xotcl (.../parameters.xotcl) (revision b9eae4f9d548939af915f0f27141389d18172485) @@ -165,9 +165,11 @@ C create c1 ? {C eval {:objectparameter}} \ - "-object-mixin:relation,slot=::xotcl2::Class::slot::object-mixin -mixin:relation,arg=class-mixin,slot=::xotcl2::Class::slot::mixin -superclass:relation,slot=::xotcl2::Class::slot::superclass -object-filter:relation,slot=::xotcl2::Class::slot::object-filter -filter:relation,arg=filter-mixin,slot=::xotcl2::Class::slot::filter -class:relation,slot=::xotcl2::Object::slot::class -parameter:method,optional -noinit:method,optional,noarg -volatile:method,optional,noarg arg:initcmd,optional" + "-object-mixin:relation,slot=::xotcl2::Class::slot::object-mixin -mixin:relation,arg=class-mixin,slot=::xotcl2::Class::slot::mixin -superclass:relation,slot=::xotcl2::Class::slot::superclass -object-filter:relation,slot=::xotcl2::Class::slot::object-filter -filter:relation,arg=class-filter,slot=::xotcl2::Class::slot::filter -class:relation,slot=::xotcl2::Object::slot::class -parameter:method,optional -noinit:method,optional,noarg -volatile:method,optional,noarg arg:initcmd,optional" + + ? {c1 eval {:objectparameter}} \ "-a:slot=::C::slot::a -b:boolean,slot=::C::slot::b {-c:slot=::C::slot::c 1} -mixin:relation,arg=object-mixin,slot=::xotcl2::Object::slot::mixin -filter:relation,slot=::xotcl2::Object::slot::filter -class:relation,slot=::xotcl2::Object::slot::class -noinit:method,optional,noarg -volatile:method,optional,noarg arg:initcmd,optional" }