Ap |void |gv_init_pvn |NN GV* gv|NULLOK HV* stash|NN const char* name \
|STRLEN len|U32 flags
Ap |void |gv_name_set |NN GV* gv|NN const char *name|U32 len|U32 flags
+px |GV * |gv_override |NN const char * const name \
+ |const STRLEN len
XMpd |void |gv_try_downgrade|NN GV* gv
Apd |HV* |gv_stashpv |NN const char* name|I32 flags
Apd |HV* |gv_stashpvn |NN const char* name|U32 namelen|I32 flags
#define get_hash_seed(a) Perl_get_hash_seed(aTHX_ a)
#define get_no_modify() Perl_get_no_modify(aTHX)
#define get_opargs() Perl_get_opargs(aTHX)
+#define gv_override(a,b) Perl_gv_override(aTHX_ a,b)
#define gv_try_downgrade(a) Perl_gv_try_downgrade(aTHX_ a)
#define hv_ename_add(a,b,c,d) Perl_hv_ename_add(aTHX_ a,b,c,d)
#define hv_ename_delete(a,b,c,d) Perl_hv_ename_delete(aTHX_ a,b,c,d)
}
}
+GV *
+Perl_gv_override(pTHX_ const char * const name, const STRLEN len)
+{
+ GV *gv = gv_fetchpvn(name, len, GV_NOTQUAL, SVt_PVCV);
+ GV * const *gvp;
+ PERL_ARGS_ASSERT_GV_OVERRIDE;
+ if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) return gv;
+ gvp = (GV**)hv_fetch(PL_globalstash, name, len, FALSE);
+ gv = gvp ? *gvp : NULL;
+ if (gv && !isGV(gv)) {
+ if (!SvPCS_IMPORTED(gv)) return NULL;
+ gv_init(gv, PL_globalstash, name, len, 0);
+ return gv;
+ }
+ return gv && GvCVu(gv) && GvIMPORTED_CV(gv) ? gv : NULL;
+}
+
#include "XSUB.h"
static void
LEAVE;
}
-GV *
-S_override(pTHX_ const char * const name, const STRLEN len)
-{
- GV *gv = gv_fetchpvn(name, len, GV_NOTQUAL, SVt_PVCV);
- GV * const *gvp;
- if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) return gv;
- gvp = (GV**)hv_fetch(PL_globalstash, name, len, FALSE);
- gv = gvp ? *gvp : NULL;
- if (gv && !isGV(gv)) {
- if (!SvPCS_IMPORTED(gv)) return NULL;
- gv_init(gv, PL_globalstash, name, len, 0);
- return gv;
- }
- return gv && GvCVu(gv) && GvIMPORTED_CV(gv) ? gv : NULL;
-}
-
OP *
Perl_dofile(pTHX_ OP *term, I32 force_builtin)
{
PERL_ARGS_ASSERT_DOFILE;
- if (!force_builtin && (gv = S_override(aTHX_ "do", 2))) {
+ if (!force_builtin && (gv = gv_override("do", 2))) {
doop = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, term,
scalar(newUNOP(OP_RV2CV, 0,
if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
- if (!(o->op_flags & OPf_SPECIAL) && (gv = S_override(aTHX_ "glob", 4)))
+ if (!(o->op_flags & OPf_SPECIAL) && (gv = gv_override("glob", 4)))
{
/* convert
* glob
if (!(o->op_flags & OPf_SPECIAL) /* Wasn't written as CORE::require */
/* handle override, if any */
- && (gv = S_override(aTHX_ "require", 7))) {
+ && (gv = gv_override("require", 7))) {
OP *kid, *newop;
if (o->op_flags & OPf_KIDS) {
kid = cUNOPo->op_first;
#define PERL_ARGS_ASSERT_GV_NAME_SET \
assert(gv); assert(name)
+PERL_CALLCONV GV * Perl_gv_override(pTHX_ const char * const name, const STRLEN len)
+ __attribute__nonnull__(pTHX_1);
+#define PERL_ARGS_ASSERT_GV_OVERRIDE \
+ assert(name)
+
PERL_CALLCONV HV* Perl_gv_stashpv(pTHX_ const char* name, I32 flags)
__attribute__nonnull__(pTHX_1);
#define PERL_ARGS_ASSERT_GV_STASHPV \
GV **gvp;
GV *gv_readpipe = gv_fetchpvs("readpipe", GV_NOTQUAL, SVt_PVCV);
pl_yylval.ival = OP_BACKTICK;
- if ((gv_readpipe
- && GvCVu(gv_readpipe) && GvIMPORTED_CV(gv_readpipe))
- ||
- ((gvp = (GV**)hv_fetchs(PL_globalstash, "readpipe", FALSE))
- && (gv_readpipe = *gvp) && (
- isGV_with_GP(gv_readpipe)
- ? GvCVu(gv_readpipe) && GvIMPORTED_CV(gv_readpipe)
- : SvPCS_IMPORTED(gv_readpipe)
- && (gv_init(gv_readpipe, PL_globalstash, "readpipe",
- 8, 0), 1)
- )))
+ if ((gv_readpipe = gv_override("readpipe",8)))
{
COPLINE_SET_FROM_MULTI_END;
PL_lex_op = (OP*)newUNOP(OP_ENTERSUB, OPf_STACKED,
/* Check whether readline() is overriden */
gv_readline = gv_fetchpvs("readline", GV_NOTQUAL, SVt_PVCV);
- if ((gv_readline
- && GvCVu(gv_readline) && GvIMPORTED_CV(gv_readline))
- ||
- ((gvp = (GV**)hv_fetchs(PL_globalstash, "readline", FALSE))
- && (gv_readline = *gvp) && (
- isGV_with_GP(gv_readline)
- ? GvCVu(gv_readline) && GvIMPORTED_CV(gv_readline)
- : SvPCS_IMPORTED(gv_readline)
- && (gv_init(gv_readline, PL_globalstash,
- "readline", 8, 0), 1)
- )))
+ if ((gv_readline = gv_override("readline",8)))
readline_overriden = TRUE;
/* if <$fh>, create the ops to turn the variable into a