# New Ticket Created by  Patrick R. Michaud 
# Please include the string:  [perl #59374]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=59374 >


Summary:  pmc2c produces incorrect code for returning negative
integer constants, as in RETURN(INTVAL -1)


Longer description:  In the set_readline_interactive method of the
ParrotIO PMC line 200 reads

        RETURN(INTVAL -1);

This is supposed to return a value of -1 when the method is called
and the readline library is not present.  However, when run this is
actually returning 1 (readline is not present in the example below):

    $ cat z.pir
    .sub main :main
        .local pmc stdin
    
        stdin = getstdin
        $I0 = stdin.'set_readline_interactive'(1)
        say $I0
    .end
    $ ./parrot z.pir
    1

Looking at the code generated in src/pmc/parrotio.c (line 775 on my
system), we see:

    /*BEGIN RETURN INTVAL -1 */
    /*BEGIN GENERATED ACCESSORS */
#line 777 "./src/pmc/parrotio.pmc"
    CTX_REG_INT(_ctx, 0) = 1;

I think somewhere the minus sign is being lost when the code is being
generated.  This also occurs earlier in the method for a couple
of instances of RETURN(INTVAL -2):

    /*BEGIN RETURN INTVAL -2 */
    /*BEGIN GENERATED ACCESSORS */
#line 722 "./src/pmc/parrotio.pmc"
    CTX_REG_INT(_ctx, 0) = 2;

Pm

Reply via email to