1 /* Copyright (c) 1997-2000 Graham Barr <gbarr@pobox.com>. All rights reserved.
2 * This program is free software; you can redistribute it and/or
3 * modify it under the same terms as Perl itself.
5 #define PERL_NO_GET_CONTEXT /* we want efficiency */
10 #define NEED_sv_2pv_flags 1
13 #if PERL_BCDVERSION >= 0x5006000
14 # include "multicall.h"
18 # define CvISXSUB(cv) CvXSUB(cv)
21 /* Some platforms have strict exports. And before 5.7.3 cxinc (or Perl_cxinc)
22 was not exported. Therefore platforms like win32, VMS etc have problems
23 so we redefine it here -- GMB
25 #if PERL_BCDVERSION < 0x5007000
30 # define cxinc() my_cxinc(aTHX)
34 cxstack_max = cxstack_max * 3 / 2;
35 Renew(cxstack, cxstack_max + 1, struct context); /* fencepost bug in older CXINC macros requires +1 here */
36 return cxstack_ix + 1;
41 #define sv_copypv(a, b) my_sv_copypv(aTHX_ a, b)
43 my_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
46 const char * const s = SvPV_const(ssv,len);
56 # define slu_sv_value(sv) (SvIOK(sv)) ? (SvIOK_UV(sv)) ? (NV)(SvUVX(sv)) : (NV)(SvIVX(sv)) : (SvNV(sv))
58 # define slu_sv_value(sv) (SvIOK(sv)) ? (NV)(SvIVX(sv)) : (SvNV(sv))
61 #if PERL_VERSION < 13 || (PERL_VERSION == 13 && PERL_SUBVERSION < 9)
62 # define PERL_HAS_BAD_MULTICALL_REFCOUNT
66 # define croak_no_modify() croak("%s", PL_no_modify)
75 static enum slu_accum accum_type(SV *sv) {
79 if(SvIOK(sv) && !SvNOK(sv) && !SvUOK(sv))
85 /* Magic for set_subname */
86 static MGVTBL subname_vtbl;
88 MODULE=List::Util PACKAGE=List::Util
107 magic = SvAMAGIC(retsv);
109 retval = slu_sv_value(retsv);
111 for(index = 1 ; index < items ; index++) {
112 SV *stacksv = ST(index);
114 if((magic || SvAMAGIC(stacksv)) && (tmpsv = amagic_call(retsv, stacksv, gt_amg, 0))) {
115 if(SvTRUE(tmpsv) ? !ix : ix) {
117 magic = SvAMAGIC(retsv);
119 retval = slu_sv_value(retsv);
124 NV val = slu_sv_value(stacksv);
126 retval = slu_sv_value(retsv);
129 if(val < retval ? !ix : ix) {
155 enum slu_accum accum;
156 int is_product = (ix == 2);
161 case 0: XSRETURN_UNDEF;
162 case 1: ST(0) = newSViv(0); XSRETURN(1);
163 case 2: ST(0) = newSViv(1); XSRETURN(1);
167 switch((accum = accum_type(sv))) {
176 retnv = slu_sv_value(sv);
180 for(index = 1 ; index < items ; index++) {
182 if(accum < ACC_SV && SvAMAGIC(sv)){
185 sv_setnv(retsv, accum == ACC_NV ? retnv : retiv);
190 tmpsv = amagic_call(retsv, sv,
191 is_product ? mult_amg : add_amg,
192 SvAMAGIC(retsv) ? AMGf_assign : 0);
194 switch((accum = accum_type(tmpsv))) {
202 retnv = slu_sv_value(tmpsv);
207 /* fall back to default */
209 is_product ? (retnv = SvNV(retsv) * SvNV(sv))
210 : (retnv = SvNV(retsv) + SvNV(sv));
215 if(!SvNOK(sv) && SvIOK(sv) && (SvIV(sv) < IV_MAX / retiv)) {
219 /* else fallthrough */
222 if(!SvNOK(sv) && SvIOK(sv) && (SvIV(sv) < IV_MAX - retiv)) {
226 /* else fallthrough */
229 /* fallthrough to NV now */
233 is_product ? (retnv *= slu_sv_value(sv))
234 : (retnv += slu_sv_value(sv));
243 case ACC_SV: /* nothing to do */
246 sv_setiv(retsv, retiv);
249 sv_setnv(retsv, retnv);
257 #define SLU_CMP_LARGER 1
258 #define SLU_CMP_SMALLER -1
264 minstr = SLU_CMP_LARGER
265 maxstr = SLU_CMP_SMALLER
276 if(MAXARG & OPpLOCALE) {
277 for(index = 1 ; index < items ; index++) {
278 SV *right = ST(index);
279 if(sv_cmp_locale(left, right) == ix)
285 for(index = 1 ; index < items ; index++) {
286 SV *right = ST(index);
287 if(sv_cmp(left, right) == ix)
306 SV *ret = sv_newmortal();
310 SV **args = &PL_stack_base[ax];
311 CV *cv = sv_2cv(block, &stash, &gv, 0);
314 croak("Not a subroutine reference");
319 agv = gv_fetchpv("a", GV_ADD, SVt_PV);
320 bgv = gv_fetchpv("b", GV_ADD, SVt_PV);
324 SvSetMagicSV(ret, args[1]);
328 I32 gimme = G_SCALAR;
331 for(index = 2 ; index < items ; index++) {
332 GvSV(bgv) = args[index];
334 SvSetMagicSV(ret, *PL_stack_sp);
336 # ifdef PERL_HAS_BAD_MULTICALL_REFCOUNT
337 if(CvDEPTH(multicall_cv) > 1)
338 SvREFCNT_inc_simple_void_NN(multicall_cv);
345 for(index = 2 ; index < items ; index++) {
347 GvSV(bgv) = args[index];
350 call_sv((SV*)cv, G_SCALAR);
352 SvSetMagicSV(ret, *PL_stack_sp);
369 SV **args = &PL_stack_base[ax];
370 CV *cv = sv_2cv(block, &stash, &gv, 0);
373 croak("Not a subroutine reference");
378 SAVESPTR(GvSV(PL_defgv));
382 I32 gimme = G_SCALAR;
385 for(index = 1 ; index < items ; index++) {
386 GvSV(PL_defgv) = args[index];
388 if(SvTRUEx(*PL_stack_sp)) {
389 # ifdef PERL_HAS_BAD_MULTICALL_REFCOUNT
390 if(CvDEPTH(multicall_cv) > 1)
391 SvREFCNT_inc_simple_void_NN(multicall_cv);
398 # ifdef PERL_HAS_BAD_MULTICALL_REFCOUNT
399 if(CvDEPTH(multicall_cv) > 1)
400 SvREFCNT_inc_simple_void_NN(multicall_cv);
407 for(index = 1 ; index < items ; index++) {
409 GvSV(PL_defgv) = args[index];
412 call_sv((SV*)cv, G_SCALAR);
413 if(SvTRUEx(*PL_stack_sp)) {
434 int ret_true = !(ix & 2); /* return true at end of loop for none/all; false for any/notall */
435 int invert = (ix & 1); /* invert block test for all/notall */
438 SV **args = &PL_stack_base[ax];
439 CV *cv = sv_2cv(block, &stash, &gv, 0);
442 croak("Not a subroutine reference");
444 SAVESPTR(GvSV(PL_defgv));
448 I32 gimme = G_SCALAR;
452 for(index = 1; index < items; index++) {
453 GvSV(PL_defgv) = args[index];
456 if(SvTRUEx(*PL_stack_sp) ^ invert) {
458 ST(0) = ret_true ? &PL_sv_no : &PL_sv_yes;
468 for(index = 1; index < items; index++) {
470 GvSV(PL_defgv) = args[index];
473 call_sv((SV*)cv, G_SCALAR);
474 if(SvTRUEx(*PL_stack_sp) ^ invert) {
475 ST(0) = ret_true ? &PL_sv_no : &PL_sv_yes;
481 ST(0) = ret_true ? &PL_sv_yes : &PL_sv_no;
492 HV *pairstash = get_hv("List::Util::_Pair::", GV_ADD);
494 if(items % 2 && ckWARN(WARN_MISC))
495 warn("Odd number of elements in pairs");
498 for(; argi < items; argi += 2) {
500 SV *b = argi < items-1 ? ST(argi+1) : &PL_sv_undef;
503 av_push(av, newSVsv(a));
504 av_push(av, newSVsv(b));
506 ST(reti) = sv_2mortal(newRV_noinc((SV *)av));
507 sv_bless(ST(reti), pairstash);
520 /* Unlike pairs(), we're going to trash the input values on the stack
521 * almost as soon as we start generating output. So clone them first
525 Newx(args_copy, items, SV *);
526 SAVEFREEPV(args_copy);
528 Copy(&ST(0), args_copy, items, SV *);
530 for(i = 0; i < items; i++) {
531 SV *pair = args_copy[i];
534 if(SvTYPE(pair) != SVt_RV)
535 croak("Not a reference at List::Util::unpack() argument %d", i);
536 if(SvTYPE(SvRV(pair)) != SVt_PVAV)
537 croak("Not an ARRAY reference at List::Util::unpack() argument %d", i);
539 // TODO: assert pair is an ARRAY ref
540 AV *pairav = (AV *)SvRV(pair);
544 if(AvFILL(pairav) >= 0)
545 mPUSHs(newSVsv(AvARRAY(pairav)[0]));
549 if(AvFILL(pairav) >= 1)
550 mPUSHs(newSVsv(AvARRAY(pairav)[1]));
566 if(items % 2 && ckWARN(WARN_MISC))
567 warn("Odd number of elements in pairkeys");
570 for(; argi < items; argi += 2) {
573 ST(reti++) = sv_2mortal(newSVsv(a));
588 if(items % 2 && ckWARN(WARN_MISC))
589 warn("Odd number of elements in pairvalues");
592 for(; argi < items; argi += 2) {
593 SV *b = argi < items-1 ? ST(argi+1) : &PL_sv_undef;
595 ST(reti++) = sv_2mortal(newSVsv(b));
610 CV *cv = sv_2cv(block, &stash, &gv, 0);
611 I32 ret_gimme = GIMME_V;
612 int argi = 1; /* "shift" the block */
614 if(!(items % 2) && ckWARN(WARN_MISC))
615 warn("Odd number of elements in pairfirst");
617 agv = gv_fetchpv("a", GV_ADD, SVt_PV);
618 bgv = gv_fetchpv("b", GV_ADD, SVt_PV);
623 /* Since MULTICALL is about to move it */
624 SV **stack = PL_stack_base + ax;
627 I32 gimme = G_SCALAR;
630 for(; argi < items; argi += 2) {
631 SV *a = GvSV(agv) = stack[argi];
632 SV *b = GvSV(bgv) = argi < items-1 ? stack[argi+1] : &PL_sv_undef;
636 if(!SvTRUEx(*PL_stack_sp))
640 if(ret_gimme == G_ARRAY) {
641 ST(0) = sv_mortalcopy(a);
642 ST(1) = sv_mortalcopy(b);
654 for(; argi < items; argi += 2) {
656 SV *a = GvSV(agv) = ST(argi);
657 SV *b = GvSV(bgv) = argi < items-1 ? ST(argi+1) : &PL_sv_undef;
660 call_sv((SV*)cv, G_SCALAR);
664 if(!SvTRUEx(*PL_stack_sp))
667 if(ret_gimme == G_ARRAY) {
668 ST(0) = sv_mortalcopy(a);
669 ST(1) = sv_mortalcopy(b);
688 CV *cv = sv_2cv(block, &stash, &gv, 0);
689 I32 ret_gimme = GIMME_V;
691 /* This function never returns more than it consumed in arguments. So we
692 * can build the results "live", behind the arguments
694 int argi = 1; /* "shift" the block */
697 if(!(items % 2) && ckWARN(WARN_MISC))
698 warn("Odd number of elements in pairgrep");
700 agv = gv_fetchpv("a", GV_ADD, SVt_PV);
701 bgv = gv_fetchpv("b", GV_ADD, SVt_PV);
706 /* Since MULTICALL is about to move it */
707 SV **stack = PL_stack_base + ax;
711 I32 gimme = G_SCALAR;
714 for(; argi < items; argi += 2) {
715 SV *a = GvSV(agv) = stack[argi];
716 SV *b = GvSV(bgv) = argi < items-1 ? stack[argi+1] : &PL_sv_undef;
720 if(SvTRUEx(*PL_stack_sp)) {
721 if(ret_gimme == G_ARRAY) {
722 /* We can't mortalise yet or they'd be mortal too early */
723 stack[reti++] = newSVsv(a);
724 stack[reti++] = newSVsv(b);
726 else if(ret_gimme == G_SCALAR)
732 if(ret_gimme == G_ARRAY)
733 for(i = 0; i < reti; i++)
734 sv_2mortal(stack[i]);
739 for(; argi < items; argi += 2) {
741 SV *a = GvSV(agv) = ST(argi);
742 SV *b = GvSV(bgv) = argi < items-1 ? ST(argi+1) : &PL_sv_undef;
745 call_sv((SV*)cv, G_SCALAR);
749 if(SvTRUEx(*PL_stack_sp)) {
750 if(ret_gimme == G_ARRAY) {
751 ST(reti++) = sv_mortalcopy(a);
752 ST(reti++) = sv_mortalcopy(b);
754 else if(ret_gimme == G_SCALAR)
760 if(ret_gimme == G_ARRAY)
762 else if(ret_gimme == G_SCALAR) {
763 ST(0) = newSViv(reti);
776 CV *cv = sv_2cv(block, &stash, &gv, 0);
777 SV **args_copy = NULL;
778 I32 ret_gimme = GIMME_V;
780 int argi = 1; /* "shift" the block */
783 if(!(items % 2) && ckWARN(WARN_MISC))
784 warn("Odd number of elements in pairmap");
786 agv = gv_fetchpv("a", GV_ADD, SVt_PV);
787 bgv = gv_fetchpv("b", GV_ADD, SVt_PV);
790 /* This MULTICALL-based code appears to fail on perl 5.10.0 and 5.8.9
791 * Skip it on those versions (RT#87857)
793 #if defined(dMULTICALL) && (PERL_BCDVERSION > 0x5010000 || PERL_BCDVERSION < 0x5008009)
795 /* Since MULTICALL is about to move it */
796 SV **stack = PL_stack_base + ax;
797 I32 ret_gimme = GIMME_V;
804 for(; argi < items; argi += 2) {
805 SV *a = GvSV(agv) = args_copy ? args_copy[argi] : stack[argi];
806 SV *b = GvSV(bgv) = argi < items-1 ?
807 (args_copy ? args_copy[argi+1] : stack[argi+1]) :
812 count = PL_stack_sp - PL_stack_base;
814 if(count > 2 && !args_copy) {
815 /* We can't return more than 2 results for a given input pair
816 * without trashing the remaining argmuents on the stack still
817 * to be processed. So, we'll copy them out to a temporary
818 * buffer and work from there instead.
819 * We didn't do this initially because in the common case, most
820 * code blocks will return only 1 or 2 items so it won't be
823 int n_args = items - argi;
824 Newx(args_copy, n_args, SV *);
825 SAVEFREEPV(args_copy);
827 Copy(stack + argi, args_copy, n_args, SV *);
833 for(i = 0; i < count; i++)
834 stack[reti++] = newSVsv(PL_stack_sp[i - count + 1]);
838 if(ret_gimme == G_ARRAY)
839 for(i = 0; i < reti; i++)
840 sv_2mortal(stack[i]);
845 for(; argi < items; argi += 2) {
847 SV *a = GvSV(agv) = args_copy ? args_copy[argi] : ST(argi);
848 SV *b = GvSV(bgv) = argi < items-1 ?
849 (args_copy ? args_copy[argi+1] : ST(argi+1)) :
855 count = call_sv((SV*)cv, G_ARRAY);
859 if(count > 2 && !args_copy && ret_gimme == G_ARRAY) {
860 int n_args = items - argi;
861 Newx(args_copy, n_args, SV *);
862 SAVEFREEPV(args_copy);
864 Copy(&ST(argi), args_copy, n_args, SV *);
870 if(ret_gimme == G_ARRAY)
871 for(i = 0; i < count; i++)
872 ST(reti++) = sv_mortalcopy(SP[i - count + 1]);
880 if(ret_gimme == G_ARRAY)
883 ST(0) = sv_2mortal(newSViv(reti));
893 #if (PERL_VERSION < 9)
895 struct op *old_op = PL_op;
897 /* We call pp_rand here so that Drand01 get initialized if rand()
898 or srand() has not already been called
900 memzero((char*)(&dmy_op), sizeof(struct op));
901 /* we let pp_rand() borrow the TARG allocated for this XS sub */
902 dmy_op.op_targ = PL_op->op_targ;
904 (void)*(PL_ppaddr[OP_RAND])(aTHX);
907 /* Initialize Drand01 if rand() or srand() has
908 not already been called
910 if(!PL_srand_called) {
911 (void)seedDrand01((Rand_seed_t)Perl_seed(aTHX));
912 PL_srand_called = TRUE;
916 for (index = items ; index > 1 ; ) {
917 int swap = (int)(Drand01() * (double)(index--));
919 ST(swap) = ST(index);
927 MODULE=List::Util PACKAGE=Scalar::Util
938 (void)SvUPGRADE(TARG, SVt_PVNV);
942 if(SvNOK(num) || SvPOK(num) || SvMAGICAL(num)) {
943 SvNV_set(TARG, SvNV(num));
947 else if(SvUOK(num)) {
948 SvUV_set(TARG, SvUV(num));
954 SvIV_set(TARG, SvIV(num));
958 if(PL_tainting && (SvTAINTED(num) || SvTAINTED(str)))
973 ST(0) = boolSV((SvPOK(sv) || SvPOKp(sv)) && (SvNIOK(sv) || SvNIOKp(sv)));
984 if(!(SvROK(sv) && SvOBJECT(SvRV(sv))))
987 RETVAL = (char*)sv_reftype(SvRV(sv),TRUE);
1002 RETVAL = (char*)sv_reftype(SvRV(sv),FALSE);
1017 RETVAL = PTR2UV(SvRV(sv));
1030 croak("weak references are not implemented in this release of perl");
1041 /* This code stolen from core's sv_rvweaken() and modified */
1045 croak("Can't unweaken a nonreference");
1046 else if (!SvWEAKREF(sv)) {
1047 if(ckWARN(WARN_MISC))
1048 warn("Reference is not weak");
1051 else if (SvREADONLY(sv)) croak_no_modify();
1054 #if PERL_VERSION >= 14
1055 SvWEAKREF_off(sv); SvROK_on(sv);
1056 SvREFCNT_inc_NN(tsv);
1057 Perl_sv_del_backref(aTHX_ tsv, sv);
1059 /* Lacking sv_del_backref() the best we can do is clear the old (weak) ref
1060 * then set a new strong one
1062 sv_setsv(sv, &PL_sv_undef);
1063 SvRV_set(sv, SvREFCNT_inc_NN(tsv));
1067 croak("weak references are not implemented in this release of perl");
1076 ST(0) = boolSV(SvROK(sv) && SvWEAKREF(sv));
1079 croak("weak references are not implemented in this release of perl");
1088 RETVAL = SvREADONLY(sv);
1098 RETVAL = SvTAINTED(sv);
1109 ST(0) = boolSV(SvVOK(sv));
1112 croak("vstrings are not implemented in this release of perl");
1116 looks_like_number(sv)
1122 if(SvAMAGIC(sv) && (tempsv = AMG_CALLun(sv, numer))) {
1125 #if PERL_BCDVERSION < 0x5008005
1126 if(SvPOK(sv) || SvPOKp(sv)) {
1127 RETVAL = looks_like_number(sv) ? &PL_sv_yes : &PL_sv_no;
1130 RETVAL = (SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK)) ? &PL_sv_yes : &PL_sv_no;
1133 RETVAL = looks_like_number(sv) ? &PL_sv_yes : &PL_sv_no;
1150 /* must be GLOB or IO */
1154 else if(SvTYPE(sv) == SVt_PVIO){
1159 /* real or tied filehandle? */
1160 if(IoIFP(io) || SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)){
1167 MODULE=List::Util PACKAGE=Sub::Util
1170 set_prototype(proto, code)
1174 SV *cv; /* not CV * */
1178 croak("set_prototype: not a reference");
1181 if(SvTYPE(cv) != SVt_PVCV)
1182 croak("set_prototype: not a subroutine reference");
1185 /* set the prototype */
1186 sv_copypv(cv, proto);
1189 /* delete the prototype */
1197 set_subname(name, sub)
1203 HV *stash = CopSTASH(PL_curcop);
1204 char *s, *end = NULL;
1207 if (!SvROK(sub) && SvGMAGICAL(sub))
1210 cv = (CV *) SvRV(sub);
1211 else if (SvTYPE(sub) == SVt_PVGV)
1213 else if (!SvOK(sub))
1214 croak(PL_no_usym, "a subroutine");
1215 else if (PL_op->op_private & HINT_STRICT_REFS)
1216 croak("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use",
1217 SvPV_nolen(sub), "a subroutine");
1218 else if ((gv = gv_fetchpv(SvPV_nolen(sub), FALSE, SVt_PVCV)))
1221 croak("Undefined subroutine %s", SvPV_nolen(sub));
1222 if (SvTYPE(cv) != SVt_PVCV && SvTYPE(cv) != SVt_PVFM)
1223 croak("Not a subroutine reference");
1224 for (s = name; *s++; ) {
1225 if (*s == ':' && s[-1] == ':')
1227 else if (*s && s[-1] == '\'')
1232 char *namepv = savepvn(name, end - name);
1233 stash = GvHV(gv_fetchpv(namepv, TRUE, SVt_PVHV));
1238 /* under debugger, provide information about sub location */
1239 if (PL_DBsub && CvGV(cv)) {
1240 HV *hv = GvHV(PL_DBsub);
1242 char *new_pkg = HvNAME(stash);
1244 char *old_name = GvNAME( CvGV(cv) );
1245 char *old_pkg = HvNAME( GvSTASH(CvGV(cv)) );
1247 int old_len = strlen(old_name) + strlen(old_pkg);
1248 int new_len = strlen(name) + strlen(new_pkg);
1253 Newxz(full_name, (old_len > new_len ? old_len : new_len) + 3, char);
1255 strcat(full_name, old_pkg);
1256 strcat(full_name, "::");
1257 strcat(full_name, old_name);
1259 old_data = hv_fetch(hv, full_name, strlen(full_name), 0);
1262 strcpy(full_name, new_pkg);
1263 strcat(full_name, "::");
1264 strcat(full_name, name);
1266 SvREFCNT_inc(*old_data);
1267 if (!hv_store(hv, full_name, strlen(full_name), *old_data, 0))
1268 SvREFCNT_dec(*old_data);
1270 Safefree(full_name);
1273 gv = (GV *) newSV(0);
1274 gv_init(gv, stash, name, s - name, TRUE);
1277 * set_subname needs to create a GV to store the name. The CvGV field of a
1278 * CV is not refcounted, so perl wouldn't know to SvREFCNT_dec() this GV if
1279 * it destroys the containing CV. We use a MAGIC with an empty vtable
1280 * simply for the side-effect of using MGf_REFCOUNTED to store the
1281 * actually-counted reference to the GV.
1284 while (mg && mg->mg_virtual != &subname_vtbl)
1285 mg = mg->mg_moremagic;
1287 Newxz(mg, 1, MAGIC);
1288 mg->mg_moremagic = SvMAGIC(cv);
1289 mg->mg_type = PERL_MAGIC_ext;
1290 mg->mg_virtual = &subname_vtbl;
1291 SvMAGIC_set(cv, mg);
1293 if (mg->mg_flags & MGf_REFCOUNTED)
1294 SvREFCNT_dec(mg->mg_obj);
1295 mg->mg_flags |= MGf_REFCOUNTED;
1296 mg->mg_obj = (SV *) gv;
1313 if (!SvROK(code) && SvGMAGICAL(code))
1316 if(!SvROK(code) || SvTYPE(cv = (CV *)SvRV(code)) != SVt_PVCV)
1317 croak("Not a subroutine reference");
1319 if(!(gv = CvGV(cv)))
1322 mPUSHs(newSVpvf("%s::%s", HvNAME(GvSTASH(gv)), GvNAME(gv)));
1327 HV *lu_stash = gv_stashpvn("List::Util", 10, TRUE);
1328 GV *rmcgv = *(GV**)hv_fetch(lu_stash, "REAL_MULTICALL", 14, TRUE);
1330 #if !defined(SvWEAKREF) || !defined(SvVOK)
1331 HV *su_stash = gv_stashpvn("Scalar::Util", 12, TRUE);
1332 GV *vargv = *(GV**)hv_fetch(su_stash, "EXPORT_FAIL", 11, TRUE);
1334 if(SvTYPE(vargv) != SVt_PVGV)
1335 gv_init(vargv, su_stash, "Scalar::Util", 12, TRUE);
1336 varav = GvAVn(vargv);
1338 if(SvTYPE(rmcgv) != SVt_PVGV)
1339 gv_init(rmcgv, lu_stash, "List::Util", 10, TRUE);
1340 rmcsv = GvSVn(rmcgv);
1342 av_push(varav, newSVpv("weaken",6));
1343 av_push(varav, newSVpv("isweak",6));
1346 av_push(varav, newSVpv("isvstring",9));
1348 #ifdef REAL_MULTICALL
1349 sv_setsv(rmcsv, &PL_sv_yes);
1351 sv_setsv(rmcsv, &PL_sv_no);