Closed p6rt closed 15 years ago
Rakudo r33458:
$ ./perl6 -e 'my $a = do given 5 {}' Null PMC access in isa() [...] Segmentation fault
As soon as the given block contains _something_ (when, default, or just about anything else), the error goes away.
On Wed, Dec 03, 2008 at 03:54:16PM -0800, Carl Mäsak wrote:
# New Ticket Created by "Carl Mäsak" # Please include the string: [perl #61034] # in the subject line of all future correspondence about this issue. # \<URL: http://rt.perl.org/rt3/Ticket/Display.html?id=61034 >
Rakudo r33458:
$ ./perl6 -e 'my $a = do given 5 {}' Null PMC access in isa() [...] Segmentation fault
As soon as the given block contains _something_ (when, default, or just about anything else), the error goes away.
Rakudo probably thinks the {} is an empty hash, and gets all confused from there.
Pm
The RT System itself - Status changed from 'new' to 'open'
On Thu Dec 04 04:35:43 2008, pmichaud wrote:
On Wed, Dec 03, 2008 at 03:54:16PM -0800, Carl Mäsak wrote:
# New Ticket Created by "Carl Mäsak" # Please include the string: [perl #61034] # in the subject line of all future correspondence about this issue. # \<URL: http://rt.perl.org/rt3/Ticket/Display.html?id=61034 >
Rakudo r33458:
$ ./perl6 -e 'my $a = do given 5 {}' Null PMC access in isa() [...] Segmentation fault
As soon as the given block contains _something_ (when, default, or just about anything else), the error goes away.
Rakudo probably thinks the {} is an empty hash, and gets all confused from there.
Turns out not - the problem actually is that for empty blocks with no statements in, we emitted a:
.return ()
Which meant that the thingy calling it got a Null PMC. infix:= then did an isa on it, which then gave the error.
Where to fix this takes some care - since a block may get transformed into a hash composer, we can't just give every block that is empty an undef in somewhere like, say, the pblock action (well, we can, but only if it actually has a lambda). Anyway, I wrote a routine to do this and called it from xblock and in pblock if we have a lambda, which fixes the original bug, the following:
my $x = -> {}; my $y = $x();
And no doubt a variety of other Null PMC accesses that could have happened. And of course, it passes the spectests. So, in as git 9a5c690, and assigning to moritz++ for tests.
Thanks,
Jonathan
Tests added to Sending t/spec/S04-blocks-and-statements/pointy.t Sending t/spec/S04-statements/do.t
Cheers, Moritz
@moritz - Status changed from 'open' to 'resolved'
Migrated from rt.perl.org#61034 (status was 'resolved')
Searchable as RT61034$