Index: TODO =================================================================== diff -u -r39607bed15618248130a1251cc2b1c2a03db93b0 -r236c09e4dce9355a63c83b75f8c3a4955148c17d --- TODO (.../TODO) (revision 39607bed15618248130a1251cc2b1c2a03db93b0) +++ TODO (.../TODO) (revision 236c09e4dce9355a63c83b75f8c3a4955148c17d) @@ -1755,6 +1755,11 @@ - fix requiredness of several info methods - added "nsf::configure debug ?level?" +- use "nsf::configure debug" for + value 1: compain about protected + value >1: provide load messages for nx and xotcl +- unset unneeded variables in ::nx namespace + TODO: - "-returns" @@ -1765,7 +1770,8 @@ - forward has just "-objscope", no general "-frame method|object". Since forwarder have client data, they always push a method frame. So, the situation is different to nsd::alias and ::nsf::dispatch. - not sure, if we should rename "-objscope" to something different. + not sure, if we should rename "-objscope" to something different, + such as e.g. "-objectframe". - when compiled on my home machine for tcl 8.5.9 + aolserver, i see the behavior that "info exists :type" does not appear to work, @@ -1794,8 +1800,6 @@ this change for NsfCallStackFindLastInvocation(), but nsfStack.c has still several occurences, where they are treated differently. -- add "::nsf::configure verbose on|off" ... or "warning"? or "debug level"? - - C-interface * rework C-interface * maybe for post-alpha, but we have be first clear Index: generic/nsf.c =================================================================== diff -u -r39607bed15618248130a1251cc2b1c2a03db93b0 -r236c09e4dce9355a63c83b75f8c3a4955148c17d --- generic/nsf.c (.../nsf.c) (revision 39607bed15618248130a1251cc2b1c2a03db93b0) +++ generic/nsf.c (.../nsf.c) (revision 236c09e4dce9355a63c83b75f8c3a4955148c17d) @@ -6948,16 +6948,14 @@ if (cmd && (Tcl_Command_flags(cmd) & NSF_CMD_PROTECTED_METHOD) && (flags & (NSF_CM_NO_UNKNOWN|NSF_CM_NO_PROTECT)) == 0) { - NsfObject *o, *lastSelf = GetSelfObj(interp); + NsfObject *lastSelf = GetSelfObj(interp); - /* we do not want to rely on clientData, so get obj from cmdObj */ - GetObjectFromObj(interp, cmdObj, &o); - if (o != lastSelf) { - /*fprintf(stderr, "+++ protected method %s is not invoked\n", methodName);*/ - /* allow unknown-handler to handle this case */ - fprintf(stderr, "+++ %s is protected, therefore unknown %p %s lastself=%p o=%p flags = %.6x\n", - methodName, cmdObj, ObjStr(cmdObj), lastSelf, o, flags); - /*NsfShowStack(interp);*/ + if (object != lastSelf) { + if (RUNTIME_STATE(interp)->debugLevel > 0) { + fprintf(stderr, "Warning: method %s is protected; %s.%s is treated as unknown.\n", + methodName, objectName(object), methodName); + } + /* reset cmd, since it is still unknown */ cmd = NULL; } } Index: library/nx/nx.tcl =================================================================== diff -u -r39607bed15618248130a1251cc2b1c2a03db93b0 -r236c09e4dce9355a63c83b75f8c3a4955148c17d --- library/nx/nx.tcl (.../nx.tcl) (revision 39607bed15618248130a1251cc2b1c2a03db93b0) +++ library/nx/nx.tcl (.../nx.tcl) (revision 236c09e4dce9355a63c83b75f8c3a4955148c17d) @@ -55,6 +55,7 @@ set cmdName [namespace tail $cmd] if {$cmdName in [list "filterguard" "mixinguard"]} continue ::nsf::alias Class $cmdName $cmd + unset cmdName } # set a few aliases as protected @@ -66,6 +67,7 @@ foreach cmd [list recreate] { ::nsf::methodproperty Class $cmd call-protected 1 } + unset cmd # protect some methods against redefinition ::nsf::methodproperty Object destroy redefine-protected true @@ -502,6 +504,7 @@ if {[::nsf::dispatch ::nx::Object::slot::__info ::nsf::methods::object::info::method type $m] eq "object"} continue set definition [::nsf::dispatch ::nx::Object::slot::__info ::nsf::methods::object::info::method definition $m] ::nx::Class::slot::__info {*}[lrange $definition 1 end] + unset definition } Class eval { @@ -1461,6 +1464,7 @@ foreach m [Class info methods] { ::nsf::methodproperty Class $m class-only true } + unset m ####################################################### # some utilities @@ -1525,6 +1529,9 @@ set ::nsf::parametersyntax(::nsf::classes::nx::Object::filter) $value set ::nsf::parametersyntax(::nsf::classes::nx::Class::filter) $value set ::nsf::parametersyntax(::nsf::classes::nx::Object::eval) "arg ?arg ...?" + unset value + + ::nsf::configure debug 1 } ####################################################################### @@ -1539,5 +1546,10 @@ unset bootstrap } -puts stderr =======NX-done - +if {[::nsf::configure debug] > 1} { + foreach ns {::nsf ::nx} { + puts "vars of $ns: [info vars ${ns}::*]" + puts stderr "$ns exports: [namespace eval $ns {lsort [namespace export]}]" + } + puts stderr "======= nx loaded" +} Index: library/xotcl/library/xotcl2.tcl =================================================================== diff -u -rc5d841d4cd001b85e95e01202b4fc0afe75df6a8 -r236c09e4dce9355a63c83b75f8c3a4955148c17d --- library/xotcl/library/xotcl2.tcl (.../xotcl2.tcl) (revision c5d841d4cd001b85e95e01202b4fc0afe75df6a8) +++ library/xotcl/library/xotcl2.tcl (.../xotcl2.tcl) (revision 236c09e4dce9355a63c83b75f8c3a4955148c17d) @@ -956,7 +956,7 @@ set :packagecmd ::package } - if {[info exists cmd]} {unset cmd} + unset -nocomplain cmd # Documentation stub object -> just ignore per default. # if xoDoc is loaded, documentation will be activated @@ -971,6 +971,10 @@ namespace export Object Class Attribute myproc myvar my self next @ } -foreach ns {::nsf ::nx ::xotcl} { - puts stderr "$ns exports [namespace eval $ns {lsort [namespace export]}]" +if {[::nsf::configure debug] > 1} { + foreach ns {::xotcl} { + puts "vars of $ns: [info vars ${ns}::*]" + puts stderr "$ns exports: [namespace eval $ns {lsort [namespace export]}]" + } + puts stderr "======= XOTcl $::xotcl::version$::xotcl::patchlevel loaded" }