Squashed commit of the following: commit 370f47d26099dd8cda4125de67048461edb797a9 Author: ssoberni <stefan.sobernig@wu-wien.ac.at> Date: Thu Nov 4 10:56:11 2010 +0100
Due to recent changes in InterpColonVarResolver() to handle the slow-path execution the byte-compiled [variable], an unwanted interaction between ::nsf::setter, *certain* per-object namespaces, and the ColonCmd()-based invocation of setter methods became visible. In short: Given a pre-existing Tcl namespace and the colon-prefixed call specification to a setter method, InterpColonVarResolver() handles the var resolution request issued by the setter method (or SetInstVar(), more precisely). In a colon-prefixed call, the Tcl_Obj carrying the setter method name and used to lookup the object variable contains the ":". At the same time, the per-object namespace causes the TCL_NAMESPACE_ONLY flag to be set which causes InterpColonVarResolver() to pass on the request. In this setting, we end up with colon-prefixed object variables! See tests/parameter.test for an explanatory test case. For the time being, I fixed this by preserving and using the original, colon-free Tcl_Obj indicating the variable name in the client data structure of the settercmd.