We're still missing something, here.  This solution does not use the
user-defined proc for procs that may be defined outside the tcl library, like a
helper proc defined within a .tcl page.  I'm going to experiment with using
ns_ictl get/save durin the 'oncreate' script, and see if I can use that to give
me 'postcreate' capabilities.  I'll post later if that works.

--dan

Quoting Dossy Shiobara <[EMAIL PROTECTED]>:

> On 2005.02.06, Dan Chak <[EMAIL PROTECTED]> wrote:
> >
> > Also, the namespace stuff isn't stripping namespace away, but simply
> > making the namespace explicit when the proc was defined in one.  For
> > some reason, _not_doing_this_ breaks code in namespaces.  I plucked
> > that snippet from OACS's ad_proc.
>
> This is interesting.  I'd like to see a test case demonstrating this
> breakage.  I wonder if we'd be better off doing:
>
>     rename proc _proc
>     _proc proc {name args body} {
>         uplevel [list _proc $name $args $body]
>     }
>
> That should work correctly with namespaces.  Another thing that should
> be done is examining [lindex [info level 0] 0] to ensure we invoke the
> real proc in the right namespace, if it's appropriate: maybe this is
> unnecessary.  I'd have to see a code example where it failed to work
> correctly because it didn't do this.
>
> > First, I want to make sure our terminology is matching.  When you say
> > "master interp," you are referring to the interpreter that is
> > processing the private tcl library, correct?
>
> Correct.
>
> > I actually _do_ want the private library to load using the redefined
> > proc.  The only time I do not want my version of proc to be used is
> > during the "cloning" which causes all the defined procs to be
> > redefined with whatever is the current proc command.
>
> So, then, what you want is:
>
> --- 000-redefine-proc.tcl ---
>
>     rename proc _proc
>     _proc proc {name args body} {
>         # your new proc def here
>     }
>
> --- 999-redefine-proc.tcl ---
>
>     rename proc {}
>     rename _proc proc
>
> ---
>
> This way, your private Tcl library sources with your custom [proc]
> definition, but blows it away at the end so before AOLserver dumps the
> contents of the master interp's proc definitions, your custom [proc] is
> gone, so future child interps don't contain your redefined proc, and
> instead use the real thing.
>
> > Next, I tried to use ns_ictl get/save, but it doens't seem to do
> > anything.  E.g., I had this load early in my private tcl library, but
> > when I print out the value of [ns_ictl get] in a .tcl page, I don't see
> > my ns_log calls, and I never see the messages in the log itself,
> > either.  If this worked, it would seem like it could take the place of
> > 'oncreate' and the 'postcreate' which I am looking for.
>
> Ah, yes - silly me.  You can't use [ns_ictl get] or [ns_ictl save]
> during startup because the script is only formed once all of the Tcl
> libraries are done sourcing.  I tested this from the control port ...
> sorry about that.
>
> Yeah, there really isn't a good way to do a "postcreate" script.  But
> then, I often think when your approach requires one, you're probably
> doing wrong ... :-)
>
>     "Doctor, it hurts when do I this ..."  "Well, then, don't do that."
>
> -- Dossy
>
> --
> Dossy Shiobara                       mail: [EMAIL PROTECTED]
> Panoptic Computer Network             web: http://www.panoptic.com/
>   "He realized the fastest way to change is to laugh at your own
>     folly -- then you can let go and quickly move on." (p. 70)
>
>
> --
> AOLserver - http://www.aolserver.com/
>
> To Remove yourself from this list, simply send an email to
> <[EMAIL PROTECTED]> with the
> body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject:
> field of your email blank.
>


--
AOLserver - http://www.aolserver.com/

To Remove yourself from this list, simply send an email to <[EMAIL PROTECTED]> 
with the
body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: 
field of your email blank.

Reply via email to