Index: library/nx/nx.tcl =================================================================== diff -u -ra9bbc7c710172e6c24bf1c3a787263f9bcaf3384 -r65d13b7b37bf2ee5dabe0392eb1e7af3a0cc85fe --- library/nx/nx.tcl (.../nx.tcl) (revision a9bbc7c710172e6c24bf1c3a787263f9bcaf3384) +++ library/nx/nx.tcl (.../nx.tcl) (revision 65d13b7b37bf2ee5dabe0392eb1e7af3a0cc85fe) @@ -1598,7 +1598,7 @@ } ObjectParameterSlot public method definition {} { - set options [:getParameterOptions -withMultiplicity true] + set options [:getParameterOptions -withMultiplicity true -forInfo true] if {[info exists :positional]} {lappend options positional} #if {!${:configurable}} {lappend options noconfig} return [:getPropertyDefinitionOptions [:namedParameterSpec -map-private "" ${:name} $options]] @@ -1958,25 +1958,26 @@ {-withMultiplicity 0} {-withSubstdefault 1} {-forObjectParameter 0} + {-forInfo 0} } { set options "" set slotObject "" if {[info exists :type]} { set type ${:type} - if {$type eq "switch" && !$forObjectParameter} {set type boolean} + if {$type eq "switch" && !$forInfo && !$forObjectParameter} {set type boolean} if {$type in {cmd initcmd}} { lappend options $type } elseif {[string match ::* $type]} { lappend options [expr {[::nsf::is metaclass $type] ? "class" : "object"}] type=$type } else { lappend options $type if {$type ni [list "" \ - "boolean" "integer" "object" "class" \ - "metaclass" "baseclass" "parameter" \ - "alnum" "alpha" "ascii" "control" "digit" "double" \ - "false" "graph" "lower" "print" "punct" "space" "true" \ - "wideinteger" "wordchar" "xdigit" ]} { + "boolean" "switch" "integer" "object" "class" \ + "metaclass" "baseclass" "parameter" \ + "alnum" "alpha" "ascii" "control" "digit" "double" \ + "false" "graph" "lower" "print" "punct" "space" "true" \ + "wideinteger" "wordchar" "xdigit" ]} { lappend options slot=[::nsf::self] } } @@ -2074,7 +2075,7 @@ ::nx::VariableSlot public method parameter {} { # This is a shortened "lightweight" version of "getParameterSpec" # returning less (implicit) details. Used e.g. by "info variable parameter" - set options [:getParameterOptions -withMultiplicity true] + set options [:getParameterOptions -withMultiplicity true -forInfo true] set spec [:namedParameterSpec -map-private "" ${:name} $options] if {[info exists :default]} {lappend spec ${:default}} return $spec Index: tests/info-variable.test =================================================================== diff -u -r8e2e356e9bcef39f43dfe3690b82d9586c7adc72 -r65d13b7b37bf2ee5dabe0392eb1e7af3a0cc85fe --- tests/info-variable.test (.../info-variable.test) (revision 8e2e356e9bcef39f43dfe3690b82d9586c7adc72) +++ tests/info-variable.test (.../info-variable.test) (revision 65d13b7b37bf2ee5dabe0392eb1e7af3a0cc85fe) @@ -207,6 +207,31 @@ } +nx::test case switch-params { + + set ::p1 "p1:boolean" + set ::p2 "p2:switch" + + set cls [nx::Class new { + :property $::p1 + :property $::p2 + }] + + ? [list lmap p [$cls info variables] "[list $cls info variable parameter] \$p"] \ + [list $::p1 $::p2] + + ? [list lmap p [$cls info variables] "[list $cls info variable definition] \$p"] \ + [list [list $cls property -accessor none $::p1] \ + [list $cls property -accessor none $::p2]] + + set obj [$cls new] + set ::lookupParams [$obj info lookup parameters configure] + ? {expr {"-$::p1" in $::lookupParams}} 1 + ? {expr {"-$::p2" in $::lookupParams}} 1 + + ? [list string match "?-p1 /boolean/? ?-p2? *" [$obj info lookup syntax configure]] 1 +} + nx::test case object-variables { nx::Class create Bar { :property {p 9} Index: tests/nsf-cmd.test =================================================================== diff -u -rb44ba341aa4dc2d759201f6413dc2ef36eba555d -r65d13b7b37bf2ee5dabe0392eb1e7af3a0cc85fe --- tests/nsf-cmd.test (.../nsf-cmd.test) (revision b44ba341aa4dc2d759201f6413dc2ef36eba555d) +++ tests/nsf-cmd.test (.../nsf-cmd.test) (revision 65d13b7b37bf2ee5dabe0392eb1e7af3a0cc85fe) @@ -777,8 +777,24 @@ namespace delete ::ns1 } +nx::test case switch-info { + namespace eval ::ns1 {} + set handle ::n1::foo + set params [list -p1:boolean -p2:switch args] + set def [list ::nsf::proc $handle $params return] + {*}$def + ? [list nsf::cmd::info args $handle] "p1 p2 args" + ? [list nsf::cmd::info definition $handle] $def + ? [list nsf::cmd::info exists $handle] 1 + ? [list nsf::cmd::info parameter $handle] $params + ? [list nsf::cmd::info syntax $handle] "?-p1 /boolean/? ?-p2? ?/arg .../?" + + namespace delete ::ns1 +} + + # - TO-DO: interp hide/expose