Ticket #500 (closed bug: fixed)
:init sub cannot be target of :outer
Reported by: | pmichaud | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | none | Version: | |
Severity: | medium | Keywords: | |
Cc: | Language: | ||
Patch status: | Platform: |
Description
(This ticket was originally RT #47956)
Currently the PIR compiler cannot handle :outer flags pointing to a Sub with the :init flag on it.
Running from the command line works:
$ cat x.pir .sub 'MAIN' say 'MAIN' .return () .end .namespace ['XYZ'] .sub 'BEGIN' :init say 'XYZ::BEGIN' .return () .end .sub 'foo' :outer('BEGIN') say 'XYZ::foo' .return () .end $ ./parrot x.pir XYZ::BEGIN MAIN $
Loading the text into a string and compiling that (via "compreg PIR") fails:
$ ./parrot y.pir compiler start reading x.pir into $S0 .sub 'MAIN' say 'MAIN' .return () .end .namespace ['XYZ'] .sub 'BEGIN' :init say 'XYZ::BEGIN' .return () .end .sub 'foo' :outer('BEGIN') say 'XYZ::foo' .return () .end compiling (but not running) $S0 XYZ::BEGIN src/call/pcc.c:562: failed assertion '(sig_pmc)->vtable->base_type == enum_class_FixedIntegerArray' Backtrace - Obtained 31 stack frames (max trace depth is 32). (unknown) Parrot_confess Parrot_init_arg_indexes_and_sig_pmc parrot_pass_args Parrot_Continuation_invoke Parrot_returncc (unknown) (unknown) (unknown) (unknown) Parrot_runops_fromc_args (unknown) (unknown) do_sub_pragmas PackFile_fixup_subs (unknown) (unknown) (unknown) Parrot_NCI_invoke Parrot_invokecc_p (unknown) (unknown) (unknown) (unknown) Parrot_runops_fromc_args Parrot_runcode (unknown) imcc_run (unknown) __libc_start_main (unknown) Aborted $
(Note that it's the _compilation_ that fails.)
This ends up blocking a number of items in Rakudo -- most notably the ability for methods to access lexicals in an outer scope.
Pm
Change History
Note: See
TracTickets for help on using
tickets.