Index: library/nx/nx.tcl =================================================================== diff -u -r8776580a91fa04fd52378dd37143f6c27769c8ab -ra35803ea84148ebadd79d8527830dcbdebd8873e --- library/nx/nx.tcl (.../nx.tcl) (revision 8776580a91fa04fd52378dd37143f6c27769c8ab) +++ library/nx/nx.tcl (.../nx.tcl) (revision a35803ea84148ebadd79d8527830dcbdebd8873e) @@ -339,15 +339,23 @@ Class public method forward { methodName - -default -methodprefix -objframe:switch -onerror -returns -verbose:switch + -default -methodprefix -frame -onerror -returns -verbose:switch target:optional args } { - array set "" [:__resolve_method_path $methodName] + array set "" [:__resolve_method_path $methodName] set arguments [lrange [::nsf::current args] 1 end] + set nrPreArgs [expr {[llength $arguments]-[llength $args]}] + + if {[info exists frame]} { + if {$frame ne "object"} { error "value of parameter -frame must be 'object'" } + set p [lsearch -exact [lrange $arguments 0 $nrPreArgs] -frame] + # search for "-frame" in the arguments before $args and replace it + if {$p > -1} {set arguments [lreplace $arguments $p $p+1 -objframe]} + incr nrPreArgs -1 + } if {[info exists returns]} { - # search for "-returns" in the arguments before $args ... - set p [lsearch -exact [lrange $arguments 0 [expr {[llength $arguments]-[llength $args]}]] -returns] - # ... and remove it if found + # search for "-returns" in the arguments before $args and remove it + set p [lsearch -exact [lrange $arguments 0 $nrPreArgs] -returns] if {$p > -1} {set arguments [lreplace $arguments $p $p+1]} } set r [::nsf::method::forward $(object) $(methodName) {*}$arguments] @@ -529,14 +537,22 @@ :public method "object forward" { methodName - -default -methodprefix -objframe:switch -onerror -returns -verbose:switch + -default -methodprefix -frame -onerror -returns -verbose:switch target:optional args } { array set "" [:__resolve_method_path -per-object $methodName] set arguments [lrange [::nsf::current args] 1 end] + set nrPreArgs [expr {[llength $arguments]-[llength $args]}] + if {[info exists frame]} { + if {$frame ne "object"} { error "value of parameter -frame must be 'object'" } + set p [lsearch -exact [lrange $arguments 0 $nrPreArgs] -frame] + # search for "-frame" in the arguments before $args and replace it + if {$p > -1} {set arguments [lreplace $arguments $p $p+1 -objframe]} + incr nrPreArgs -1 + } if {[info exists returns]} { # search for "-returns" in the arguments before $args ... - set p [lsearch -exact [lrange $arguments 0 [expr {[llength $arguments]-[llength $args]}]] -returns] + set p [lsearch -exact [lrange $arguments 0 $nrPreArgs] -returns] # ... and remove it if found if {$p > -1} {set arguments [lreplace $arguments $p $p+1]} } @@ -546,7 +562,6 @@ if {[info exists returns]} {::nsf::method::property $(object) $r returns $returns} return $r } - } #