On Fri Nov 09 11:44:46 2012, rjbs wrote:
>
> I like that I can easily get a list of methods on a value:
>
> > my $x = []; say $x.^methods
> new bind_pos delete flattens REIFY STORE_AT_POS STORE
> PARAMETERIZE_TYPE
> at_pos perl new Bool Int end fmt flat list lol flattens tree Capture
> Parcel
> eager elems exists gimme infinite iterator munch pick pop roll
> reverse
> rotate shift splice sort classify categorize uniq REIFY STORE_AT_POS
> FLATTENABLE_LIST FLATTENABLE_HASH keys values pairs kv reduce of
> Numeric
> Str at_pos push unshift ACCEPTS gist perl DUMP elems infinite item
> fmt Int
> Num chrs Numeric Str
>
> It doesn't work on a Sub.
>
> > my $x = sub {}; say $x.^methods
> Method 'gist' not found for invocant of class 'Sub'
>
> my $x = sub {}; say $x.^methods.flat
> Method 'Stringy' not found for invocant of class 'Sub'
>
> > my $x = sub {}; say $x.^methods.^methods
> Parcel Capture elems item flat list lol at_pos postcircumfix:<[ ]>
> STORE
> FLATTENABLE_LIST FLATTENABLE_HASH fmt of Bool Numeric Str ACCEPTS
> gist perl
> DUMP
>
> > my $x = sub {}; say $x.^methods.perl
> Method 'perl' not found for invocant of class 'Sub'
>
The problems were thanks to Sub having various NQP routines installed in
the method table, for bootstrapping reasons. This subsequently blew up
operations like .^methods. Such foreign code objects now show up as the
Perl 6 type ForeignCode, thus resolving the issue.
Added tests to S12-introspection/methods.t; resolving ticket.
Thanks!
/jnthn