Index: library/lib/nx-traits.tcl =================================================================== diff -u -r9d0ea2cf357adc5108001519286490593977e7e1 -rf934951db464db1a6f39ac98290ecde17a466cd7 --- library/lib/nx-traits.tcl (.../nx-traits.tcl) (revision 9d0ea2cf357adc5108001519286490593977e7e1) +++ library/lib/nx-traits.tcl (.../nx-traits.tcl) (revision f934951db464db1a6f39ac98290ecde17a466cd7) @@ -100,7 +100,7 @@ } } foreach slot [$traitName info variables] { - #puts "$obj - wanna define: [$traitName info variable definition $slot]" + #puts "$obj - will define: [$traitName info variable definition $slot]" $obj {*}[lrange [$traitName info variable definition $slot] 1 end] if {[nx::configure trait-verbosity]} { puts "...trait: $obj [lrange [$traitName info variable definition $slot] 1 end]" @@ -113,7 +113,7 @@ # object has the method defined that the trait requires. # nsf::proc checkObject {obj traitName} { - foreach m [$traitName requiredMethods] { + foreach m [$traitName cget -requiredMethods] { #puts "$m ok? [$obj info methods -closure $m]" if {[$obj info lookup method $m] eq ""} { error "trait $traitName requires $m, which is not defined for $obj" @@ -126,7 +126,7 @@ # class has the method defined that the trait requires. # nsf::proc checkClass {obj traitName} { - foreach m [$traitName requiredMethods] { + foreach m [$traitName cget -requiredMethods] { #puts "$m ok? [$obj info methods -closure $m]" if {[$obj info methods -closure $m] eq ""} { error "trait $traitName requires $m, which is not defined for $obj" @@ -163,16 +163,19 @@ # nx::Class create nx::Trait -superclass nx::Class { :property {package} - :property -incremental {requiredMethods:0..n ""} - :property -incremental {requiredVariables:0..n ""} + :property {requiredMethods:0..n ""} + :property {requiredVariables:0..n ""} + ::nsf::method::setter [self] requiredMethods:0..n + ::nsf::method::setter [self] requiredVariables:0..n + :public method "require trait" {traitName {nameMap ""}} { # adding a trait to a trait nx::trait::require $traitName nx::trait::add [self] $traitName $nameMap set finalReqMethods {} # remove the methods from the set of required methods, which became available - foreach m [lsort -unique [concat ${:requiredMethods} [$traitName requiredMethods]]] { + foreach m [lsort -unique [concat ${:requiredMethods} [$traitName cget -requiredMethods]]] { if {[:info methods $m] eq ""} {lappend finalReqMethods $m} } #puts "final reqMethods of [self]: $finalReqMethods // defined=[:info methods]"