diff options
author | syber <syber@crazypanda.ru> | 2014-12-01 23:20:27 +0300 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2014-12-02 17:56:48 -0800 |
commit | 810bd8b704e337dfba3e46eaea33244c1b0afce3 (patch) | |
tree | 1b45d1d145ccd5b7eecbb14ef57f69da2e5bdb3f /dump.c | |
parent | 11f9ab1a291e36ad40cb66d0bd0aedce897c06c3 (diff) | |
download | perl-810bd8b704e337dfba3e46eaea33244c1b0afce3.tar.gz |
Speed up method calls like $o->Other::method() and $o->Other::SUPER::method().
It was done by adding new OP_METHOD_REDIR and OP_METHOD_REDIR_SUPER optypes.
Class name to redirect is saved into METHOP as a shared hash string.
Method name is changed (class name removed) an saved into op_meth_sv as
a shared string hash.
So there is no need now to scan for '::' and calculate class and method names
at runtime (in gv_fetchmethod_*) and searching cache HV without precomputed hash.
B::* modules are changed to support new op types.
method_redir is now printed by Concise like (for threaded perl)
$obj->AAA::meth
5 <.> method_redir[PACKAGE "AAA", PV "meth"] ->6
Diffstat (limited to 'dump.c')
-rw-r--r-- | dump.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -956,6 +956,8 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o) case OP_HINTSEVAL: case OP_METHOD_NAMED: case OP_METHOD_SUPER: + case OP_METHOD_REDIR: + case OP_METHOD_REDIR_SUPER: #ifndef USE_ITHREADS /* with ITHREADS, consts are stored in the pad, and the right pad * may not be active here, so skip */ |