On Sat, May 14, 2005 at 03:31:21PM +0200, Leopold Toetsch wrote:
> Jerry Gay <[EMAIL PROTECTED]> wrote:
> > with parrot revision 8086, i'm running the following:
> 
> > .sub main @MAIN
> >     load_bytecode 'PGE.pbc'
> >     .local pmc p6rule, rulesub, match
> >     p6rule= find_global 'PGE', 'p6rule'
> >     rulesub= p6rule( '( \\ \. )+ \\' )
> > .end
> > which, under parrot -t, gives thousands of lines of output.
> > eventually, i get the following...
> > error:imcc:op not found 'index' (index<1>)
> 
> Inserting:
>    print $S0
> before the C<compile> in P6Rule.pir:876 reveals the culprit:
>     $I0 = index "\", $S0
> i.e. an unescapted backslash inside double quotes. 

This particular bug is now fixed in r8102.

PGE is not yet complete in its handling of escape sequences
in literal strings -- there are just a lot of them to be handled.
For example:

    rx / \n /           # match a newline character (a character class)
    rx / <"\n"> /       # match a literal newline (probably \012)
    rx / <'\n'> /       # match a backslash + n

and for any literal string that PGE generates it must be sure that
it's properly escaped for PIR.  (Fortunately this past week I found
Data::Escape which helps quite a bit.)

> OTOH there is also:
>     lit = '\\'
> which should have double quotes to mean a single slash.

Hmmm, that seems odd.  I looked in P6PE to find out about string
literal escapes and basically came away with "they work like Perl 5",
but occasionally I've noticed places where there's a mismatch...
such as this one.  I couldn't find anything about string literals 
in the Parrot docs -- is it documented somewhere?

Pm

Reply via email to