[re-cc'd p6i due to mailer failure on my part]
 >At 10:17 PM 5/22/2002 +0000, via RT wrote:
 >Clinton A. Pierce wrote:
 >
 >> * sync up, and get the latest Parrot BASIC.  It's fully hash-enabled and
 >> quite speedy now.
 >>
 >> * Run "basic.pl" to assemble the interpreter, and get it started
 >>
 >> * At the "Ready" prompt, "LOAD eliza"
 >>
 >> * When finished, type RUN
 >>
 >> The crash will happen shortly thereafter.  Comments in #parrot seem to
 >
 >The problem appears to originate in the routine SFETCH, which tries to fetch
 >key "TWIRL" from the hash in P21 without finding it. The hash code returns a
 >null pointer under these circumstances, which is accepted as an empty string
 >by some, but not all, string handling code. In this case, attempting to
 >store the string into an array is invoking string_copy, which assumes the
 >input to be valid. IIRC Dan stated some time ago that checks for null were
 >not to be included, but I don't know what the current status is.

A patch to add isnull was submitted today, which is one potential way of 
handling it.  Another is to not have get_keyed return the NULL in the first 
place.  I favor the latter, because there's no other way that I'm aware of 
in PASM to get an Sx register with a NULL in it, why start introducing this 
now?  It seems unclean.

(But a patch oftentimes speaks louder than opinions.)

So temporarily I patched basicvar.pasm so that instead of:

SFETCH: pushs
         pushi
         restore S0  # Name
         get_keyed S1, P21, S0
         save S1
         popi
         pops
         ret

I do this as I'm fetching the (possibly non-existent) value from the hash:

SFETCH: pushs
         pushi
         restore S0  # Name
         get_keyed S1, P21, S0
         length I0, S1
         ne I0, 0, SNOTNULL
         set S1, ""
SNOTNULL: save S1
         popi
         pops
         ret

Because length Ix, Sx seems to be immune from the NULL problem.  Now BASIC 
and all of its demo programs run without a hitch.  This could easily be 
fixed with "isnull Sx, label" also.

Reply via email to