Ticket #150 (new bug) — at Version 1

Opened 13 years ago

Last modified 11 years ago

load_bytecode, loadlib, and HLL

Reported by: tene Owned by:
Priority: normal Milestone:
Component: none Version:
Severity: medium Keywords:
Cc: coke, NotFound Language:
Patch status: Platform:

Description (last modified by coke) (diff)

This works fine:

    # demo.pir
    .sub main :main
        load_bytecode 'perl6.pbc'
    .end

This fails, due to Perl6Str not existing

    # demo.pir
    .HLL 'foo'
    .sub main :main
        load_bytecode 'perl6.pbc'
    .end

The runtime version using the 'loadlib' op can work, kind of.

Adding this to perl6.pir doesn't help:

    # perl6.pir
    .HLL 'parrot'
    .sub '' :anon :load :init :immediate
        $P0 = loadlib 'perl6_group'
        $P0 = loadlib 'perl6_ops'
    .end

Adding that same code to the example does work:

    # demo.pir
    .HLL 'parrot'
    .sub '' :anon :load :init :immediate
        $P0 = loadlib 'perl6_group'
        $P0 = loadlib 'perl6_ops'
    .end
    .HLL 'foo'
    .sub main :main
        load_bytecode 'perl6.pbc'
    .end

This rather complicates attempts to use rakudo from another HLL.

I did a little bit of digging, and found this:

.loadlib is handled by do_loadlib in imcparser.c, which is:

    /* imcparser.c */
    do_loadlib(PARROT_INTERP, ARGIN(const char *lib))
    {
        ASSERT_ARGS(do_loadlib);
        STRING * const s = string_unescape_cstring(interp, lib + 1, '"', NULL);
        PMC    *ignored  = Parrot_load_lib(interp, s, NULL);
        UNUSED(ignored);
        Parrot_register_HLL_lib(interp, s);
    }

The loadlib op is handled by 'op loadlib' in core.ops:

    /* core.ops */
    inline op loadlib(out PMC, in STR) {
        $1 = Parrot_load_lib(interp, $2, NULL);
    }

You'll notice that the op version doesn't call Parrot_register_HLL_lib, but adding that to 'op loadlib' doesn't help. That's as far as I got in investigating this issue.

Change History

Changed 13 years ago by coke

  • description modified (diff)
Note: See TracTickets for help on using tickets.