From: SourceForge.net <no...@so...> - 2012-09-12 08:09:52
|
Bugs item #3566940, was opened at 2012-09-12 01:09 Message generated for change (Tracker Item Submitted) made by dkf You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=113244&aid=3566940&group_id=13244 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Namespace usage Group: 4.0* Status: Open Resolution: None Priority: 5 Private: No Submitted By: Donal K. Fellows (dkf) Assigned to: Michael McLennan (mmclennan) Summary: #auto generates namespaced names Initial Comment: According to a message by jon...@fa... on comp.lang.tcl: > I'm learning/experimenting with ITCL with a view to using it for a project. I'm using 8.6, and the version of ITCL that comes bundled with that. > So, when I use #auto to auto generate an object name I get back something like classA0, classB1 ... which is fine, except it's not the actual name of the object ... later on when I try to use the object from a different context I get an unknown command error: it appears that the name of the object is the name within the local context when the object was created, something like ::classA::classB1. > I've worked around this by using a proc to generate a global name at each object creation point, but that's a bit cludgy. > Is there a way to make the auto name global? Or is there an elegant way to only have the name generation override in one place. I've looked into it, and I believe that the sprintf() used to generate a name (in the #auto processing in Itcl_HandleClass() in generic/itclClass.c) is not adding a leading namespace qualifier (class names don't start with a ::, so the generated name doesn't, so ItclCreateObject() qualifies with respect to the current namespace). The simplest fix is to adjust the pattern used in the sprintf() to "::%.200s%d" (i.e., add a leading ::) which ensures that objects are always created in the correct namespace. (I'd attach a patch, but it's a trivial alteration and the buffer being written to is definitely large enough...) The down-side is that the objects will report a fully-qualified name when #auto is used. I don't know if that matters. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=113244&aid=3566940&group_id=13244 |