summaryrefslogtreecommitdiff
path: root/lib/B/Op_private.pm
diff options
context:
space:
mode:
authorsyber <syber@crazypanda.ru>2014-12-01 23:20:27 +0300
committerFather Chrysostomos <sprout@cpan.org>2014-12-02 17:56:48 -0800
commit810bd8b704e337dfba3e46eaea33244c1b0afce3 (patch)
tree1b45d1d145ccd5b7eecbb14ef57f69da2e5bdb3f /lib/B/Op_private.pm
parent11f9ab1a291e36ad40cb66d0bd0aedce897c06c3 (diff)
downloadperl-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 'lib/B/Op_private.pm')
-rw-r--r--lib/B/Op_private.pm2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm
index 55ca8b60dc..e8e63a2e32 100644
--- a/lib/B/Op_private.pm
+++ b/lib/B/Op_private.pm
@@ -406,6 +406,8 @@ $bits{lvavref}{0} = $bf[0];
$bits{mapwhile}{0} = $bf[0];
$bits{method}{0} = $bf[0];
$bits{method_named}{0} = $bf[0];
+$bits{method_redir}{0} = $bf[0];
+$bits{method_redir_super}{0} = $bf[0];
$bits{method_super}{0} = $bf[0];
@{$bits{mkdir}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]);
@{$bits{modulo}}{1,0} = ($bf[1], $bf[1]);