Ticket UUID: | 1577282 | |||
Title: | TIP 283: ensemble's command resolution | |||
Type: | RFE | Version: | None | |
Submitter: | msofer | Created on: | 2006-10-14 17:28:58 | |
Subsystem: | 21. [namespace] | Assigned To: | dkf | |
Priority: | 7 High | Severity: | Minor | |
Status: | Open | Last Modified: | 2024-03-22 15:55:31 | |
Resolution: | None | Closed By: | nobody | |
Closed on: | ||||
Description: |
[namespace unknown] should be able to follow [namespace path] and [namespace unknown] lookup behaviour. After application of [Patch 1577278], adding a line iPtr->lookupNsPtr = ensemblePtr->nsPtr; just before the call to Tcl_EvalObjv in NamespaceImplementationCmd enables this behaviour. If the registered ensemble unknownProc returns a FQ command as first element of the list, the resolution is still global. If the name is not FQ, the resolution will follow whatever rules the ensemble's namespace has set in place. | |||
User Comments: |
jan.nijtmans added on 2024-03-22 15:55:31:
Ping. Found this ooooooold ticket. Related to [910d67a229]? dkf added on 2009-07-13 19:35:57: The NRE-enabled command dispatch function allows control over the command resolution context. Might be worth looking at whether this FRQ can be dealt with through that route. msofer added on 2006-11-02 03:40:28: File Added - 201011: tip283-1.patch msofer added on 2006-11-02 03:40:27: Logged In: YES user_id=148712 Updated patch that works in HEAD. It breaks test cmdAH-24.12 in a weird manner - by breaking autoloading of [clock scan]. The reason is exposed below; the problem with clock can be fixed easily, but the wider problem may be more important. *** DANGER *** As the "fix" for [info level] in HEAD was reverted (Bug 1577492, previously called "let [info level] know ensemble rewrites"), this new feature breaks nother usual idiom. 'uplevel 1 [info level 0]' is NOT GUARANTEED to call the present proc again This is because: (a) 'namespace ensemble' does not push a new frame (b) 'namespace ensemble' calls by simple name (non qualified) (c) 'info level 0' reflects only the actual call, ie, a simple name As an illustration, with this patch we get: % namespace eval a { variable ct 0 namespace ensemble create -map {x scan} proc scan args { variable ct if {$ct} { puts YES return } incr ct uplevel 1 [info level 0] } } % a x wrong # args: should be "scan string format ?varName varName ...?" msofer added on 2006-10-26 08:13:12: File Added - 200065: tip283.patch Logged In: YES user_id=148712 Updated patch: code, docs, (incomplete) tests msofer added on 2006-10-15 01:16:16: File Added - 198173: eunknown.patch msofer added on 2006-10-15 01:16:15: Logged In: YES user_id=148712 Patch for docs and tests attached |