summaryrefslogtreecommitdiffstats
path: root/library/init.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'library/init.tcl')
-rw-r--r--library/init.tcl96
1 files changed, 36 insertions, 60 deletions
diff --git a/library/init.tcl b/library/init.tcl
index dba73b0..5cedd14 100644
--- a/library/init.tcl
+++ b/library/init.tcl
@@ -45,7 +45,6 @@ if {![info exists auto_path]} {
set auto_path ""
}
}
-
namespace eval tcl {
variable Dir
foreach Dir [list $::tcl_library [file dirname $::tcl_library]] {
@@ -67,12 +66,12 @@ namespace eval tcl {
}
if {![interp issafe]} {
- variable Path [encoding dirs]
- set Dir [file join $::tcl_library encoding]
- if {$Dir ni $Path} {
+ variable Path [encoding dirs]
+ set Dir [file join $::tcl_library encoding]
+ if {$Dir ni $Path} {
lappend Path $Dir
encoding dirs $Path
- }
+ }
}
# TIP #255 min and max functions
@@ -158,17 +157,6 @@ if {(![interp issafe]) && ($tcl_platform(platform) eq "windows")} {
if {[interp issafe]} {
package unknown {::tcl::tm::UnknownHandler ::tclPkgUnknown}
} else {
- # Default known auto_index (avoid loading auto index implicit after interp create):
-
- array set ::auto_index {
- ::tcl::tm::UnknownHandler {source [info library]/tm.tcl}
- ::tclPkgUnknown {source [info library]/package.tcl}
- ::history {source [info library]/history.tcl}
- }
-
- # The newest possibility to load whole namespace:
- array set ::auto_index_ns {}
-
# Set up search for Tcl Modules (TIP #189).
# and setup platform specific unknown package handlers
if {$tcl_platform(os) eq "Darwin"
@@ -181,21 +169,22 @@ if {[interp issafe]} {
# Set up the 'clock' ensemble
- proc clock args {
- set cmdmap [dict create]
- foreach cmd {add clicks format microseconds milliseconds scan seconds configure} {
- dict set cmdmap $cmd ::tcl::clock::$cmd
+ namespace eval ::tcl::clock [list variable TclLibDir $::tcl_library]
+
+ proc ::tcl::initClock {} {
+ # Auto-loading stubs for 'clock.tcl'
+
+ foreach cmd {add format scan} {
+ proc ::tcl::clock::$cmd args {
+ variable TclLibDir
+ source -encoding utf-8 [file join $TclLibDir clock.tcl]
+ return [uplevel 1 [info level 0]]
+ }
}
- namespace inscope ::tcl::clock [list namespace ensemble create -command \
- [uplevel 1 [list ::namespace origin [::lindex [info level 0] 0]]] \
- -map $cmdmap -compile 1]
- uplevel 1 [info level 0]
+ rename ::tcl::initClock {}
}
- # Auto-loading stubs for 'clock.tcl'
- set ::auto_index_ns(::tcl::clock) {::namespace inscope ::tcl::clock {
- ::source -encoding utf-8 [::file join [info library] clock.tcl]
- }}
+ ::tcl::initClock
}
# Conditionalize for presence of exec.
@@ -423,22 +412,18 @@ proc unknown args {
# for instance. If not given, namespace current is used.
proc auto_load {cmd {namespace {}}} {
- global auto_index auto_index_ns auto_path
+ global auto_index auto_path
- # qualify names:
if {$namespace eq ""} {
set namespace [uplevel 1 [list ::namespace current]]
}
set nameList [auto_qualify $cmd $namespace]
# workaround non canonical auto_index entries that might be around
# from older auto_mkindex versions
- if {$cmd ni $nameList} {lappend nameList $cmd}
-
- # try to load (and create sub-cmd handler "_sub_load_cmd" for further usage):
- foreach name $nameList [set _sub_load_cmd {
- # via auto_index:
+ lappend nameList $cmd
+ foreach name $nameList {
if {[info exists auto_index($name)]} {
- namespace inscope :: $auto_index($name)
+ namespace eval :: $auto_index($name)
# There's a couple of ways to look for a command of a given
# name. One is to use
# info commands $name
@@ -450,31 +435,22 @@ proc auto_load {cmd {namespace {}}} {
return 1
}
}
- # via auto_index_ns - resolver for the whole namespace loaders
- if {[set ns [::namespace qualifiers $name]] ni {"" "::"} &&
- [info exists auto_index_ns($ns)]
- } {
- # remove handler before loading (prevents several self-recursion cases):
- set ldr $auto_index_ns($ns); unset auto_index_ns($ns)
- namespace inscope :: $ldr
- # if got it:
- if {[namespace which -command $name] ne ""} {
- return 1
- }
- }
- }]
-
- # load auto_index if possible:
+ }
if {![info exists auto_path]} {
return 0
}
+
if {![auto_load_index]} {
return 0
}
-
- # try again (something new could be loaded):
- foreach name $nameList $_sub_load_cmd
-
+ foreach name $nameList {
+ if {[info exists auto_index($name)]} {
+ namespace eval :: $auto_index($name)
+ if {[namespace which -command $name] ne ""} {
+ return 1
+ }
+ }
+ }
return 0
}
@@ -637,12 +613,12 @@ proc auto_import {pattern} {
auto_load_index
foreach pattern $patternList {
- foreach name [array names auto_index $pattern] {
- if {([namespace which -command $name] eq "")
+ foreach name [array names auto_index $pattern] {
+ if {([namespace which -command $name] eq "")
&& ([namespace qualifiers $pattern] eq [namespace qualifiers $name])} {
- namespace inscope :: $auto_index($name)
- }
- }
+ namespace eval :: $auto_index($name)
+ }
+ }
}
}