At 02:17 PM 6/1/2002 -0400, Melvin Smith wrote:
># t.pasm
>loadlib P0, "libpqt.so"
>print "Loaded\n"
>callnative P1, P0, "PQt_init"
>end

The correct code is actually:

loadlib P0, "libpqt.so"
print "Loaded\n"
# Save an argument for native method
save "Testing..."
# callnative calls a native method and caches the handle in P1
callnative P1, P0, "PQt_init"
end


And the lib should be:

int PQt_init(Parrot_Interp interp) {
    int i;
    char * s;
    fprintf(stderr, "PQt_init\n");

    if(!interp)
       fprintf(stderr, "NULL Interp!\n");
    fprintf(stderr, "Interp has %d ops\n", interp->op_count);
    s = PXS_shiftcs(interp);
    fprintf(stderr, "arg1[%s]\n", s);


    return 0;
}


But the question still stands...

-Melvin





>/* libpqt.c */
>int PQt_init(Interp * interp) {
>    STRING * s;
>    if(!interp) {
>       fprintf(stderr, "NULL Interp!\n");
>       return -1;
>    }
>
>    fprintf(stderr, "Interp has %d ops\n", interp->op_count);
>
>    /* Get a STRING off the user stack */
>    PXS_shifts(interp, s);
>
>    /* Oops, shifting s off the Parrot stack might have been
>     * removed it from the root set.
>     */
>
>}
>
>
>Now there are a dozen ways to handle this. Using flags, keeping args on the
>stack until return, yada yada yada...
>
>I'd like to hear suggestions, or maybe reference to past discussions I might
>have missed on how we shall handle this. Actually I want more than 
>suggestions,
>I want a voice from the sky to boom, "Go that way!"
>
>-Melvin


Reply via email to