Ticket UUID: | 420186 | |||
Title: | namespace import | |||
Type: | Bug | Version: | obsolete: 8.4a3 | |
Submitter: | nobody | Created on: | 2001-04-30 16:02:12 | |
Subsystem: | 38. Init - Library - Autoload | Assigned To: | dgp | |
Priority: | 5 Medium | Severity: | ||
Status: | Closed | Last Modified: | 2001-05-04 05:39:14 | |
Resolution: | Fixed | Closed By: | dgp | |
Closed on: | 2001-05-03 22:39:14 | |||
Description: |
Linux SuSE7.1 example: ==> Test1.tcl >>>>>>>>>>>>>>>>>>>>>>>>>>>> #!/bin/sh #\ exec tclsh "$0" lappend auto_path [ pwd ] puts [ ::Args::Test::Main ] <<<<<<<<<<<<<<<<<<<<<<<<<<<< ==> Test2.tcl >>>>>>>>>>>>>>>>>>>>>>>>>>> namespace eval ::Args { namespace export * } proc ::Args::P1 {} { return P1 } namespace eval ::Args::Test { namespace import ::Args::* } proc ::Args::Test::Main {} { return "P1<[P1]>" } <<<<<<<<<<<<<<<<<<<<<<<<<<< ==> tclIndex >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # Tcl autoload index file, version 2.0 # This file is generated by the "auto_mkindex" command # and sourced to set up indexing information for one or # more commands. Typically each line is a command that # sets an element in the auto_index array, where the # element name is the name of a command and the value is # a script that loads the command. set auto_index(::Args::P1) [list source [file join $dir Test2.tcl]] set auto_index(::Args::Test::Main) [list source [file join $dir Test2.tcl]] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< If you run: ./Test1.tcl you get: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> too many nested calls to Tcl_Eval (infinite loop?) while executing "namespace current" ("uplevel" body line 1) invoked from within "uplevel namespace current" (procedure "auto_import" line 4) invoked from within "namespace import ::Args::*" (in namespace eval "::Args::Test" script line 2) invoked from within "namespace eval ::Args::Test { namespace import ::Args::* }" (file "/alt/home/dev1usr/Project/Compiler2/test/Config/Test/Test2.tcl" line 7) invoked from within "source /alt/home/dev1usr/Project/Compiler2/test/Config/Test/Test2.tcl" ("uplevel" body line 1) invoked from within "uplevel #0 $auto_index($name)" (procedure "auto_import" line 12) invoked from within "namespace import ::Args::*" (in namespace eval "::Args::Test" script line 2) ... <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | |||
User Comments: |
dgp added on 2001-05-04 05:39:14:
Logged In: YES user_id=80530 Committed. dgp added on 2001-05-04 05:36:09: File Deleted - 5973: File Added - 5974: import.patch dgp added on 2001-05-04 05:35:08: File Deleted - 5869: File Added - 5973: import.patch Logged In: YES user_id=80530 Improved patch include updates to test suite, and improved auto_index filtering (fewer script level iterations). hobbs added on 2001-05-04 03:38:13: Logged In: YES user_id=72656 looks good to me. dgp added on 2001-05-01 04:01:08: File Added - 5869: import.patch Logged In: YES user_id=80530 Attached patch corrects [auto_import] to do pattern matching in the [namespace import] style. Since there are no other callers of [auto_import], I think this is a safe change in terms of compatibility. I'll commit this to the HEAD tomorrow unless I hear an objection. dgp added on 2001-05-01 02:58:57: File Added - 5866: test.tcl Logged In: YES user_id=80530 Attaching a simplified test script, test.tcl Exercise the bug: $ tclsh % auto_mkindex . test.tcl % lappend auto_path . % Args::Test::Main too many nested calls to Tcl_Eval (infinite loop?) The problem seems to be in [auto_import]. It is using a full [string match $pattern] to filter the names in auto_index, but [namespace import] is only interested in matches according to its stricter matching rules. The wildcards should only match on command names, not parent namespaces. |