Index: TODO =================================================================== diff -u -rdadc7c6c6858ff3b816ff4cc585e0d76684ec374 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- TODO (.../TODO) (revision dadc7c6c6858ff3b816ff4cc585e0d76684ec374) +++ TODO (.../TODO) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -4232,18 +4232,18 @@ - extended regression test nsf.c -- added functiality for "cget" to call parameter-methods +- added functionality for "cget" to call parameter-methods (e.g. "... cget -class"). The method cget calls either "/slot/ get ..." (when slot=... is provided in the parameter spec) or it assumes that the method without argument returns the value - added "::nsf::object::property /obj/ volatile" to query whether a object is volatile or not -- "/obj/ cget -volatile" returns now the volatial state of the object +- "/obj/ cget -volatile" returns now the volatile state of the object - factored out ParameterMethodDispatch() from OConfigureMethod() - extended regression test nx.tcl: -- change parameter name in "/cls/ info paramameter ... ?pattern?" +- change parameter name in "/cls/ info parameter ... ?pattern?" from "name" to "pattern" - changed name "/obj|cls/ slot info definition" to "/obj|cls/ slot info definition" since result is a set @@ -4255,7 +4255,7 @@ nsf.c: - factored out ParameterMethodForwardDispatch() to call a parameter method defined as a forwarder - the smae way from "configure" and "cget" + the same way from "configure" and "cget" - extended regression test nx.tcl: @@ -4357,8 +4357,57 @@ "/obj/ info object slot definition|..." for consistency - provided "parametersyntax()" for "object mixin" and "object filter" + +Method and configure parameter reform: +- unify handling / naming / parameterization of method parameters and + configure parameters + +- New Interface: + + /cls/ info configure parameters ?pattern? -> list of params + /cls/ info configure syntax -> syntax output + + /obj/ info method parameters /methodName/ ?/pattern/? -> list of params + /obj/ info method syntax -> syntax output + + /obj/ info lookup configure parameter ?/pattern/? -> list of params + /obj/ info lookup configure syntax -> syntax output + + /cls/ info parameter list|name|syntax /param/ -> value + + "... method syntax" and "... configure syntax" return the full method/configure call, + and not only the parameters as in previous versions. Therefore, providing a pattern + could lead to unexpected results, therefore the argument was dropped. + +- Replacements relative to 2.0b4: + + {/cls/ info parameter definitions} -> {/cls/ info configure parameters} + {/cls/ info parameter definitions x} -> {/cls/ info configure parameters x} + {/cls/ info parameter syntax ?pattern?} -> {/cls/ info configure syntax} + {/obj/ info lookup parameter definitions ?pattern?} -> {/obj/ info lookup configure parameters ?pattern?} + {/obj/ info lookup parameter syntax ?pattern?} -> {/obj/ info lookup configure syntax} + +- Dropped calls: + + /cls/ info parameter list ?/pattern/? + /cls/ info parameter names ?/pattern/? + + syntax of a single parameter via this interface + /cls/ info configure syntax ?/pattern/? + + /obj/ info lookup parameter names ?/pattern/? + /obj/ info lookup parameter list ?/pattern/? + ======================================================================== TODO: + +- handling of slots/properties/variables +- NsfParameterGetCmd should/could handle more than "list|name|syntax" +- update documentation +- maybe remove unneeded values, align naming in enumeration of first arg of + *::info::objectparameter and *::info::method +- maybe change ::nsf::parametersyntax(..) to ::nsf::parameter::syntax(..) + - reconsider #? {c1 cget -mixin} "" ? {c1 cget -object-mixin} "" Index: generic/nsf.c =================================================================== diff -u -r1907ffde1a2f350e2e96f3b8c55cfa36b7b97320 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- generic/nsf.c (.../nsf.c) (revision 1907ffde1a2f350e2e96f3b8c55cfa36b7b97320) +++ generic/nsf.c (.../nsf.c) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -20982,20 +20982,12 @@ int result; result = ParamDefsParse(interp, NULL, paramsObj, - NSF_DISALLOWED_ARG_OBJECT_PARAMETER, 0, + NSF_DISALLOWED_ARG_OBJECT_PARAMETER, 1, &parsedParam); if (result != TCL_OK) { return result; } - if (parsedParam.paramDefs == NULL) { - switch (parametersubcmd) { - case ParametersubcmdNameIdx: - Tcl_SetObjResult(interp, parameterspec); - return TCL_OK; - default: return NsfPrintError(interp, "flag not implemented"); - } - } paramsPtr = parsedParam.paramDefs->paramsPtr; switch (parametersubcmd) { @@ -23333,6 +23325,23 @@ } /* +classMethod getCachedParameters NsfCGetCachendParameters { +} +*/ +static int +NsfCGetCachendParameters(Tcl_Interp *interp, NsfClass *class) { + + if (likely(class && class->parsedParamPtr)) { + Tcl_Obj *listObj; + + listObj = ListParamDefs(interp, class->parsedParamPtr->paramDefs->paramsPtr, NSF_PARAMS_PARAMETER); + Tcl_SetObjResult(interp, listObj); + DECR_REF_COUNT2("paramDefsObj", listObj); + } + return TCL_OK; +} + +/* classMethod mixinguard NsfCMixinGuardMethod { {-argName "mixin" -required 1 -type tclobj} {-argName "guard" -required 1 -type tclobj} Index: generic/nsf.tcl =================================================================== diff -u -r35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- generic/nsf.tcl (.../nsf.tcl) (revision 35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30) +++ generic/nsf.tcl (.../nsf.tcl) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -185,12 +185,24 @@ } return /tmp } - namespace export tmpdir # if HOME is not set, and ~ is resolved, Tcl chokes on that if {![info exists ::env(HOME)]} {set ::env(HOME) /root} + # + # parameter support + # + proc ::nsf::parameter::filter {defs pattern} { + set result {} + foreach def $defs { + if {[string match $pattern [::nsf::parameter::get name $def]]} { + lappend result $def + } + } + return $result + } + set ::nsf::parametersyntax(::nsf::xotclnext) "?--noArgs? ?/arg .../?" set ::nsf::parametersyntax(::nsf::__unset_unknown_args) "" set ::nsf::parametersyntax(::nsf::exithandler) "?get?|?set /cmds/?|?unset?" Index: generic/nsfAPI.decls =================================================================== diff -u -r7a1cdfcb9fbb66d49d824aa1c12547be59f590c2 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- generic/nsfAPI.decls (.../nsfAPI.decls) (revision 7a1cdfcb9fbb66d49d824aa1c12547be59f590c2) +++ generic/nsfAPI.decls (.../nsfAPI.decls) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -336,6 +336,9 @@ {-argName "guard" -required 1 -type tclobj} } +classMethod getCachedParameters NsfCGetCachendParameters { +} + classMethod mixinguard NsfCMixinGuardMethod { {-argName "mixin" -required 1 -type tclobj} {-argName "guard" -required 1 -type tclobj} Index: generic/nsfAPI.h =================================================================== diff -u -r7a1cdfcb9fbb66d49d824aa1c12547be59f590c2 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- generic/nsfAPI.h (.../nsfAPI.h) (revision 7a1cdfcb9fbb66d49d824aa1c12547be59f590c2) +++ generic/nsfAPI.h (.../nsfAPI.h) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -236,7 +236,7 @@ /* just to define the symbol */ -static Nsf_methodDefinition method_definitions[105]; +static Nsf_methodDefinition method_definitions[106]; static CONST char *method_command_namespace_names[] = { "::nsf::methods::object::info", @@ -248,6 +248,7 @@ static int NsfCCreateMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int NsfCDeallocMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int NsfCFilterGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int NsfCGetCachendParametersStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int NsfCMixinGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int NsfCNewMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int NsfCRecreateMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); @@ -353,6 +354,7 @@ static int NsfCCreateMethod(Tcl_Interp *interp, NsfClass *cl, CONST char *objectName, int objc, Tcl_Obj *CONST objv[]); static int NsfCDeallocMethod(Tcl_Interp *interp, NsfClass *cl, Tcl_Obj *object); static int NsfCFilterGuardMethod(Tcl_Interp *interp, NsfClass *cl, CONST char *filter, Tcl_Obj *guard); +static int NsfCGetCachendParameters(Tcl_Interp *interp, NsfClass *cl); static int NsfCMixinGuardMethod(Tcl_Interp *interp, NsfClass *cl, Tcl_Obj *mixin, Tcl_Obj *guard); static int NsfCNewMethod(Tcl_Interp *interp, NsfClass *cl, Tcl_Obj *withChildof, int nobjc, Tcl_Obj *CONST nobjv[]); static int NsfCRecreateMethod(Tcl_Interp *interp, NsfClass *cl, Tcl_Obj *objectName, int objc, Tcl_Obj *CONST objv[]); @@ -459,6 +461,7 @@ NsfCCreateMethodIdx, NsfCDeallocMethodIdx, NsfCFilterGuardMethodIdx, + NsfCGetCachendParametersIdx, NsfCMixinGuardMethodIdx, NsfCNewMethodIdx, NsfCRecreateMethodIdx, @@ -638,6 +641,23 @@ } static int +NsfCGetCachendParametersStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + NsfClass *cl = NsfObjectToClass(clientData); + assert(objc > 0); + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", ObjStr(objv[0])); + + + if (unlikely(objc != 1)) { + return NsfArgumentError(interp, "too many arguments:", + method_definitions[NsfCGetCachendParametersIdx].paramDefs, + NULL, objv[0]); + } + + return NsfCGetCachendParameters(interp, cl); + +} + +static int NsfCMixinGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); @@ -2651,7 +2671,7 @@ } } -static Nsf_methodDefinition method_definitions[105] = { +static Nsf_methodDefinition method_definitions[106] = { {"::nsf::methods::class::alloc", NsfCAllocMethodStub, 1, { {"objectName", NSF_ARG_REQUIRED, 1, Nsf_ConvertToTclobj, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}} }, @@ -2666,6 +2686,9 @@ {"filter", NSF_ARG_REQUIRED, 1, Nsf_ConvertToString, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, {"guard", NSF_ARG_REQUIRED, 1, Nsf_ConvertToTclobj, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}} }, +{"::nsf::methods::class::getCachedParameters", NsfCGetCachendParametersStub, 0, { + {NULL, 0, 0, NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}} +}, {"::nsf::methods::class::mixinguard", NsfCMixinGuardMethodStub, 2, { {"mixin", NSF_ARG_REQUIRED, 1, Nsf_ConvertToTclobj, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, {"guard", NSF_ARG_REQUIRED, 1, Nsf_ConvertToTclobj, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}} Index: generic/nsfAPI.nxdocindex =================================================================== diff -u -r102a1a9f4f678f98e7bcf7648ad1714147a29a47 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- generic/nsfAPI.nxdocindex (.../nsfAPI.nxdocindex) (revision 102a1a9f4f678f98e7bcf7648ad1714147a29a47) +++ generic/nsfAPI.nxdocindex (.../nsfAPI.nxdocindex) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -62,6 +62,7 @@ set ::nxdoc::include(::nsf::methods::class::create) 0 set ::nxdoc::include(::nsf::methods::class::dealloc) 0 set ::nxdoc::include(::nsf::methods::class::filterguard) 0 +set ::nxdoc::include(::nsf::methods::class::getCachedParameters) 0 set ::nxdoc::include(::nsf::methods::class::mixinguard) 0 set ::nxdoc::include(::nsf::methods::class::new) 0 set ::nxdoc::include(::nsf::methods::class::recreate) 0 Index: generic/predefined.h =================================================================== diff -u -r35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- generic/predefined.h (.../predefined.h) (revision 35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30) +++ generic/predefined.h (.../predefined.h) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -78,6 +78,12 @@ "return /tmp}\n" "namespace export tmpdir\n" "if {![info exists ::env(HOME)]} {set ::env(HOME) /root}\n" +"proc ::nsf::parameter::filter {defs pattern} {\n" +"set result {}\n" +"foreach def $defs {\n" +"if {[string match $pattern [::nsf::parameter::get name $def]]} {\n" +"lappend result $def}}\n" +"return $result}\n" "set ::nsf::parametersyntax(::nsf::xotclnext) \"?--noArgs? ?/arg .../?\"\n" "set ::nsf::parametersyntax(::nsf::__unset_unknown_args) \"\"\n" "set ::nsf::parametersyntax(::nsf::exithandler) \"?get?|?set /cmds/?|?unset?\"}\n" Index: library/nx/nx.tcl =================================================================== diff -u -r35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- library/nx/nx.tcl (.../nx.tcl) (revision 35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30) +++ library/nx/nx.tcl (.../nx.tcl) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -689,26 +689,15 @@ if {[info exists pattern]} {lappend cmd $pattern} return [: {*}$cmd] } - :method "info lookup parameter definitions" {pattern:optional} { + :method "info lookup configure parameters" {pattern:optional} { set cmd [list ::nsf::methods::object::info::objectparameter definitions] if {[info exists pattern]} {lappend cmd $pattern} return [: {*}$cmd] } - :method "info lookup parameter names" {pattern:optional} { - set cmd [list ::nsf::methods::object::info::objectparameter names] - if {[info exists pattern]} {lappend cmd $pattern} - return [: {*}$cmd] + :method "info lookup configure syntax" {} { + set syntax "/[self]/ configure [: ::nsf::methods::object::info::objectparameter syntax]" + return [string trimright $syntax " "] } - :method "info lookup parameter list" {pattern:optional} { - set cmd [list ::nsf::methods::object::info::objectparameter list] - if {[info exists pattern]} {lappend cmd $pattern} - return [: {*}$cmd] - } - :method "info lookup parameter syntax" {pattern:optional} { - set cmd [list ::nsf::methods::object::info::objectparameter syntax] - if {[info exists pattern]} {lappend cmd $pattern} - return [: {*}$cmd] - } :alias "info children" ::nsf::methods::object::info::children :alias "info class" ::nsf::methods::object::info::class :alias "info has mixin" ::nsf::methods::object::info::hasmixin @@ -738,6 +727,12 @@ :method "info object slot objects" {{-type:class ::nx::Slot} pattern:optional} { return [: ::nsf::methods::object::info::slotobjects -type $type {*}[current args]] } + # + # Parameter extractors + # + :method "info parameter syntax" {p:parameter} {::nsf::parameter::get syntax $p} + :method "info parameter name" {p:parameter} {::nsf::parameter::get name $p} + :alias "info parent" ::nsf::methods::object::info::parent :alias "info precedence" ::nsf::methods::object::info::precedence # "info properties" is a short form of "info slot definition" @@ -779,6 +774,26 @@ nsf::object::property ::nx::Class::slot::__info keepcallerself true Class eval { + :method "info configure parameters" {pattern:optional} { + set defs [: ::nsf::methods::class::getCachedParameters] + if {[llength $defs] > 0} { + if {[info exists pattern]} {return [::nsf::parameter::filter $defs $pattern]} + return $defs + } + set cmd {::nsf::methods::class::info::slotobjects -closure -type ::nx::Slot} + if {[info exists pattern]} {lappend cmd $pattern} + return [::nsf::parameter::specs -configure [: {*}$cmd]] + } + :method "info configure syntax" {} { + set defs [: ::nsf::methods::class::getCachedParameters] + if {[llength $defs] == 0} { + set defs [::nsf::parameter::specs -configure \ + [: ::nsf::methods::class::info::slotobjects -closure -type ::nx::Slot]] + } + set syntax "/[self]/ " + foreach def $defs {append syntax [::nsf::parameter::get syntax $def] " "} + return [string trimright $syntax " "] + } :alias "info lookup" ::nx::Object::slot::__info::lookup :alias "info filter guard" ::nsf::methods::class::info::filterguard :alias "info filter methods" ::nsf::methods::class::info::filtermethods @@ -789,29 +804,7 @@ :alias "info mixin guard" ::nsf::methods::class::info::mixinguard :alias "info mixin classes" ::nsf::methods::class::info::mixinclasses :alias "info mixinof" ::nsf::methods::class::info::mixinof - :method "info parameter definitions" {pattern:optional} { - set cmd [list ::nsf::methods::class::info::slotobjects -closure -type ::nx::Slot] - if {[info exists pattern]} {lappend cmd $pattern} - return [::nsf::parameter::specs -configure [: {*}$cmd]] - } - :method "info parameter list" {{pattern:optional ""}} { - set defs [:info parameter definitions {*}$pattern] - set result "" - foreach def $defs {lappend result [::nsf::parameter::get list $def]} - return $result - } - :method "info parameter names" {{pattern:optional ""}} { - set defs [:info parameter definitions {*}$pattern] - set result "" - foreach def $defs {lappend result [::nsf::parameter::get name $def]} - return $result - } - :method "info parameter syntax" {{pattern:optional ""}} { - set defs [:info parameter definitions {*}$pattern] - set result "" - foreach def $defs {lappend result [::nsf::parameter::get syntax $def]} - return [join $result " "] - } + :method "info slot objects" {{-type ::nx::Slot} -closure:switch -source:optional pattern:optional} { set cmd [list ::nsf::methods::class::info::slotobjects -type $type] if {[info exists source]} {lappend cmd -source $source} @@ -861,9 +854,54 @@ Class method "info info" {} {::nx::internal::infoOptions ::nx::Class::slot::__info} # finally register method "method" (otherwise, we cannot use "method" above) - Object alias "info object method" ::nsf::methods::object::info::method - Class alias "info method" ::nsf::methods::class::info::method + Class eval { + #:alias "info method" ::nsf::methods::class::info::method + :method "info method args" {name} {: ::nsf::methods::class::info::method args $name} + :method "info method body" {name} {: ::nsf::methods::class::info::method body $name} + :method "info method definition" {name} {: ::nsf::methods::class::info::method definition $name} + :method "info method exists" {name} {: ::nsf::methods::class::info::method exists $name} + :method "info method registrationhandle" {name} {: ::nsf::methods::class::info::method registrationhandle $name} + :method "info method definitionhandle" {name} {: ::nsf::methods::class::info::method definitionhandle $name} + :method "info method origin" {name} {: ::nsf::methods::class::info::method origin $name} + :method "info method parameters" {name pattern:optional} { + set defs [: ::nsf::methods::class::info::method parameter $name] + if {[info exists pattern]} {return [::nsf::parameter::filter $defs $pattern]} + return $defs + } + :method "info method syntax" {name} { + return [string trimright "/[self]/ $name [: ::nsf::methods::class::info::method syntax $name]" { }] + } + :method "info method type" {name} {: ::nsf::methods::class::info::method type $name} + :method "info method precondition" {name} {: ::nsf::methods::class::info::method precondition $name} + :method "info method postcondition" {name} {: ::nsf::methods::class::info::method postcondition $name} + :method "info method submethods" {name} {: ::nsf::methods::class::info::method submethods $name} + :method "info method returns" {name} {: ::nsf::methods::class::info::method returns $name} + } + Object eval { + #:alias "info object method" ::nsf::methods::object::info::method + :method "info object method args" {name} {: ::nsf::methods::object::info::method args $name} + :method "info object method body" {name} {: ::nsf::methods::object::info::method body $name} + :method "info object method definition" {name} {: ::nsf::methods::object::info::method definition $name} + :method "info object method exists" {name} {: ::nsf::methods::object::info::method exists $name} + :method "info object method registrationhandle" {name} {: ::nsf::methods::object::info::method registrationhandle $name} + :method "info object method definitionhandle" {name} {: ::nsf::methods::object::info::method definitionhandle $name} + :method "info object method origin" {name} {: ::nsf::methods::object::info::method origin $name} + :method "info object method parameters" {name pattern:optional} { + set defs [: ::nsf::methods::object::info::method parameter $name] + if {[info exists pattern]} {return [::nsf::parameter::filter $defs $pattern]} + return $defs + } + :method "info object method syntax" {name} { + return [string trimright "/[self]/ $name [: ::nsf::methods::object::info::method syntax $name]" { }] + } + :method "info object method type" {name} {: ::nsf::methods::object::info::method type $name} + :method "info object method precondition" {name} {: ::nsf::methods::object::info::method precondition $name} + :method "info object method postcondition" {name} {: ::nsf::methods::object::info::method postcondition $name} + :method "info object method submethods" {name} {: ::nsf::methods::object::info::method submethods $name} + :method "info object method returns" {name} {: ::nsf::methods::object::info::method returns $name} + } + ###################################################################### # Definition of "abstract method foo ...." # Index: tests/cget.test =================================================================== diff -u -r35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- tests/cget.test (.../cget.test) (revision 35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30) +++ tests/cget.test (.../cget.test) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -136,8 +136,8 @@ # # class-level lookup # - ? {C info lookup parameter list} \ - "-superclass -mixin -filter -volatile -noinit -object-mixin -class -object-filter __initcmd" + ? {C info lookup configure syntax} \ + "/::C/ configure ?-superclass /class .../? ?-mixin /mixinreg .../? ?-filter /filterreg .../? ?-volatile? ?-noinit? ?-object-mixin /mixinreg .../? ?-class /class/? ?-object-filter /filterreg .../? ?/__initcmd/?" ? {C cget -superclass} "::nx::Object" ? {C cget -object-mixin} "" ? {C cget -mixin} "" @@ -149,8 +149,8 @@ # # object-level lookup # - ? {c1 info lookup parameter list} \ - "-foo -bar -volatile -noinit -object-mixin -class -object-filter __initcmd" + ? {c1 info lookup configure syntax} \ + "/::c1/ configure ?-foo /value/? ?-bar /value/? ?-volatile? ?-noinit? ?-object-mixin /mixinreg .../? ?-class /class/? ?-object-filter /filterreg .../? ?/__initcmd/?" # # query all properties from base classes Index: tests/info-method.test =================================================================== diff -u -r35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- tests/info-method.test (.../info-method.test) (revision 35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30) +++ tests/info-method.test (.../info-method.test) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -107,13 +107,13 @@ ? {C info method definition m-with-assertions} \ {::C public method m-with-assertions {} {return proc-[self proc]}} } - ? {C info method parameter m} {x} - ? {nx::Class info method parameter method} \ + ? {C info method parameters m} {x} + ? {nx::Class info method parameters method} \ {name arguments:parameter,0..* -returns body -precondition -postcondition} - ? {nx::Class info method parameter alias} \ + ? {nx::Class info method parameters alias} \ {methodName -returns {-frame default} cmd} # raises currently an error - ? {catch {C info method parameter a}} 1 + ? {catch {C info method parameters a}} 1 ? {C info method definition addOne} "::C public forward addOne expr 1 +" ? {C info object method definition add1} "::C public object forward add1 expr 1 +" @@ -542,7 +542,7 @@ ? {D info slot objects} "::D::slot::b ::D::slot::c" ? {D info slot objects -closure -source application} "::D::slot::b ::D::slot::c ::C::slot::a" - ? {::nx::Object info method parameter info} "" + ? {::nx::Object info method parameters info} "" ? {d1 info precedence} "::D ::C ::nx::Object" ? {d1 info lookup slots} "::D::slot::b ::D::slot::c ::C::slot::a ::nx::Object::slot::volatile ::nx::Object::slot::noinit ::nx::Object::slot::object-mixin ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::object-filter" @@ -627,9 +627,9 @@ # # test whether the handles for ensemble methods work # - ? {C info method parameter [C info method registrationhandle "bar"]} "" - ? {C info method parameter [C info method registrationhandle "bar b"]} "x:int y:upper" - ? {C info method parameter [C info method registrationhandle "bar baz y"]} "x:int y:upper" + ? {C info method parameters [C info method registrationhandle "bar"]} "" + ? {C info method parameters [C info method registrationhandle "bar b"]} "x:int y:upper" + ? {C info method parameters [C info method registrationhandle "bar baz y"]} "x:int y:upper" # # check methods paths as method specifications @@ -657,18 +657,18 @@ {::C public method {bar baz y} {x:int y:upper} {return y}} # - # test "info method parameter" + # test "info method parameters" # - ? {nx::Object info method parameter "info lookup methods"} \ + ? {nx::Object info method parameters "info lookup methods"} \ "-callprotection -incontext:switch -methodtype -nomixins:switch -path:switch -source pattern:optional" ? {nx::Object info method syntax "info lookup methods"} \ - "?-callprotection all|public|protected|private? ?-incontext? ?-methodtype all|scripted|builtin|alias|forwarder|object|setter|nsfproc? ?-nomixins? ?-path? ?-source all|application|baseclasses? ?/pattern/?" + "/::nx::Object/ info lookup methods ?-callprotection all|public|protected|private? ?-incontext? ?-methodtype all|scripted|builtin|alias|forwarder|object|setter|nsfproc? ?-nomixins? ?-path? ?-source all|application|baseclasses? ?/pattern/?" - ? {o info object method parameter "foo b"} "x:int y:upper" + ? {o info object method parameters "foo b"} "x:int y:upper" - ? {nx::Object info method parameter ::nx::Object::slot::__info::lookup::methods} \ + ? {nx::Object info method parameters ::nx::Object::slot::__info::lookup::methods} \ "-callprotection -incontext:switch -methodtype -nomixins:switch -path:switch -source pattern:optional" - ? {o info object method parameter "::o::foo::b"} "x:int y:upper" + ? {o info object method parameters "::o::foo::b"} "x:int y:upper" ? {nx::Object info method registrationhandle "info"} "::nsf::classes::nx::Object::info" ? {nx::Object info method registrationhandle "info lookup methods"} \ @@ -698,23 +698,23 @@ } C new - ? {C info parameter syntax} "?-a /value/? ?-b /value/? ?-volatile? ?-noinit? ?-object-mixin /mixinreg .../? ?-class /class/? ?-object-filter /filterreg .../? ?/__initcmd/?" - ? {C info parameter syntax a} "?-a /value/?" + ? {C info configure syntax} "/::C/ ?-a /value/? ?-b /value/? ?-volatile? ?-noinit? ?-object-mixin /mixinreg .../? ?-class /class/? ?-object-filter /filterreg .../? ?/__initcmd/?" +# ? {C info configure syntax a} "/::C/ ?-a /value/?" - ? {C info parameter definitions} "-a {-b 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -object-mixin:mixinreg,alias,method=::nx::Object::slot::__object::mixin,1..n -class:class,alias,method=::nsf::methods::object::class -object-filter:filterreg,alias,method=::nx::Object::slot::__object::filter,1..n __initcmd:initcmd,optional,noleadingdash" + ? {C info configure parameters } "-a {-b 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -object-mixin:mixinreg,alias,method=::nx::Object::slot::__object::mixin,1..n -class:class,alias,method=::nsf::methods::object::class -object-filter:filterreg,alias,method=::nx::Object::slot::__object::filter,1..n __initcmd:initcmd,optional,noleadingdash" - ? {C info parameter list} "-a -b -volatile -noinit -object-mixin -class -object-filter __initcmd" - ? {C info parameter names} "a b volatile noinit object-mixin class object-filter __initcmd" +# ? {C info parameter list} "-a -b -volatile -noinit -object-mixin -class -object-filter __initcmd" +# ? {C info parameter names} "a b volatile noinit object-mixin class object-filter __initcmd" ? {lsort [C info slot objects -closure]} "::C::slot::a ::C::slot::b ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::noinit ::nx::Object::slot::object-filter ::nx::Object::slot::object-mixin ::nx::Object::slot::volatile" - ? {C info parameter definitions b} "{-b 1}" - ? {D info parameter definitions b} "{-b 2}" + ? {C info configure parameters b} "{-b 1}" + ? {D info configure parameters b} "{-b 2}" ? {D info slot objects -closure b} "::D::slot::b" ? {D info slot objects -closure a} "::C::slot::a" ? {D info slot objects -closure class} "::nx::Object::slot::class" - ? {D info parameter list} "-b -c -a -volatile -noinit -object-mixin -class -object-filter __initcmd" - ? {D info parameter names} "b c a volatile noinit object-mixin class object-filter __initcmd" +# ? {D info parameter list} "-b -c -a -volatile -noinit -object-mixin -class -object-filter __initcmd" +# ? {D info parameter names} "b c a volatile noinit object-mixin class object-filter __initcmd" } # @@ -727,9 +727,9 @@ ? {::nx::Object info methods "info"} "info" ? {::nx::Object info methods -path "info"} "" ? {lsort [::nx::Object info methods -path "info lookup *"]} \ - "{info lookup filter} {info lookup method} {info lookup methods} {info lookup parameter definitions} {info lookup parameter list} {info lookup parameter names} {info lookup parameter syntax} {info lookup slots}" - ? {lsort [::nx::Object info methods -path "info *method*"]} \ - "{info lookup method} {info lookup methods} {info object filter methods} {info object method} {info object methods}" + "{info lookup configure parameters} {info lookup configure syntax} {info lookup filter} {info lookup method} {info lookup methods} {info lookup slots}" + ? {lsort [::nx::Object info methods -path "info *parameter*"]} \ + "{info lookup configure parameters} {info object method parameters} {info parameter name} {info parameter syntax}" ? {lsort [::nx::Object info methods "slots"]} "" ? {lsort [::nx::Object info methods "*slots*"]} "" ? {lsort [::nx::Object info methods -path "*slot*"]} \ @@ -780,12 +780,13 @@ # nx::Test case parametersyntax { # a true method - ? {::nx::Class info method syntax method} "/name/ /arguments/ ?-returns /value/? /body/ ?-precondition /value/? ?-postcondition /value/?" + ? {::nx::Class info method syntax method} \ + "/::nx::Class/ method /name/ /arguments/ ?-returns /value/? /body/ ?-precondition /value/? ?-postcondition /value/?" # a forwarder to ::nsf::relation; definition comes via array ::nsf::parametersyntax - ? {::nx::Class info method syntax mixin} "?/class .../?|?add /class/?|?delete /class/?" + ? {::nx::Class info method syntax mixin} "/::nx::Class/ mixin ?/class .../?|?add /class/?|?delete /class/?" - ? {::nx::Class info method syntax ::nx::next} "?/arguments/?" - ? {::nx::Class info method syntax ::nsf::xotclnext} "?--noArgs? ?/arg .../?" + ? {::nx::Class info method syntax ::nx::next} "/::nx::Class/ ::nx::next ?/arguments/?" + ? {::nx::Class info method syntax ::nsf::xotclnext} "/::nx::Class/ ::nsf::xotclnext ?--noArgs? ?/arg .../?" } # @@ -1203,5 +1204,5 @@ # Test error messages within an ensemble call # nx::Test case error-in-ensemble { - ? {nx::Object info method definition foo 1} {invalid argument '1', maybe too many arguments; should be "::nx::Object info method args|body|definition|exists|registrationhandle|definitionhandle|handle|origin|parameter|syntax|type|precondition|postcondition|submethods|returns /name/"} + ? {nx::Object info method definition foo 1} {wrong # args: should be "definition name"} } \ No newline at end of file Index: tests/object-system.test =================================================================== diff -u -rf858f142f5fab4f88996b3eb709c3afa55114be9 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- tests/object-system.test (.../object-system.test) (revision f858f142f5fab4f88996b3eb709c3afa55114be9) +++ tests/object-system.test (.../object-system.test) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -193,8 +193,8 @@ #? {C::slot info vars} __parameter #? {C info attributes} {{x 1} {y 2}} -? {C info parameter definitions x} {{-x 1}} -? {C info parameter definitions y} {{-y 2}} +? {C info configure parameters x} {{-x 1}} +? {C info configure parameters y} {{-y 2}} ? {C copy X} ::X ? {::nsf::object::exists X} 1 @@ -212,9 +212,9 @@ #? {X::slot info vars} __parameter -? {X info parameter definitions ?} {{-x 1} {-y 2}} -? {X info parameter definitions x} {{-x 1}} -? {X info parameter definitions y} {{-y 2}} +? {X info configure parameters ?} {{-x 1} {-y 2}} +? {X info configure parameters x} {{-x 1}} +? {X info configure parameters y} {{-y 2}} #? {X info properties} {{x 1} {y 2}} #? {X info properties -closure *a*} {volatile:alias,noarg class:class,alias,method=::nsf::methods::object::class} Index: tests/parameters.test =================================================================== diff -u -r35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- tests/parameters.test (.../parameters.test) (revision 35c0d6ecb3c83cc6d6b0dfe251ba1a0d9071dc30) +++ tests/parameters.test (.../parameters.test) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -430,7 +430,7 @@ ? {d1 foo 1} 1 "check int as double" ? {d1 foo 1.1} 1.1 "check double as double" ? {d1 foo 1.1a} {expected double but got "1.1a" for parameter "a"} "check non-double as double" - ? {D info method parameter foo} a:double + ? {D info method parameters foo} a:double } ####################################################### @@ -577,7 +577,7 @@ } ? {D info method args bar} {s literal c d switch optflag x y z} "all args" - ? {D info method parameter bar} \ + ? {D info method parameters bar} \ {{-s:substdefault "[current]"} {-literal "[current]"} {-c:substdefault "[:c]"} {-d:integer,substdefault "$d"} -switch:switch -optflag x y:integer {z 1}} \ "query method parameter" @@ -611,20 +611,20 @@ # Query method parameter ####################################################### - ? {D info method parameter foo} \ + ? {D info method parameters foo} \ "a b c {end 100}" \ "query instparams with default, no paramdefs needed" - ? {nx::Class info method parameter method} \ + ? {nx::Class info method parameters method} \ "name arguments:parameter,0..* -returns body -precondition -postcondition" \ "query instparams for scripted method 'method'" - ? {nx::Object info method parameter ::nsf::method::forward} \ + ? {nx::Object info method parameters ::nsf::method::forward} \ "object:object -per-object:switch method -default -earlybinding:switch -methodprefix -objframe:switch -onerror -verbose:switch target:optional args" \ "query parameter for C-defined cmd 'nsf::forward'" nx::Object require method autoname - ? {nx::Object info method parameter autoname} \ + ? {nx::Object info method parameters autoname} \ "-instance:switch -reset:switch name" \ "query parameter for C-defined method 'autoname'" @@ -821,8 +821,8 @@ D public method foo-meta {x:metaclass} {return $x} D public method foo-type {x:object,type=::C} {return $x} - ? {D info method parameter foo-base} "x:baseclass" - ? {D info method parameter foo-type} "x:object,type=::C" + ? {D info method parameters foo-base} "x:baseclass" + ? {D info method parameters foo-type} "x:object,type=::C" ? {d1 foo-base ::nx::Object} "::nx::Object" ? {d1 foo-base C} \ @@ -1157,7 +1157,7 @@ ? {o foo 1 "" {o1 o2}} {expected integer but got "" for parameter "y"} "second is empty" ? {o foo 1 2 {}} 1 "empty list" - ? {o info object method parameter foo} "x:integer,0..1 y:integer os:object,0..*" + ? {o info object method parameters foo} "x:integer,0..1 y:integer os:object,0..*" o public object method foo {x:integer,0..1 y:integer os:object,1..*} {return $x} ? {o foo 1 2 {o1 "" o2}} {invalid value in "o1 "" o2": expected object but got "" for parameter "os"} \ @@ -1203,7 +1203,7 @@ ? {::nsf::method::setter o a} "::o::a" ? {::nsf::method::setter C c} "::nsf::classes::C::c" ? {o info object method definition a} "::o public object setter a" - ? {o info object method parameter a} "a" + ? {o info object method parameters a} "a" ? {o info object method args a} "a" ? {C info method definition c} "::C public setter c" ? {o a 1} "1" @@ -1214,12 +1214,12 @@ ? {o info object method registrationhandle ints} "::o::ints" ? {o info object method definition ints} "::o public object setter ints:integer,1..*" - ? {o info object method parameter ints} "ints:integer,1..*" + ? {o info object method parameters ints} "ints:integer,1..*" ? {o info object method args ints} "ints" ? {o info object method registrationhandle o} "::o::o" ? {o info object method definition o} "::o public object setter o:object" - ? {o info object method parameter o} "o:object" + ? {o info object method parameters o} "o:object" ? {o info object method args o} "o" ? {o a 2} 2 @@ -1588,18 +1588,18 @@ :method metaclassarg {-x:metaclass} {return $x} } - ? {Foo info method syntax noarg} "" - ? {Foo info method syntax onearg} "?-x /value/?" - ? {Foo info method syntax intarg} "?-x /integer/?" - ? {Foo info method syntax intsarg} "?-x /integer .../?" - ? {Foo info method syntax boolarg} "?-x /boolean/?" - ? {Foo info method syntax classarg} "?-x /class/?" - ? {Foo info method syntax upperarg} "?-x /upper/?" - ? {Foo info method syntax metaclassarg} "?-x /metaclass/?" + ? {Foo info method syntax noarg} "/::Foo/ noarg" + ? {Foo info method syntax onearg} "/::Foo/ onearg ?-x /value/?" + ? {Foo info method syntax intarg} "/::Foo/ intarg ?-x /integer/?" + ? {Foo info method syntax intsarg} "/::Foo/ intsarg ?-x /integer .../?" + ? {Foo info method syntax boolarg} "/::Foo/ boolarg ?-x /boolean/?" + ? {Foo info method syntax classarg} "/::Foo/ classarg ?-x /class/?" + ? {Foo info method syntax upperarg} "/::Foo/ upperarg ?-x /upper/?" + ? {Foo info method syntax metaclassarg} "/::Foo/ metaclassarg ?-x /metaclass/?" # return enumeration type ? {nx::Class info method syntax "info mixinof"} \ - "?-closure? ?-scope all|class|object? ?/pattern/?" + "/::nx::Class/ info mixinof ?-closure? ?-scope all|class|object? ?/pattern/?" } # @@ -1889,45 +1889,45 @@ # ? {c1 info object mixin classes} ::M1 ? {c1 cget -object-mixin} ::M1 - ? {c1 info lookup parameter names b*} "b1" + ? {c1 info lookup configure parameters b*} "-b1:required" # # add one more mixin. # c1 object mixin add ::M2 ? {c1 info object mixin classes} {::M2 ::M1} ? {c1 cget -object-mixin} {::M2 ::M1} - ? {c1 info lookup parameter syntax b1} "-b1 /value/" - ? {c1 info lookup parameter syntax b2} "-b2 /value/" - ? {lsort [c1 info lookup parameter names b*]} "b1 b2" + ? {c1 info lookup configure parameters b1} "-b1:required" + ? {c1 info lookup configure parameters b2} "-b2:required" + ? {lsort [c1 info lookup configure parameters b*]} "-b1:required -b2:required" # # drop the mixins, the b* properties should be gone. # c1 object mixin "" ? {c1 info object mixin classes} {} - ? {lsort [c1 info lookup parameter names b*]} "" + ? {lsort [c1 info lookup configure parameters b*]} "" # # add M1 again # c1 object mixin add ::M1 ? {c1 info object mixin classes} {::M1} - ? {c1 info lookup parameter syntax b1} "-b1 /value/" - ? {lsort [c1 info lookup parameter names b*]} "b1" + ? {c1 info lookup configure parameters b1} "-b1:required" + ? {lsort [c1 info lookup configure parameters b*]} "-b1:required" # # We have the per-object cache; adding a per-object property should # flush the cache # c1 object property bo1 - ? {lsort [c1 info lookup parameter names b*]} "b1 bo1" + ? {lsort [c1 info lookup configure parameters b*]} "-b1:required -bo1" c1 object property bo2 - ? {lsort [c1 info lookup parameter names b*]} "b1 bo1 bo2" + ? {lsort [c1 info lookup configure parameters b*]} "-b1:required -bo1 -bo2" # # property deletion should invalidate the cache as well # c1 delete property bo2 - ? {lsort [c1 info lookup parameter names b*]} "b1 bo1" + ? {lsort [c1 info lookup configure parameters b*]} "-b1:required -bo1" } @@ -2257,14 +2257,15 @@ # The parameter for v can be obtained via spec, but is not listed in # "info parameter syntax" or "info parameter definitions". # - ? {C info parameter list a} "-a" - ? {C info parameter definitions a} "{-a a0}" - ? {C info parameter syntax a} "?-a /value/?" +# ? {C info parameter list a} "-a" + ? {C info configure parameters a} "{-a a0}" +# ? {C info configure syntax a} "?-a /value/?" + ? {C info configure syntax} "/::C/ ?-a /value/? ?-volatile? ?-noinit? ?-object-mixin /mixinreg .../? ?-class /class/? ?-object-filter /filterreg .../? ?/__initcmd/?" - ? {C info parameter definitions v} "" + ? {C info configure parameters v} "" ? {C info slot definitions v} "{::C variable v v0}" - ? {C info parameter list v} "" - ? {C info parameter syntax v} "" +# ? {C info parameter list v} "" +# ? {C info configure parameter v} "" ? {C create c2 -a 10} ::c2 ? {C create c2 -v 10} \ @@ -2311,8 +2312,8 @@ ? {lsort [c1 info vars]} {a v} # ... and we expect an object parameter for a but not for v ... - ? {C info parameter list a} "-a" - ? {C info parameter list v} "" + ? {C info configure parameters a} "{-a a0}" + ? {C info configure parameters v} "" # ... and we expect a setter for a but not for v ? {c1 info lookup method a} "::nsf::classes::C::a" @@ -2322,7 +2323,7 @@ # the object parameter and setters for "a" will be gone C delete variable v C delete property a - ? {C info parameter list a} "" + ? {C info configure parameters a} "" ? {c1 info lookup method a} "" # already created instance variables will continue to exist @@ -2432,13 +2433,13 @@ # "/cls/ info parameter ..." shows the parameter available for object parameterization # nx::Class create C { - # variable has no config parameter and no accessor + # variable has no configure parameter and no accessor :variable v 100 } - # "v" does NOT show up in "info parameter" - ? {C info parameter list} "-volatile -noinit -object-mixin -class -object-filter __initcmd" - ? {C info parameter names} "volatile noinit object-mixin class object-filter __initcmd" + # "v" does NOT show up in "info configure parameters" + ? {C info configure parameters v} "" +# ? {C info parameter names} "volatile noinit object-mixin class object-filter __initcmd" # "v" does show up in "info slot ..." ? {C info slot objects} "::C::slot::v" @@ -2452,8 +2453,7 @@ } # "p2" and "p3" do NOT show up in "info parameter" - ? {D info parameter list} "-p0 -p1 -volatile -noinit -object-mixin -class -object-filter __initcmd" - ? {D info parameter names} "p0 p1 volatile noinit object-mixin class object-filter __initcmd" + ? {D info configure parameters p*} "{-p0 200} {-p1 201}" # "p1" and "p2" do NOT show up in "info methods" ? {D info methods} "p0 p3" Index: tests/plain-object-method.test =================================================================== diff -u -r5cb647f407e85768c452ee22eaf881d628511c87 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- tests/plain-object-method.test (.../plain-object-method.test) (revision 5cb647f407e85768c452ee22eaf881d628511c87) +++ tests/plain-object-method.test (.../plain-object-method.test) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -11,7 +11,7 @@ ? {o filter f} "::o: unable to dispatch method 'filter'" ? {lsort [o info object methods]} "f" - ? {lsort [o info]} "valid submethods of ::o info: children class has info is lookup name object parent precedence vars" + ? {lsort [o info]} "valid submethods of ::o info: children class has info is lookup name object parameter parent precedence vars" } package require nx::plain-object-method @@ -37,5 +37,5 @@ ? {o info filter methods} "" ? {lsort [o info object methods]} "f foo" - ? {lsort [o info]} "valid submethods of ::o info: children class filter has info is lookup method methods mixin name object parent precedence vars" + ? {lsort [o info]} "valid submethods of ::o info: children class filter has info is lookup method methods mixin name object parameter parent precedence vars" } Index: tests/returns.test =================================================================== diff -u -rf858f142f5fab4f88996b3eb709c3afa55114be9 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- tests/returns.test (.../returns.test) (revision f858f142f5fab4f88996b3eb709c3afa55114be9) +++ tests/returns.test (.../returns.test) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -358,19 +358,19 @@ ::nx::Object create ku { # 1: Create an empty or checker-free parameter spec :object method foo {} {;} - ? [:info object method parameter foo] "" + ? [:info object method parameters foo] "" # 2: A call to ::nsf::method::property which might require NsfParamDefs ? [list ::nsf::method::property [::nx::current] foo returns] "" # 3: Check, if "info method parameter" still works - ? [:info object method parameter foo] "" + ? [:info object method parameters foo] "" ? [list ::nsf::method::property [::nx::current] foo returns] "" # 4: Set methodproperty to some value and check again ::nsf::method::property [::nx::current] foo returns int ? [list ::nsf::method::property [::nx::current] foo returns] "int" - ? [:info object method parameter foo] "" + ? [:info object method parameters foo] "" # 5: Reset methodproperty and query again ::nsf::method::property [::nx::current] foo returns "" ? [list ::nsf::method::property [::nx::current] foo returns] "" - ? [:info object method parameter foo] "" + ? [:info object method parameters foo] "" } } \ No newline at end of file Index: tests/submethods.test =================================================================== diff -u -r5cb647f407e85768c452ee22eaf881d628511c87 -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 --- tests/submethods.test (.../submethods.test) (revision 5cb647f407e85768c452ee22eaf881d628511c87) +++ tests/submethods.test (.../submethods.test) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) @@ -229,7 +229,7 @@ # defaultcmd has to return also subcmds of other shadowed ensembles ? {lsort [o1 info has]} "valid submethods of ::o1 info has: mixin namespace something type" - ? {lsort [o1 info]} "valid submethods of ::o1 info: children class has info is lookup name object parent precedence vars" + ? {lsort [o1 info]} "valid submethods of ::o1 info: children class has info is lookup name object parameter parent precedence vars" # returning methodpath in ensemble ? {o1 info has something path} "info has something path"