summaryrefslogtreecommitdiff
path: root/op.c
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2009-08-22 16:28:32 +0100
committerNicholas Clark <nick@ccl4.org>2009-08-22 16:28:32 +0100
commitc1754fcef434d9211b828cbe76693855ba6fb690 (patch)
tree2fb053cd7e16045d770580afcb55c12583bf1fea /op.c
parent9c1314f0ea4d104e361a6e4ededa781e65b14518 (diff)
downloadperl-c1754fcef434d9211b828cbe76693855ba6fb690.tar.gz
In Perl_newATTRSUB(), we know the lengths, so can avoid gv_fetchpv().
Brought to you by the Campaign for the Elimination of strlen().
Diffstat (limited to 'op.c')
-rw-r--r--op.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/op.c b/op.c
index b4a9fe20e8..d91e107fc6 100644
--- a/op.c
+++ b/op.c
@@ -5529,6 +5529,7 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
{
dVAR;
const char *aname;
+ STRLEN aname_len;
GV *gv;
const char *ps;
STRLEN ps_len;
@@ -5558,14 +5559,20 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
aname = SvPVX_const(sv);
+ aname_len = SvCUR(sv);
}
else
aname = NULL;
- gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
- : gv_fetchpv(aname ? aname
- : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
- gv_fetch_flags, SVt_PVCV);
+ if (name) {
+ gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
+ } else if (aname) {
+ gv = gv_fetchpvn_flags(aname, aname_len, gv_fetch_flags, SVt_PVCV);
+ } else if (PL_curstash) {
+ gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
+ } else {
+ gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
+ }
if (!PL_madskills) {
if (o)