Index: generic/gentclAPI.decls =================================================================== diff -u -r90358010d417481db6164f879f01b41e789f09f7 -rd5785e8f405e03767db40836127cab24cf8f8b85 --- generic/gentclAPI.decls (.../gentclAPI.decls) (revision 90358010d417481db6164f879f01b41e789f09f7) +++ generic/gentclAPI.decls (.../gentclAPI.decls) (revision d5785e8f405e03767db40836127cab24cf8f8b85) @@ -262,11 +262,6 @@ # # info object methods # -infoObjectMethod alias XOTclObjInfoAliasMethod { - {-argName "object" -required 1 -type object} - {-argName "-definition"} - {-argName "name"} -} infoObjectMethod check XOTclObjInfoCheckMethod { {-argName "object" -required 1 -type object} } @@ -360,11 +355,6 @@ # # info class methods # -infoClassMethod alias XOTclClassInfoAliasMethod { - {-argName "object" -required 1 -type class} - {-argName "-definition"} - {-argName "name"} -} infoClassMethod heritage XOTclClassInfoHeritageMethod { {-argName "class" -required 1 -type class} {-argName "pattern"} Index: generic/tclAPI.h =================================================================== diff -u -r90358010d417481db6164f879f01b41e789f09f7 -rd5785e8f405e03767db40836127cab24cf8f8b85 --- generic/tclAPI.h (.../tclAPI.h) (revision 90358010d417481db6164f879f01b41e789f09f7) +++ generic/tclAPI.h (.../tclAPI.h) (revision d5785e8f405e03767db40836127cab24cf8f8b85) @@ -101,7 +101,6 @@ static int XOTclCNewMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclCRecreateMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclCSetterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclClassInfoAliasMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclClassInfoFilterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclClassInfoFilterguardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclClassInfoForwardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); @@ -118,7 +117,6 @@ static int XOTclClassInfoSlotsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclClassInfoSubclassMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclClassInfoSuperclassMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclObjInfoAliasMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclObjInfoCheckMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclObjInfoChildrenMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclObjInfoClassMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); @@ -191,7 +189,6 @@ static int XOTclCNewMethod(Tcl_Interp *interp, XOTclClass *cl, XOTclObject *withChildof, int nobjc, Tcl_Obj *CONST nobjv[]); static int XOTclCRecreateMethod(Tcl_Interp *interp, XOTclClass *cl, Tcl_Obj *name, int objc, Tcl_Obj *CONST objv[]); static int XOTclCSetterMethod(Tcl_Interp *interp, XOTclClass *cl, int withPer_object, char *name); -static int XOTclClassInfoAliasMethod(Tcl_Interp *interp, XOTclClass *object, int withDefinition, char *name); static int XOTclClassInfoFilterMethod(Tcl_Interp *interp, XOTclClass *class, int withGuards, char *pattern); static int XOTclClassInfoFilterguardMethod(Tcl_Interp *interp, XOTclClass *class, char *filter); static int XOTclClassInfoForwardMethod(Tcl_Interp *interp, XOTclClass *class, int withDefinition, char *name); @@ -208,7 +205,6 @@ static int XOTclClassInfoSlotsMethod(Tcl_Interp *interp, XOTclClass *class); static int XOTclClassInfoSubclassMethod(Tcl_Interp *interp, XOTclClass *class, int withClosure, char *patternString, XOTclObject *patternObj); static int XOTclClassInfoSuperclassMethod(Tcl_Interp *interp, XOTclClass *class, int withClosure, Tcl_Obj *pattern); -static int XOTclObjInfoAliasMethod(Tcl_Interp *interp, XOTclObject *object, int withDefinition, char *name); static int XOTclObjInfoCheckMethod(Tcl_Interp *interp, XOTclObject *object); static int XOTclObjInfoChildrenMethod(Tcl_Interp *interp, XOTclObject *object, char *pattern); static int XOTclObjInfoClassMethod(Tcl_Interp *interp, XOTclObject *object); @@ -282,7 +278,6 @@ XOTclCNewMethodIdx, XOTclCRecreateMethodIdx, XOTclCSetterMethodIdx, - XOTclClassInfoAliasMethodIdx, XOTclClassInfoFilterMethodIdx, XOTclClassInfoFilterguardMethodIdx, XOTclClassInfoForwardMethodIdx, @@ -299,7 +294,6 @@ XOTclClassInfoSlotsMethodIdx, XOTclClassInfoSubclassMethodIdx, XOTclClassInfoSuperclassMethodIdx, - XOTclObjInfoAliasMethodIdx, XOTclObjInfoCheckMethodIdx, XOTclObjInfoChildrenMethodIdx, XOTclObjInfoClassMethodIdx, @@ -647,26 +641,6 @@ } static int -XOTclClassInfoAliasMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - parseContext pc; - - if (ArgumentParse(interp, objc, objv, NULL, objv[0], - method_definitions[XOTclClassInfoAliasMethodIdx].paramDefs, - method_definitions[XOTclClassInfoAliasMethodIdx].nrParameters, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { - XOTclClass *object = (XOTclClass *)pc.clientData[0]; - int withDefinition = (int )pc.clientData[1]; - char *name = (char *)pc.clientData[2]; - - parseContextRelease(&pc); - return XOTclClassInfoAliasMethod(interp, object, withDefinition, name); - - } -} - -static int XOTclClassInfoFilterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; @@ -1052,26 +1026,6 @@ } static int -XOTclObjInfoAliasMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - parseContext pc; - - if (ArgumentParse(interp, objc, objv, NULL, objv[0], - method_definitions[XOTclObjInfoAliasMethodIdx].paramDefs, - method_definitions[XOTclObjInfoAliasMethodIdx].nrParameters, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { - XOTclObject *object = (XOTclObject *)pc.clientData[0]; - int withDefinition = (int )pc.clientData[1]; - char *name = (char *)pc.clientData[2]; - - parseContextRelease(&pc); - return XOTclObjInfoAliasMethod(interp, object, withDefinition, name); - - } -} - -static int XOTclObjInfoCheckMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; @@ -2204,11 +2158,6 @@ {"-per-object", 0, 0, convertToBoolean}, {"name", 1, 0, convertToString}} }, -{"::xotcl::cmd::ClassInfo::alias", XOTclClassInfoAliasMethodStub, 3, { - {"object", 1, 0, convertToClass}, - {"-definition", 0, 0, convertToString}, - {"name", 0, 0, convertToString}} -}, {"::xotcl::cmd::ClassInfo::filter", XOTclClassInfoFilterMethodStub, 3, { {"class", 1, 0, convertToClass}, {"-guards", 0, 0, convertToString}, @@ -2284,11 +2233,6 @@ {"-closure", 0, 0, convertToString}, {"pattern", 0, 0, convertToTclobj}} }, -{"::xotcl::cmd::ObjectInfo::alias", XOTclObjInfoAliasMethodStub, 3, { - {"object", 1, 0, convertToObject}, - {"-definition", 0, 0, convertToString}, - {"name", 0, 0, convertToString}} -}, {"::xotcl::cmd::ObjectInfo::check", XOTclObjInfoCheckMethodStub, 1, { {"object", 1, 0, convertToObject}} }, Index: generic/xotcl.c =================================================================== diff -u -r90358010d417481db6164f879f01b41e789f09f7 -rd5785e8f405e03767db40836127cab24cf8f8b85 --- generic/xotcl.c (.../xotcl.c) (revision 90358010d417481db6164f879f01b41e789f09f7) +++ generic/xotcl.c (.../xotcl.c) (revision d5785e8f405e03767db40836127cab24cf8f8b85) @@ -9620,12 +9620,16 @@ static void AppendMethodRegistration(Tcl_Interp *interp, Tcl_Obj *listObj, char *registerCmdName, - XOTclObject *object, char *methodName, Tcl_Command cmd, int withPer_object) { + XOTclObject *object, char *methodName, Tcl_Command cmd, + int withObjscope, int withPer_object) { Tcl_ListObjAppendElement(interp, listObj, object->cmdName); Tcl_ListObjAppendElement(interp, listObj, Tcl_NewStringObj(registerCmdName,-1)); if (withPer_object) { Tcl_ListObjAppendElement(interp, listObj, Tcl_NewStringObj("-per-object",-1)); } + if (withObjscope) { + Tcl_ListObjAppendElement(interp, listObj, Tcl_NewStringObj("-objscope",-1)); + } Tcl_ListObjAppendElement(interp, listObj, Tcl_NewStringObj(methodName,-1)); } @@ -9714,7 +9718,8 @@ resultObj = Tcl_NewListObj(0, NULL); /* todo: don't hard-code registering command name "method" */ - AppendMethodRegistration(interp, resultObj, "method", object, methodName, cmd, withPer_object); + AppendMethodRegistration(interp, resultObj, "method", object, methodName, cmd, + 0, withPer_object); ListCmdParams(interp, cmd, methodName, 0); Tcl_ListObjAppendElement(interp, resultObj, Tcl_GetObjResult(interp)); ListProcBody(interp, GetTclProcFromCommand(cmd), methodName); @@ -9752,7 +9757,8 @@ if (clientData) { resultObj = Tcl_NewListObj(0, NULL); /* todo: don't hard-code registering command name "forward" */ - AppendMethodRegistration(interp, resultObj, "forward", object, methodName, cmd, withPer_object); + AppendMethodRegistration(interp, resultObj, "forward", object, methodName, cmd, + 0, withPer_object); AppendForwardDefinition(interp, resultObj, clientData); Tcl_SetObjResult(interp, resultObj); break; @@ -9769,7 +9775,8 @@ case InfomethodsubcmdDefinitionIdx: resultObj = Tcl_NewListObj(0, NULL); /* todo: don't hard-code registering command name "setter" */ - AppendMethodRegistration(interp, resultObj, "setter", object, methodName, cmd, withPer_object); + AppendMethodRegistration(interp, resultObj, "setter", object, methodName, cmd, + 0, withPer_object); Tcl_SetObjResult(interp, resultObj); break; } @@ -9784,10 +9791,15 @@ { Tcl_Obj *entryObj = AliasGet(interp, object->cmdName, methodName, withPer_object); if (entryObj) { + int nrElements; + Tcl_Obj **listElements; resultObj = Tcl_NewListObj(0, NULL); + Tcl_ListObjGetElements(interp, entryObj, &nrElements, &listElements); /* todo: don't hard-code registering command name "alias" */ - AppendMethodRegistration(interp, resultObj, "alias", object, methodName, cmd, withPer_object); - Tcl_ListObjAppendElement(interp, resultObj, entryObj); + AppendMethodRegistration(interp, resultObj, "alias", object, + methodName, cmd, + nrElements!=1, withPer_object); + Tcl_ListObjAppendElement(interp, resultObj, listElements[nrElements-1]); Tcl_SetObjResult(interp, resultObj); break; } @@ -9937,29 +9949,6 @@ } static int -ListAlias(Tcl_Interp *interp, Tcl_HashTable *table, char *pattern, int withDefinition, - XOTclObject *object, int withPer_object) { - int result; - - if (withDefinition) { - Tcl_HashEntry *hPtr = table && pattern ? XOTcl_FindHashEntry(table, pattern) : 0; - /* notice: we don't use pattern for wildcard matching here; - pattern can only contain wildcards when used without - "-definition" */ - if (hPtr) { - Tcl_Obj *entryObj = AliasGet(interp, object->cmdName, pattern, withPer_object); - if (entryObj) { - Tcl_SetObjResult(interp, entryObj); - } - } - result = TCL_OK; - } else { - result = ListMethodKeys(interp, table, pattern, XOTCL_METHODTYPE_ALIAS, NULL, object, withPer_object); - } - return result; -} - -static int ListForward(Tcl_Interp *interp, Tcl_HashTable *table, char *pattern, int withDefinition) { if (withDefinition) { Tcl_HashEntry *hPtr = table && pattern ? XOTcl_FindHashEntry(table, pattern) : 0; @@ -12582,12 +12571,6 @@ /*************************** * Begin Object Info Methods ***************************/ -static int XOTclObjInfoAliasMethod(Tcl_Interp *interp, XOTclObject *object, int withDefinition, char *pattern) { - return object->nsPtr ? - ListAlias(interp, Tcl_Namespace_cmdTable(object->nsPtr), pattern, withDefinition, object, 1) : - TCL_OK; -} - static int XOTclObjInfoCheckMethod(Tcl_Interp *interp, XOTclObject *object) { return AssertionListCheckOption(interp, object); } @@ -12788,12 +12771,6 @@ /*************************** * Begin Class Info methods ***************************/ -static int XOTclClassInfoAliasMethod(Tcl_Interp *interp, XOTclClass *class, - int withDefinition, char *pattern) { - Tcl_HashTable *table = Tcl_Namespace_cmdTable(class->nsPtr); - return ListAlias(interp, table, pattern, withDefinition, &class->object, 0); -} - static int XOTclClassInfoHeritageMethod(Tcl_Interp *interp, XOTclClass *cl, char *pattern) { XOTclClasses *pl = ComputeOrder(cl, cl->order, Super); Tcl_ResetResult(interp); Index: tests/aliastest.xotcl =================================================================== diff -u -r8c7e00e2907123cab46942451824724f71f658c8 -rd5785e8f405e03767db40836127cab24cf8f8b85 --- tests/aliastest.xotcl (.../aliastest.xotcl) (revision 8c7e00e2907123cab46942451824724f71f658c8) +++ tests/aliastest.xotcl (.../aliastest.xotcl) (revision d5785e8f405e03767db40836127cab24cf8f8b85) @@ -17,17 +17,19 @@ # the system methods of Object are either alias or forwarders ? {lsort [::xotcl::Slot info methods -defined -methodtype alias]} {assign get} -? {::xotcl::Slot info alias -definition get} "::xotcl::setinstvar" ? {::xotcl::Slot info method definition get} "::xotcl::Slot alias get ::xotcl::setinstvar" -? {::xotcl::Object info alias -definition set} "-objscope ::set" +set cmd "::xotcl2::Object alias -objscope set ::set" +eval $cmd +? {Object info method definition set} $cmd + Class create Base Base method foo {{-x 1}} {return $x} Class create Foo ::xotcl::alias ::Foo foo ::xotcl::classes::Base::foo -? {Foo info alias -definition foo} "::xotcl::classes::Base::foo" +? {Foo info method definition foo} "::Foo alias foo ::xotcl::classes::Base::foo" Foo create f1 ? {f1 foo} 1 @@ -40,7 +42,7 @@ ? {Foo info methods -defined -methodtype alias} "" ? {Base info methods -defined -methodtype scripted} {} ? {Foo info methods -defined -methodtype scripted} {} -? {Foo info alias -definition foo} "" +? {Foo info method definition foo} "" Base method foo {{-x 1}} {return $x} @@ -78,15 +80,15 @@ ::xotcl::alias S BAR ::xotcl::classes::T::FOO ? {T info methods -defined -methodtype alias} "FOO" -? {T info alias -definition FOO} "::xotcl::classes::T::foo" +? {T info method definition FOO} "::T alias FOO ::xotcl::classes::T::foo" ? {lsort [T info methods -defined -methodtype scripted]} {FOO foo} ? {S info methods -defined -methodtype scripted} {BAR} T method FOO {} {} ? {T info methods -defined -methodtype scripted} {foo} ? {S info methods -defined -methodtype scripted} {BAR} ? {s BAR} ::S->foo ? {t foo} ::T->foo -? {S info alias -definition BAR} "::xotcl::classes::T::FOO" +? {S info method definition BAR} "::S alias BAR ::xotcl::classes::T::FOO" T method foo {} {} @@ -112,7 +114,7 @@ ? {lsort [T info -per-object methods -defined -methodtype alias]} {BAR FOO ZAP} ? {lsort [T info -per-object methods -defined -methodtype scripted]} {BAR FOO ZAP bar} ? {t foo} ::T->foo -? {T info -per-object alias -definition ZAP} {::T::BAR} +? {T info -per-object method definition ZAP} {::T alias -per-object ZAP ::T::BAR} ? {T FOO} ->foo ? {T BAR} ->foo @@ -275,25 +277,25 @@ ? {info exists ::xotcl::alias(::C,FOO,0)} 1 ? {array get ::xotcl::alias ::o,FOO,1} "::o,FOO,1 ::foo" ? {array get ::xotcl::alias ::C,FOO,0} "::C,FOO,0 ::foo" -? {o info alias -definition FOO} ::foo -? {C info alias -definition FOO} ::foo +? {o info method definition FOO} "::o alias -per-object FOO ::foo" +? {C info method definition FOO} "::C alias FOO ::foo" ::xotcl::alias o FOO ::o::bar ? {info exists ::xotcl::alias(::o,FOO,1)} 1 ? {array get ::xotcl::alias ::o,FOO,1} "::o,FOO,1 ::o::bar" -? {o info alias -definition FOO} ::o::bar +? {o info method definition FOO} "::o alias -per-object FOO ::o::bar" # AliasDelete in XOTclRemovePMethod o method FOO {} {} ? {info exists ::xotcl::alias(::o,FOO,1)} 0 ? {array get ::xotcl::alias ::o,FOO,1} "" -? {o info alias -definition FOO} "" +? {o info method definition FOO} "" # AliasDelete in XOTclRemoveIMethod C method FOO {} {} ? {info exists ::xotcl::alias(::C,FOO,0)} 0 ? {array get ::xotcl::alias ::C,FOO,0} "" -? {C info alias -definition FOO} "" +? {C info method definition FOO} "" ::xotcl::alias ::o BAR ::foo ::xotcl::alias ::C BAR ::foo @@ -331,18 +333,18 @@ ? {info exists ::xotcl::alias(::C,FOO,0)} 1 unset ::xotcl::alias(::C,FOO,0) ? {info exists ::xotcl::alias(::C,FOO,0)} 0 -? {C info alias -definition FOO} "" +? {C info method definition FOO} "" ? {C info methods -defined -methodtype alias} FOO rename ::foo "" ? {C info methods -defined -methodtype alias} "" ? {info exists ::xotcl::alias(::C,FOO,0)} 0 -? {C info alias -definition FOO} "" +? {C info method definition FOO} "" # # test renaming of Tcl proc (actually sensed by the alias, though not # reflected by the alias definition store) # a) is this acceptable? -# b) sync ::xotcl::alias upon "info alias" calls? is this feasible, +# b) sync ::xotcl::alias upon "info method definition" calls? is this feasible, # e.g. through rename traces? # @@ -356,6 +358,6 @@ ? {info exists ::xotcl::alias(::C,FOO,0)} 1 ? {C info methods -defined -methodtype alias} FOO ? {c FOO} ::c->foo2 -? {C info alias -definition FOO} "::foo"; # should be ::foo2 (!) +? {C info method definition FOO} "::C alias FOO ::foo"; # should be ::foo2 (!) Index: tests/testx.xotcl =================================================================== diff -u -rc09536ecf46b5a272a87a42a7deb59b852df5ec8 -rd5785e8f405e03767db40836127cab24cf8f8b85 --- tests/testx.xotcl (.../testx.xotcl) (revision c09536ecf46b5a272a87a42a7deb59b852df5ec8) +++ tests/testx.xotcl (.../testx.xotcl) (revision d5785e8f405e03767db40836127cab24cf8f8b85) @@ -3335,7 +3335,7 @@ ::errorCheck [o mixin XY4] ::XY4 " __unknown XY4" } - ::errorCheck [UnknownClass info info] {valid options are: alias, args, body, check, children, class, classchildren, classparent, commands, default, filter, filterguard, forward, hasnamespace, heritage, info, instances, instargs, instbody, instcommands, instdefault, instfilter, instfilterguard, instforward, instinvar, instmixin, instmixinguard, instmixinof, instnonposargs, instparametercmd, instpost, instpre, instprocs, invar, is, methods, mixin, mixinguard, mixinof, nonposargs, parameter, parametercmd, parent, post, pre, precedence, procs, slotobjects, slots, subclass, superclass, vars} "info info" + ::errorCheck [UnknownClass info info] {valid options are: args, body, check, children, class, classchildren, classparent, commands, default, filter, filterguard, forward, hasnamespace, heritage, info, instances, instargs, instbody, instcommands, instdefault, instfilter, instfilterguard, instforward, instinvar, instmixin, instmixinguard, instmixinof, instnonposargs, instparametercmd, instpost, instpre, instprocs, invar, is, methods, mixin, mixinguard, mixinof, nonposargs, parameter, parametercmd, parent, post, pre, precedence, procs, slotobjects, slots, subclass, superclass, vars} "info info" # clear unknown handler to avoid strange results later Class proc __unknown "" ""