MOO-cows Mailing List Archive

[Prev][Next][Index][Thread]

Re: call_function() and $bf_FOO()



On Sat, 27 Apr 1996, Don Schwarz wrote:

> On Sat, 27 Apr 1996 slayer@kaiwan.com wrote:
> 
> > >I had thought of that, but I assumed this would be taken care of with
> > >DEFAULT_MAX_STACK_DEPTH the same way regular verb calls are.
> > but then the function doesn't get called at all. Say I had a #0:"bf_fileread
> > bf_fileextract bf_filegrep [...]" and had this:
> > 
> > [...]
> > return call_function(verb[4..$],@args);
> > endif
> > 
> > Yeah, I know this doesn't do permissions checks, but you get the idea,
> > anyway the builtin will never get called since it'll keep calling itself
> > over and over again.
> > 
> So?   If this happens, it obviously means something was programmed
> incorrectly and should raise an E_MAXREC.  What else could it do?

I think that people are missing something.  Of course, I could be wrong, 
but...

Take the ridiculous code
#0:bf_listappend tnt rxd
notify(#2, "in bf_listappend");
set_task_perms(caller_perms());
return call_function("listappend", @args);

This code *will not* recurse infinitely for the same reason that the same 
code except with
return listappend(@args);
won't.  Because the calling verb is on #0, the real builtin is called 
instead of the wrapper.  And, yes, I tried it; the notify is in there to 
convince myself that I was doing everything right.


  --Chris                           cunkel@engin.umich.edu
    ResComp Network Support Technician, Bursley Hall
    "Invisibility is in the eye of the beholder."
    Home Page: http://www-personal.engin.umich.edu/~cunkel/




References:

Home | Subject Index | Thread Index