Hi again,
well the problem here is the same as before. "eval" passes the control to the Tcl eval command implementation. That is, all what is called inside an "eval" in an object's namespace bypasses the XOTcl dispatcher. So the callstack entries are not correct. also filters/mixins do not work here. You should always use the XOTcl invocation syntax "objName methodName args", like:
$newOb eval { $newOb doStuff }
I would like to make it impossible to call doStuff directly here, as in the example below, but this would require changes to the Tcl core or has a performance impact; so we chose to live with the problem that procs can be called directly via the namespace
Uwe
Kristoffer Lawson wrote:
Still looking for an official explanation for the operations of [eval] (and other stuff I posted), but here's another one. The code follows:
package require XOTcl 1.3 namespace import xotcl::*
Class Foo -parameter doors
Foo instproc init {req} { puts $req }
Object ob
set newOb [Foo new -childof ob hello -doors 4] puts "Doors: [$newOb doors]"
$newOb proc doStuff {} { puts "class: [self class]" set newOb [[self class] new -childof [self] whatevah -doors 3] puts "Doors: [$newOb doors]" }
$newOb doStuff
#$newOb eval { # doStuff #}
This version correctly states that the class for [self class] is an empty string. However, if I comment out the "eval" version and use it instead, [self class] gives me "::xotcl::Object".
/ http://www.fishpool.com/~setok/
Xotcl mailing list - Xotcl@alice.wu-wien.ac.at http://alice.wu-wien.ac.at/mailman/listinfo/xotcl