diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2005-09-27 10:09:46 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2005-09-27 10:09:46 +0000 |
commit | 850e851687c46990a59eb0bed2e5e3dc49703472 (patch) | |
tree | e489796c4a1c0c91781bc1f2f1b53f618000a9e5 /op.c | |
parent | d6a985f2bb09f0fd197b7c4af4b2d8913ce7f573 (diff) | |
download | perl-850e851687c46990a59eb0bed2e5e3dc49703472.tar.gz |
Fix the overriding of CORE::do, just like change 25599
was fixing the overriding of CORE::require
p4raw-id: //depot/perl@25616
Diffstat (limited to 'op.c')
-rw-r--r-- | op.c | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -3187,14 +3187,18 @@ Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args) } OP * -Perl_dofile(pTHX_ OP *term) +Perl_dofile(pTHX_ OP *term, I32 force_builtin) { OP *doop; - GV *gv; + GV *gv = Nullgv; - gv = gv_fetchpv("do", FALSE, SVt_PVCV); - if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) - gv = gv_fetchpv("CORE::GLOBAL::do", FALSE, SVt_PVCV); + if (!force_builtin) { + gv = gv_fetchpv("do", FALSE, SVt_PVCV); + if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) { + GV **gvp = (GV**)hv_fetch(PL_globalstash, "do", 2, FALSE); + if (gvp) gv = *gvp; else gv = Nullgv; + } + } if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) { doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED, |