MOO-cows Mailing List Archive

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

Re: Wrong



At 06:58 PM 3/17/96 PST, Christopher Unkel wrote:
>On Sun, 17 Mar 1996, Hans Friedrich-- wrote:
>
>> old=callers(@args);
>> old=listdelete(old, length(old));
>> new={};
>> for x in (old)
>>   if (x[3..5] != {"", #-1, #-1})
>>     new={@new, x};
>>   endif
>> endfor
>> return new;
>
>I goofed when I first wrote this code.  Replace the first two lines:
>
>> old=callers(@args);
>> old=listdelete(old, length(old));
>
>with:
>
>old=callers()[2..$];
>
>(Which deletes the *first* element of the callers(), list, instead of the 
>first.)
>
>If you use it the way I wrote it originally, you'll eliminate all 
>built-ins, but the first element of the return value will be the call to 
>:old_callers, and what should be the last element of the return will be 
>missing.
>
>Thus are the dangers of writing even the simplest code late at night 
>without checking it very carefully illustrated.  Sorry.

I see the problem here. The verb name is x[2], you're taking [3..5] which is
wrong since #3 is the permissions, you're checking for it to be a string
which it can't be.
Here's my $callers() verb that works fine:

callers = callers(@args)[2..$];
for vb in (callers)
  vb[1] == #-1 && vb[4] == #-1 && vb[2] != "" && (callers = setremove(callers,
vb));
endfor
return callers;





Home | Subject Index | Thread Index