diff options
author | Nicholas Clark <nick@ccl4.org> | 2006-02-02 12:31:30 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2006-02-02 12:31:30 +0000 |
commit | fafc274c285207343d70f4a0d51c29a2f492863a (patch) | |
tree | 29385941f0aac28b61f00fd479320bb32afe923f /perl.c | |
parent | aee92da27d05dcab09a64434715b0fb947860fad (diff) | |
download | perl-fafc274c285207343d70f4a0d51c29a2f492863a.tar.gz |
gv_fetchpvn_flags ranks highly in the profile, and the ::/' scanning
loop is iterated over millions of times. Add a flag GV_NOTQUAL purely
as an optimisation, when the caller is passing in a string that is
known not to contain any package separators.
p4raw-id: //depot/perl@27053
Diffstat (limited to 'perl.c')
-rw-r--r-- | perl.c | 38 |
1 files changed, 20 insertions, 18 deletions
@@ -1371,7 +1371,7 @@ S_procself_val(pTHX_ SV *sv, const char *arg0) STATIC void S_set_caret_X(pTHX) { dVAR; - GV* tmpgv = gv_fetchpvs("\030", GV_ADD, SVt_PV); /* $^X */ + GV* tmpgv = gv_fetchpvs("\030", GV_ADD|GV_NOTQUAL, SVt_PV); /* $^X */ if (tmpgv) { #ifdef HAS_PROCSELFEXE S_procself_val(aTHX_ GvSV(tmpgv), PL_origargv[0]); @@ -2122,7 +2122,8 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) (fp = IoOFP(io))) PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); if ((PL_unicode & PERL_UNICODE_INOUT_FLAG) && - (sv = GvSV(gv_fetchpvs("\017PEN", GV_ADD, SVt_PV)))) { + (sv = GvSV(gv_fetchpvs("\017PEN", GV_ADD|GV_NOTQUAL, + SVt_PV)))) { U32 in = PL_unicode & PERL_UNICODE_IN_FLAG; U32 out = PL_unicode & PERL_UNICODE_OUT_FLAG; if (in) { @@ -3461,7 +3462,7 @@ S_init_main_stash(pTHX) table, so it's a small saving to use it rather than allocate another 8 bytes. */ PL_curstname = newSVpvs_share("main"); - gv = gv_fetchpvs("main::", GV_ADD, SVt_PVHV); + gv = gv_fetchpvs("main::", GV_ADD|GV_NOTQUAL, SVt_PVHV); /* If we hadn't caused another reference to "main" to be in the shared string table above, then it would be worth reordering these two, because otherwise all we do is delete "main" from it as a consequence @@ -3470,17 +3471,18 @@ S_init_main_stash(pTHX) hv_name_set(PL_defstash, "main", 4, 0); GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash); SvREADONLY_on(gv); - PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpvs("INC", GV_ADD, SVt_PVAV))); + PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpvs("INC", GV_ADD|GV_NOTQUAL, + SVt_PVAV))); SvREFCNT_inc(PL_incgv); /* Don't allow it to be freed */ GvMULTI_on(PL_incgv); - PL_hintgv = gv_fetchpvs("\010", GV_ADD, SVt_PV); /* ^H */ + PL_hintgv = gv_fetchpvs("\010", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^H */ GvMULTI_on(PL_hintgv); - PL_defgv = gv_fetchpvs("_", GV_ADD, SVt_PVAV); + PL_defgv = gv_fetchpvs("_", GV_ADD|GV_NOTQUAL, SVt_PVAV); SvREFCNT_inc(PL_defgv); - PL_errgv = gv_HVadd(gv_fetchpvs("@", GV_ADD, SVt_PV)); + PL_errgv = gv_HVadd(gv_fetchpvs("@", GV_ADD|GV_NOTQUAL, SVt_PV)); SvREFCNT_inc(PL_errgv); GvMULTI_on(PL_errgv); - PL_replgv = gv_fetchpvs("\022", GV_ADD, SVt_PV); /* ^R */ + PL_replgv = gv_fetchpvs("\022", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^R */ GvMULTI_on(PL_replgv); (void)Perl_form(aTHX_ "%240s",""); /* Preallocate temp - for immediate signals. */ #ifdef PERL_DONT_CREATE_GVSV @@ -4490,31 +4492,31 @@ S_init_predump_symbols(pTHX) IO *io; sv_setpvn(get_sv("\"", TRUE), " ", 1); - PL_stdingv = gv_fetchpvs("STDIN", GV_ADD, SVt_PVIO); + PL_stdingv = gv_fetchpvs("STDIN", GV_ADD|GV_NOTQUAL, SVt_PVIO); GvMULTI_on(PL_stdingv); io = GvIOp(PL_stdingv); IoTYPE(io) = IoTYPE_RDONLY; IoIFP(io) = PerlIO_stdin(); - tmpgv = gv_fetchpvs("stdin", GV_ADD, SVt_PV); + tmpgv = gv_fetchpvs("stdin", GV_ADD|GV_NOTQUAL, SVt_PV); GvMULTI_on(tmpgv); GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io); - tmpgv = gv_fetchpvs("STDOUT", GV_ADD, SVt_PVIO); + tmpgv = gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO); GvMULTI_on(tmpgv); io = GvIOp(tmpgv); IoTYPE(io) = IoTYPE_WRONLY; IoOFP(io) = IoIFP(io) = PerlIO_stdout(); setdefout(tmpgv); - tmpgv = gv_fetchpvs("stdout", GV_ADD, SVt_PV); + tmpgv = gv_fetchpvs("stdout", GV_ADD|GV_NOTQUAL, SVt_PV); GvMULTI_on(tmpgv); GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io); - PL_stderrgv = gv_fetchpvs("STDERR", GV_ADD, SVt_PVIO); + PL_stderrgv = gv_fetchpvs("STDERR", GV_ADD|GV_NOTQUAL, SVt_PVIO); GvMULTI_on(PL_stderrgv); io = GvIOp(PL_stderrgv); IoTYPE(io) = IoTYPE_WRONLY; IoOFP(io) = IoIFP(io) = PerlIO_stderr(); - tmpgv = gv_fetchpvs("stderr", GV_ADD, SVt_PV); + tmpgv = gv_fetchpvs("stderr", GV_ADD|GV_NOTQUAL, SVt_PV); GvMULTI_on(tmpgv); GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io); @@ -4547,7 +4549,7 @@ Perl_init_argv_symbols(pTHX_ register int argc, register char **argv) sv_setiv(GvSV(gv_fetchpv(argv[0]+1, GV_ADD, SVt_PV)),1); } } - if ((PL_argvgv = gv_fetchpvs("ARGV", GV_ADD, SVt_PVAV))) { + if ((PL_argvgv = gv_fetchpvs("ARGV", GV_ADD|GV_NOTQUAL, SVt_PVAV))) { GvMULTI_on(PL_argvgv); (void)gv_AVadd(PL_argvgv); av_clear(GvAVn(PL_argvgv)); @@ -4582,7 +4584,7 @@ S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register init_argv_symbols(argc,argv); - if ((tmpgv = gv_fetchpvs("0", GV_ADD, SVt_PV))) { + if ((tmpgv = gv_fetchpvs("0", GV_ADD|GV_NOTQUAL, SVt_PV))) { #ifdef MACOS_TRADITIONAL /* $0 is not majick on a Mac */ sv_setpv(GvSV(tmpgv),MacPerl_MPWFileName(PL_origfilename)); @@ -4591,7 +4593,7 @@ S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register magicname("0", "0", 1); #endif } - if ((PL_envgv = gv_fetchpvs("ENV", GV_ADD, SVt_PVHV))) { + if ((PL_envgv = gv_fetchpvs("ENV", GV_ADD|GV_NOTQUAL, SVt_PVHV))) { HV *hv; GvMULTI_on(PL_envgv); hv = GvHVn(PL_envgv); @@ -4640,7 +4642,7 @@ S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register #endif /* !PERL_MICRO */ } TAINT_NOT; - if ((tmpgv = gv_fetchpvs("$", GV_ADD, SVt_PV))) { + if ((tmpgv = gv_fetchpvs("$", GV_ADD|GV_NOTQUAL, SVt_PV))) { SvREADONLY_off(GvSV(tmpgv)); sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid()); SvREADONLY_on(GvSV(tmpgv)); |