Index: TODO =================================================================== diff -u -r16d627336b40d4eafd46400984337bf3e514605e -r9c42d58b1bba6adee451ccf9ce55d2c1b44aef39 --- TODO (.../TODO) (revision 16d627336b40d4eafd46400984337bf3e514605e) +++ TODO (.../TODO) (revision 9c42d58b1bba6adee451ccf9ce55d2c1b44aef39) @@ -2795,13 +2795,12 @@ * extended regression test - nsf.c: require NSF_IS_SLOT_CONTAINER for slot-container +- nx.tcl: ne proc ::nx::setSlotContainerProperties to handle slot + container properties in a uniform way +- reduce verbosity - TODO: -- adding of other slotcontainer properties in copy (see nx.tcl) -- remove debug output from parameters.test and nx.tcl - - missing in c-based "info slots": * handle object specific "info slots" in C? * "info slots", "info parameter" are not in the migration guide Index: library/nx/nx.tcl =================================================================== diff -u -r16d627336b40d4eafd46400984337bf3e514605e -r9c42d58b1bba6adee451ccf9ce55d2c1b44aef39 --- library/nx/nx.tcl (.../nx.tcl) (revision 16d627336b40d4eafd46400984337bf3e514605e) +++ library/nx/nx.tcl (.../nx.tcl) (revision 9c42d58b1bba6adee451ccf9ce55d2c1b44aef39) @@ -414,6 +414,15 @@ return 0 } + proc ::nx::setSlotContainerProperties {baseObject containerName} { + set slotContainer ${baseObject}::$containerName + $slotContainer ::nsf::methods::object::requirenamespace + ::nsf::method::property $baseObject -per-object $containerName call-protected true + ::nsf::method::property $baseObject -per-object $containerName redefine-protected true + #puts stderr "::nsf::method::property $baseObject -per-object $containerName slotcontainer true" + ::nsf::method::property $baseObject -per-object $containerName slotcontainer true + } + # # The function slotObj ensures that the slot container for the provided # baseObject exists. It returns either the name of the slotContainer @@ -425,11 +434,7 @@ set slotContainer ${baseObject}::$container if {![::nsf::object::exists $slotContainer]} { ::nx::Object ::nsf::methods::class::alloc $slotContainer - $slotContainer ::nsf::methods::object::requirenamespace - ::nsf::method::property ${baseObject} -per-object $container call-protected true - ::nsf::method::property ${baseObject} -per-object $container redefine-protected true - #puts stderr "::nsf::method::property ${baseObject} -per-object $container slotcontainer true" - ::nsf::method::property ${baseObject} -per-object $container slotcontainer true + ::nx::setSlotContainerProperties $baseObject $container } if {[info exists name]} { return ${slotContainer}::$name @@ -1695,24 +1700,30 @@ } :copyNSVarsAndCmds $origin $dest foreach i [$origin ::nsf::methods::object::info::forward] { - ::nsf::method::forward $dest -per-object $i {*}[$origin ::nsf::methods::object::info::forward -definition $i] + ::nsf::method::forward $dest -per-object $i \ + {*}[$origin ::nsf::methods::object::info::forward -definition $i] } if {[::nsf::is class $origin]} { foreach i [$origin ::nsf::methods::class::info::forward] { - ::nsf::method::forward $dest $i {*}[$origin ::nsf::methods::class::info::forward -definition $i] + ::nsf::method::forward $dest $i \ + {*}[$origin ::nsf::methods::class::info::forward -definition $i] } } - set parent [$origin ::nsf::methods::object::info::parent] - set method [namespace tail $origin] - if {$parent ne "::" && [::nsf::method::property $parent -per-object $method slotcontainer]} { - #puts stderr "$origin.$method is a slot container" - set p [$dest ::nsf::methods::object::info::parent] - ::nsf::method::property $p -per-object $method slotcontainer true - # TODO: add other slotcontainer properties as well, we should make a proc + + # + # Check, if $origin is a slot container. If yes, set the same + # properties on $dest + # + set base [$origin ::nsf::methods::object::info::parent] + set container [namespace tail $origin] + if {$base ne "::" && [::nsf::method::property $base -per-object $container slotcontainer]} { + ::nx::setSlotContainerProperties [$dest ::nsf::methods::object::info::parent] $container } - set traces [list] + # + # transfer the traces + # foreach var [$origin info vars] { set cmds [::nsf::dispatch $origin -frame object ::trace info variable $var] if {$cmds ne ""} { @@ -1733,7 +1744,10 @@ } #puts stderr "=====" } + + # # alter 'domain' and 'manager' in slot objects + # foreach origin [set :targetList] { set dest [:getDest $origin] set slots [list] Index: tests/parameters.test =================================================================== diff -u -r18d88a73e8c4aed2496085bcd9202537b0f7930e -r9c42d58b1bba6adee451ccf9ce55d2c1b44aef39 --- tests/parameters.test (.../parameters.test) (revision 18d88a73e8c4aed2496085bcd9202537b0f7930e) +++ tests/parameters.test (.../parameters.test) (revision 9c42d58b1bba6adee451ccf9ce55d2c1b44aef39) @@ -1514,11 +1514,7 @@ Test parameter count 1 package req XOTcl - puts stderr ====1-[xotcl::Class ::nsf::methods::object::info::lookupmethod parameter] - puts stderr ====1-[nx::Object info method definition ::nsf::classes::xotcl::Class::parameter] - puts stderr ====1-[nx::Object info method definition ::nsf::classes::nx::Class::attributes] xotcl::Class create CC -parameter {package_id parameter_declaration user_id} - puts stderr ====2 # first, without list notation ? {CC create cc -package_id 123 -parameter_declaration o -user_id 4} "::cc"