Index: library/nx/nx.tcl =================================================================== diff -u -r3a38bbf2bef930b2e690c2cb7773d738d3a8fd3e -r8d14207734245406c4cadfa23aca439416883b29 --- library/nx/nx.tcl (.../nx.tcl) (revision 3a38bbf2bef930b2e690c2cb7773d738d3a8fd3e) +++ library/nx/nx.tcl (.../nx.tcl) (revision 8d14207734245406c4cadfa23aca439416883b29) @@ -1244,9 +1244,10 @@ if {[info exists :initcmd]} { lappend options initcmd if {[info exists :default]} { - append :initcmd "\n" "::nsf::var::set \[::nsf::self\] ${:name} ${:default};\n" + append initcmd "::nsf::var::set \[::nsf::self\] ${:name} ${:default};\n" } - set :parameterSpec [list [:namedParameterSpec $prefix ${:name} $options] ${:initcmd}] + append initcmd ${:initcmd} + set :parameterSpec [list [:namedParameterSpec $prefix ${:name} $options] $initcmd] } elseif {[info exists :default]} { # deactivated for now: || [string first {$} ${:default}] > -1 if {[string match {*\[*\]*} ${:default}]} { Index: tests/parameters.test =================================================================== diff -u -r3a38bbf2bef930b2e690c2cb7773d738d3a8fd3e -r8d14207734245406c4cadfa23aca439416883b29 --- tests/parameters.test (.../parameters.test) (revision 3a38bbf2bef930b2e690c2cb7773d738d3a8fd3e) +++ tests/parameters.test (.../parameters.test) (revision 8d14207734245406c4cadfa23aca439416883b29) @@ -1344,29 +1344,40 @@ # per-object: # + package req nx::serializer + Object create o - + + ? {o eval {info exists :a}} 0 ? {o property {a 0} { set :defaultcmd {set _ 4} }} "defaultcmd can't be used together with default value" + ? {o eval {info exists :a}} 0 + + ? {o eval {info exists :b}} 0 ? {o property {b 0} { set :valuecmd {set _ 44} }} "valuecmd can't be used together with default value" + ? {o eval {info exists :b}} 0 + ? {o eval {info exists :c}} 0 ? {o property c { set :defaultcmd {set _ 4} set :valuecmd {set _ 44} }} "valuecmd can't be used together with defaultcmd" + ? {o eval {info exists :c}} 0 # # valuechangedcmd + default value are allowed # + ? {o eval {info exists :a}} 0 o property {a 0} { set :valuechangedcmd {::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]]} } - + ? {o eval {info exists :a}} 1 + ? {o a} 1 ? {o a 1} 2 ? {o a} 2 @@ -1393,8 +1404,15 @@ set :valuechangedcmd {::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]]} } + # + # TODO: Right now, the per-object traces *do* fire upon setting the + # default value; the per-class traces won't ... this should be + # symmetric, either way ... + # + Klass create k - ? {k a} 1 + ? {k eval {info exists :a}} 1 + ? {k a} 0; # should be 1, reflecting the corresponding per-object case above ? {k a 1} 2 ? {k a} 2 ? {k a 2} 3