summaryrefslogtreecommitdiff
path: root/op.c
diff options
context:
space:
mode:
authorRafael Garcia-Suarez <rgarciasuarez@gmail.com>2005-09-27 10:09:46 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2005-09-27 10:09:46 +0000
commit850e851687c46990a59eb0bed2e5e3dc49703472 (patch)
treee489796c4a1c0c91781bc1f2f1b53f618000a9e5 /op.c
parentd6a985f2bb09f0fd197b7c4af4b2d8913ce7f573 (diff)
downloadperl-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.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/op.c b/op.c
index 275e9fd78d..6500d49ef4 100644
--- a/op.c
+++ b/op.c
@@ -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,