Index: generic/predefined.h =================================================================== diff -u -r033a6b832c7cc7d99894422d63d9ff944c09c35d -rf0260303acd3dd10018bbcbb28fc5d954dca2dc6 --- generic/predefined.h (.../predefined.h) (revision 033a6b832c7cc7d99894422d63d9ff944c09c35d) +++ generic/predefined.h (.../predefined.h) (revision f0260303acd3dd10018bbcbb28fc5d954dca2dc6) @@ -202,7 +202,8 @@ "{multivalued true}\n" "{elementtype ::xotcl2::Class}}\n" "::xotcl::relation ::xotcl::InfoSlot superclass ::xotcl::Slot\n" -"::xotcl::InfoSlot method get {obj -per-object:switch prop} {$obj info $prop}\n" +"::xotcl::InfoSlot method get {obj -per-object:switch prop} {\n" +"$obj info {*}[expr {${per-object} ? \"-per-object\" : \"\"}] $prop}\n" "::xotcl::InfoSlot method add {obj -per-object:switch prop value {pos 0}} {\n" "puts stderr infoslot-add-[self args]\n" "if {![set .multivalued]} {\n" Index: generic/predefined.xotcl =================================================================== diff -u -r033a6b832c7cc7d99894422d63d9ff944c09c35d -rf0260303acd3dd10018bbcbb28fc5d954dca2dc6 --- generic/predefined.xotcl (.../predefined.xotcl) (revision 033a6b832c7cc7d99894422d63d9ff944c09c35d) +++ generic/predefined.xotcl (.../predefined.xotcl) (revision f0260303acd3dd10018bbcbb28fc5d954dca2dc6) @@ -404,7 +404,9 @@ {elementtype ::xotcl2::Class} } ::xotcl::relation ::xotcl::InfoSlot superclass ::xotcl::Slot -::xotcl::InfoSlot method get {obj -per-object:switch prop} {$obj info $prop} +::xotcl::InfoSlot method get {obj -per-object:switch prop} { + $obj info {*}[expr {${per-object} ? "-per-object" : ""}] $prop +} ::xotcl::InfoSlot method add {obj -per-object:switch prop value {pos 0}} { puts stderr infoslot-add-[self args] if {![set .multivalued]} { Index: generic/xotcl.c =================================================================== diff -u -r033a6b832c7cc7d99894422d63d9ff944c09c35d -rf0260303acd3dd10018bbcbb28fc5d954dca2dc6 --- generic/xotcl.c (.../xotcl.c) (revision 033a6b832c7cc7d99894422d63d9ff944c09c35d) +++ generic/xotcl.c (.../xotcl.c) (revision f0260303acd3dd10018bbcbb28fc5d954dca2dc6) @@ -8472,7 +8472,7 @@ if (c == '%') { Tcl_Obj *list = NULL, **listElements; - int nrArgs = objc-firstPosArg, nrElements = 0; + int nrArgs = objc-1, nrPosArgs = objc-firstPosArg, nrElements = 0; char *firstActualArgument = nrArgs>0 ? ObjStr(objv[1]) : NULL; c = *++forwardArgString; c1 = *(forwardArgString+1); @@ -8509,10 +8509,11 @@ /*fprintf(stderr, "nrElements=%d, nra=%d firstPos %d objc %d\n", nrElements ,nrArgs, firstPosArg, objc);*/ - if (nrElements > nrArgs) { + if (nrElements > nrPosArgs) { /* insert default subcommand depending on number of arguments */ - /*fprintf(stderr, "inserting listElements[%d] '%s'\n", nrArgs, ObjStr(listElements[nrArgs]));*/ - *out = listElements[nrArgs]; + /*fprintf(stderr, "inserting listElements[%d] '%s'\n", nrPosArgs, + ObjStr(listElements[nrPosArgs]));*/ + *out = listElements[nrPosArgs]; } else if (objc<=1) { return XOTclObjErrArgCnt(interp, objv[0], NULL, "option"); } else { @@ -8728,6 +8729,7 @@ /* if we have nonpos args, determine the first pos arg position for %1 */ if (tcd->hasNonposArgs) { + firstPosArg = objc; for (j=outputArg; jopt; - XOTclCmdList *h; - - if (opt && opt->instmixins) { - XOTclClass *mixinCl = XOTclpGetClass(interp, mixin); - Tcl_Command mixinCmd = NULL; - if (mixinCl) { - mixinCmd = Tcl_GetCommandFromObj(interp, mixinCl->object.cmdName); - } - if (mixinCmd) { - h = CmdListFindCmdInList(mixinCmd, opt->instmixins); - if (h) { - if (h->clientData) - GuardDel((XOTclCmdList*) h); - GuardAdd(interp, h, guard); - MixinInvalidateObjOrders(interp, cl); - return TCL_OK; - } - } - } - - return XOTclVarErrMsg(interp, "Instmixinguard: can't find mixin ", - mixin, " on ", className(cl), (char *) NULL); -} /* TODO move me at the right place */ static int XOTclCSetterMethod(Tcl_Interp *interp, XOTclClass *cl, int withPer_object, char *name) { if (withPer_object) {