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.
