# New Ticket Created by Zoffix Znet
# Please include the string: [perl #132149]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=132149 >
Method objects have their own `.gist` method[^1] that just print `.name`.
However, under some
circumstances, that method is lost, and `Mu::gist` is used instead:
<Zoffix__> m: <z>.comb.^methods.grep(*.name eq 'eager').say
<camelia> rakudo-moar 7af339: OUTPUT: «(Method+{<anon|61058032>}.new)»
I tried to fix it and failed, but found some facts about the bug that might
give a hint:
*) The problematic methods has `is nodal` trait on them (which mixes in a
role), but NOT all nodal
methods have this issue
*) (90% sure this is what happened) If you add an only `method z is nodal {}`
to src/core/Any.pm, the bug doesn't appear
*) If you add a `multi method z is nodal {}` to src/core/Any.pm the bug occurs
*) If you do the same thing with a regular class, it doesn't happen. BTW: `Any`
is augmented in core
*) .file on the method gives src/core/Method.pm. However, if you modify Mu.gist
to append some string,
you'll see that it's Mu's method that gets called.
<Zoffix__> m: my $m = <z>.comb.^methods.grep(*.name eq 'eager').head; dd
$m.^lookup('gist').cando(\($m)).head.file
<camelia> rakudo-moar 7af339: OUTPUT: «"SETTING::src/core/Method.pm"»
*) Even if you make Method.gist an `only` method, the Mu::gist one is still the
one that gets called
*) If you implement only or multi method `gist` in the role that `is nodal`
mixed in[^2], trying to
call .gist on the buggy method gives "Cannot invoke this object (REPR:
Null; VMNull)"
[1]
https://github.com/rakudo/rakudo/blob/045ef448b62c045630abb8e167cc45d1f9fe6902/src/core/Method.pm#L4
[2]
https://github.com/rakudo/rakudo/blob/7af339b91d2a56a4a4eb065952cd548c188bd124/src/core/traits.pm#L357