Index: library/nx/nx.tcl =================================================================== diff -u -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 -r31404a50d429bd67e904a70797c4f67674fab09f --- library/nx/nx.tcl (.../nx.tcl) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) +++ library/nx/nx.tcl (.../nx.tcl) (revision 31404a50d429bd67e904a70797c4f67674fab09f) @@ -575,7 +575,7 @@ } Class public method "delete property" {name} { - set slot [:info slot objects $name] + set slot [:info slots $name] if {$slot eq ""} {error "[self]: cannot delete property '$name'"} $slot destroy } @@ -710,23 +710,12 @@ :alias "info object methods" ::nsf::methods::object::info::methods :alias "info object mixin guard" ::nsf::methods::object::info::mixinguard :alias "info object mixin classes" ::nsf::methods::object::info::mixinclasses - :method "info object slot definitions" {{-type:class ::nx::Slot} pattern:optional} { - set result {} - foreach slot [: ::nsf::methods::object::info::slotobjects -type $type {*}[current args]] { - lappend result [$slot getPropertyDefinition] - } - return $result - } - :method "info object slot names" {{-type:class ::nx::Slot} pattern:optional} { - set result {} - foreach slot [: ::nsf::methods::object::info::slotobjects -type $type {*}[current args]] { - lappend result [$slot name] - } - return $result - } - :method "info object slot objects" {{-type:class ::nx::Slot} pattern:optional} { + :method "info object slots" {{-type:class ::nx::Slot} pattern:optional} { return [: ::nsf::methods::object::info::slotobjects -type $type {*}[current args]] } + :method "info slot definition" {slot:object} { + return [$slot getPropertyDefinition] + } # # Parameter extractors # @@ -805,27 +794,13 @@ :alias "info mixin classes" ::nsf::methods::class::info::mixinclasses :alias "info mixinof" ::nsf::methods::class::info::mixinof - :method "info slot objects" {{-type ::nx::Slot} -closure:switch -source:optional pattern:optional} { + :method "info slots" {{-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} if {$closure} {lappend cmd -closure} if {[info exists pattern]} {lappend cmd $pattern} return [: {*}$cmd] } - :method "info slot definitions" {{-type ::nx::Slot} -closure:switch -source:optional pattern:optional} { - set result {} - foreach slot [: ::nsf::methods::class::info::slotobjects -type $type {*}[current args]] { - lappend result [$slot getPropertyDefinition] - } - return $result - } - :method "info slot names" {{-type ::nx::Slot} -closure:switch -source:optional pattern:optional} { - set result {} - foreach slot [: ::nsf::methods::class::info::slotobjects -type $type {*}[current args]] { - lappend result [$slot name] - } - return $result - } # "info properties" is a short form of "info slot definition" #:alias "info properties" ::nx::Class::slot::__info::slot::definition :alias "info subclass" ::nsf::methods::class::info::subclass @@ -1348,7 +1323,6 @@ if {[info exists :initcmd]} { lappend options initcmd if {[info exists :default]} { - # append initcmd "[::nsf::self] setCheckedInstVar -nocomplain \[::nsf::self\] [list ${:default}]\n" append initcmd "::nsf::var::set \[::nsf::self\] ${:name} [list ${:default}]\n" } append initcmd ${:initcmd} @@ -1368,22 +1342,27 @@ } ObjectParameterSlot public method getPropertyDefinitionOptions {parameterSpec} { + #puts "accessor <${:accessor}> config ${:config} per-object ${:per-object}" + + set mod [expr {${:per-object} ? "object" : ""}] + set opts "" + if {${:config}} { - if {${:accessor} ne "public"} {set opts [list -accessor ${:accessor}]} {set opts ""} - if {!${:config}} {lappend opts -config false} + lappend opts -accessor ${:accessor} + if {${:incremental}} {lappend opts -incremental} if {[info exists :default]} { - return [list ${:domain} property {*}$opts [list $parameterSpec ${:default}]] + return [list ${:domain} {*}$mod property {*}$opts [list $parameterSpec ${:default}]] } set methodName property } else { - if {${:accessor} ne "none"} {set opts [list -accessor ${:accessor}]} {set opts ""} + lappend opts -accessor ${:accessor} if {${:config}} {lappend opts -config true} if {[info exists :default]} { - return [list ${:domain} variable {*}$opts $parameterSpec ${:default}] + return [list ${:domain} {*}$mod variable {*}$opts $parameterSpec ${:default}] } set methodName variable } - return [list ${:domain} $methodName {*}$opts $parameterSpec] + return [list ${:domain} {*}$mod $methodName {*}$opts $parameterSpec] } ObjectParameterSlot public method getPropertyDefinition {} { @@ -1769,7 +1748,7 @@ ::nx::VariableSlot public method makeAccessor {} { if {${:accessor} eq "none"} { - #puts stderr "Do not register forwarder ${:domain} ${:name}" + #puts stderr "*** Do not register forwarder ${:domain} ${:name}" return 0 } @@ -1807,6 +1786,15 @@ } } + ::nx::VariableSlot public method getSpec {} { + # This is a shortend "lightweight" version of "getParameterSpec" + # returning less (implicit) details. + set options [:getParameterOptions -withMultiplicity true] + set spec [:namedParameterSpec -map-private "" ${:name} $options] + if {[info exists :default]} {lappend spec ${:default}} + return $spec + } + ::nx::VariableSlot protected method init {} { #puts "VariableSlot [self] ${:incremental} && ${:accessor} && ${:multiplicity} incremental ${:incremental}" if {${:incremental}} { @@ -2046,7 +2034,7 @@ if {${accessor} eq ""} { set accessor [::nsf::dispatch [self] __default_accessor] - #puts stderr "OBJECT got default accessor ${accessor}" + #puts stderr "OBJECT [self] got default accessor ${accessor}" } set r [[self] object variable \ @@ -2097,7 +2085,7 @@ if {${accessor} eq ""} { set accessor [::nsf::dispatch [self] __default_accessor] - #puts stderr "CLASS got default accessor ${accessor}" + #puts stderr "CLASS [self] got default accessor ${accessor}" } set r [[self] ::nsf::classes::nx::Class::variable \ -accessor $accessor \