Index: xotcl/generic/predefined.h =================================================================== diff -u -r55764ef8921abb0e4f506e0ae6b0caf3f842276d -r435b41481fb51bf000ebe736d8574fefbeec1710 --- xotcl/generic/predefined.h (.../predefined.h) (revision 55764ef8921abb0e4f506e0ae6b0caf3f842276d) +++ xotcl/generic/predefined.h (.../predefined.h) (revision 435b41481fb51bf000ebe736d8574fefbeec1710) @@ -1,5 +1,5 @@ static char cmd[] = -"# $Id: predefined.h,v 1.6 2005/01/10 11:57:35 neumann Exp $\n" +"# $Id: predefined.h,v 1.7 2005/09/09 21:07:23 neumann Exp $\n" "::xotcl::Object instproc init args {}\n" "::xotcl::Object create ::xotcl::@\n" "::xotcl::@ proc unknown args {}\n" @@ -28,10 +28,10 @@ "puts \"method '$m' unknown for [self]\"\n" "puts \" valid commands are: {[lsort [my info procs]]}\"}\n" "::xotcl::Relations create ::xotcl::relmgr -requireNamespace\n" -"::xotcl::Object instforward mixin -default [list get set] xotcl::relmgr %1 %self %proc\n" -"::xotcl::Object instforward filter -default [list get set] xotcl::relmgr %1 %self %proc\n" -"::xotcl::Class instforward instmixin -default [list get set] xotcl::relmgr %1 %self %proc\n" -"::xotcl::Class instforward instfilter -default [list get set] xotcl::relmgr %1 %self %proc\n" +"::xotcl::Object instforward mixin -default [list get set] ::xotcl::relmgr %1 %self %proc\n" +"::xotcl::Object instforward filter -default [list get set] ::xotcl::relmgr %1 %self %proc\n" +"::xotcl::Class instforward instmixin -default [list get set] ::xotcl::relmgr %1 %self %proc\n" +"::xotcl::Class instforward instfilter -default [list get set] ::xotcl::relmgr %1 %self %proc\n" "::xotcl::Object instproc self {} {return [::xotcl::self]}\n" "::xotcl::Object instproc defaultmethod {} {\n" "return [::xotcl::self]}\n" @@ -127,8 +127,7 @@ "error \"invalid method type '$methtype', \\\n" "must be either 'proc' or 'instproc'.\"}\n" "::xotcl::my $methtype $methname $arglist \"\n" -"if {\\[::xotcl::self callingproc\\] != \\[::xotcl::self proc\\] &&\n" -"\\[::xotcl::self callingobject\\] != \\[::xotcl::self\\]} {\n" +"if {!\\[::xotcl::self isnextcall\\]} {\n" "error \\\"Abstract method $methname $arglist called\\\"} else {::xotcl::next}\n" "\"}\n" "::xotcl::Class create ::xotcl::Object::CopyHandler -parameter {\n" @@ -276,5 +275,76 @@ "set ::xotcl::confdir ~/.xotcl\n" "set ::xotcl::logdir $::xotcl::confdir/log\n" "::xotcl::Class proc __unknown name {}\n" +"::xotcl::Class instproc uses list {\n" +"foreach package $list {\n" +"::xotcl::package import -into [self] $package\n" +"puts stderr \"*** using ${package}::* in [self]\"}}\n" +"::xotcl::Class create ::xotcl::package -superclass ::xotcl::Class -parameter {\n" +"provide\n" +"{version 1.0}\n" +"{autoexport {}}\n" +"{export {}}}\n" +"::xotcl::package proc create {name args} {\n" +"set nq [namespace qualifiers $name]\n" +"if {$nq ne \"\" && ![namespace exists $nq]} {Object create $nq}\n" +"next}\n" +"::xotcl::package proc extend {name args} {\n" +"my require $name\n" +"eval $name configure $args}\n" +"::xotcl::package instproc contains script {\n" +"if {[my exists provide]} {\n" +"package provide [my provide] [my version]} else {\n" +"package provide [self] [my version]}\n" +"namespace eval [self] {namespace import ::xotcl::*}\n" +"namespace eval [self] $script\n" +"foreach e [my export] {\n" +"set nq [namespace qualifiers $e]\n" +"if {$nq ne \"\"} {\n" +"namespace eval [self]::$nq [list namespace export [namespace tail $e]]} else {\n" +"namespace eval [self] [list namespace export $e]}}\n" +"foreach e [my autoexport] {\n" +"namespace eval :: [list namespace import [self]::$e]}}\n" +"::xotcl::package configure \\\n" +"-set component . \\\n" +"-set verbose 0 \\\n" +"-set packagecmd ::package\n" +"::xotcl::package proc unknown args {\n" +"eval [my set packagecmd] $args}\n" +"::xotcl::package proc verbose value {\n" +"my set verbose $value}\n" +"::xotcl::package proc present args {\n" +"if {$::tcl_version<8.3} {\n" +"my instvar loaded\n" +"switch -exact -- [lindex $args 0] {\n" +"-exact {set pkg [lindex $args 1]}\n" +"default {set pkg [lindex $args 0]}}\n" +"if {[info exists loaded($pkg)]} {\n" +"return $loaded($pkg)} else {\n" +"error \"not found\"}} else {\n" +"eval [my set packagecmd] present $args}}\n" +"::xotcl::package proc import {{-into ::} pkg} {\n" +"my require $pkg\n" +"namespace eval $into [subst -nocommands {\n" +"namespace import ${pkg}::*}]\n" +"foreach e [$pkg export] {\n" +"set nq [namespace qualifiers $e]\n" +"if {$nq ne \"\"} {\n" +"namespace eval $into$nq [list namespace import ${pkg}::$e]}}}\n" +"::xotcl::package proc require args {\n" +"::xotcl::my instvar component verbose uses loaded\n" +"set prevComponent $component\n" +"if {[catch {set v [eval package present $args]} msg]} {\n" +"switch -exact -- [lindex $args 0] {\n" +"-exact {set pkg [lindex $args 1]}\n" +"default {set pkg [lindex $args 0]}}\n" +"set component $pkg\n" +"lappend uses($prevComponent) $component\n" +"set v [uplevel \\#1 [my set packagecmd] require $args]\n" +"if {$v ne \"\" && $verbose} {\n" +"set path [lindex [::package ifneeded $pkg $v] 1]\n" +"puts \"... $pkg $v loaded from '$path'\"\n" +"set loaded($pkg) $v ;# loaded stuff needed for Tcl 8.0}}\n" +"set component $prevComponent\n" +"return $v}\n" "";