This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Deparse $obj->$meth=... [perl #62498]
authorFather Chrysostomos <sprout@cpan.org>
Thu, 2 Jun 2011 13:01:57 +0000 (06:01 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 2 Jun 2011 13:05:29 +0000 (06:05 -0700)
commit35a99a0826369f896a38d2665db827253fc91e46
treea0573a6fd2536b1d022e7e24a1a3543a8fa1093a
parentb6093575f53d6714dc73dfa7d80b20c008a890bf
Deparse $obj->$meth=... [perl #62498]

When an lvalue method-as-variable is compiled, the method
op has a sibling that is an rv2cv:

a     <2> sassign vKS/2 ->b
3        <$> const[IV 1] s ->4
9        <1> entersub[t3] sKRMS*/NO(),TARG ->a
4           <0> pushmark s ->5
-           <1> ex-rv2sv sKM/1 ->6
5              <#> gvsv[*obj] s ->6
7           <1> method sK/1 ->8
-              <1> ex-rv2sv sK/1 ->7
6                 <#> gvsv[*meth] s ->7
8           <1> rv2cv /NO() ->9

Deparse didn’t know about it, and was iterating through the
children of entersub, thinking the last one was the method,
stopping at any item named ‘method_named’. So I modified it
to stop at ‘method’ as well.
dist/B-Deparse/Deparse.pm
dist/B-Deparse/t/deparse.t