> --- Leopold Toetsch <[EMAIL PROTECTED]> wrote:
> > Amir Karger <[EMAIL PROTECTED]> wrote:

[fixes]

> > I'll put in these fixes.

Thanks!

> > 
> > > The bad news is that when I then try to parrot it, Windows throws
> > > me an error window saying parrot died. I don't know why.
> > 
> > linux SIGSEGVs.  The problem is expr.pasm:419 containing a string
> > with 1024 chars in one line.  This is one of the known problems of
> > imcc/parrot. There is no official limit on lines, strings or
> > identifier
> > length, while internally its assumed that there is one. This is of
> > course a bug.

[proposed long-term solutions snipped]

OK, but in the meantime, I replaced line 419 with:

        set S1,
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
        set S19,
"\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
        concat S1, S19
        set S19,
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
        concat S1, S19
        set S19,
"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
        concat S1, S19
        
I'm sure I've broken several sacred Parrot rules by doing this, which I
hope you'll tell me about so I can learn the sacred Parrot rules. But
it
*does* compile and run this way.

I believe I've found another bug. All numerical variables have a
s/\.?0+$// performed on them whenever their value gets fetched (e.g.
when evaluating an expression including the variable name, either to do
math or to print). Note the question mark in the above s/// - that's a
bug!  I believe the problem is in subroutine NTOA (alpha.pasm: 164),
which tries to do s/\.0+$//. 

It seems that in the old days, variables with integer values were
stored
as 1.000, so NTOATRUNC: got written, but now the value gets truncated
somewhere along the line, so then we're trying to remove 0's at the end
and then a '.', but we end up just removing zeroes! 

So I guess the fix is just to remove NTOATRUNC and NTOA_ALMOST
entirely.
If not, at the least you should jump over them if index(S0, '.') != -1.
For example, adding the following lines after line 171 of alpha.pasm
fixed the problem as far as I could see:

        index I1, S0, '.'
        eq -1, I1, NTOADONE

A final bug: line 820 of sampleb.bas should read "820 PRINT 355/113" :)

> > Thanks for reporting

Thanks for fixing.

-Amir


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

Reply via email to