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"
17 #if PERL_BCDVERSION < 0x5023008
18 # define UNUSED_VAR_newsp PERL_UNUSED_VAR(newsp)
20 # define UNUSED_VAR_newsp NOOP
24 # define CvISXSUB(cv) CvXSUB(cv)
27 /* Some platforms have strict exports. And before 5.7.3 cxinc (or Perl_cxinc)
28 was not exported. Therefore platforms like win32, VMS etc have problems
29 so we redefine it here -- GMB
31 #if PERL_BCDVERSION < 0x5007000
36 # define cxinc() my_cxinc(aTHX)
40 cxstack_max = cxstack_max * 3 / 2;
41 Renew(cxstack, cxstack_max + 1, struct context); /* fencepost bug in older CXINC macros requires +1 here */
42 return cxstack_ix + 1;
47 #define sv_copypv(a, b) my_sv_copypv(aTHX_ a, b)
49 my_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
52 const char * const s = SvPV_const(ssv,len);
62 # define slu_sv_value(sv) (SvIOK(sv)) ? (SvIOK_UV(sv)) ? (NV)(SvUVX(sv)) : (NV)(SvIVX(sv)) : (SvNV(sv))
64 # define slu_sv_value(sv) (SvIOK(sv)) ? (NV)(SvIVX(sv)) : (SvNV(sv))
67 #if PERL_VERSION < 13 || (PERL_VERSION == 13 && PERL_SUBVERSION < 9)
68 # define PERL_HAS_BAD_MULTICALL_REFCOUNT
72 # define croak_no_modify() croak("%s", PL_no_modify)
76 # define SvNV_nomg SvNV
85 static enum slu_accum accum_type(SV *sv) {
89 if(SvIOK(sv) && !SvNOK(sv) && !SvUOK(sv))
95 /* Magic for set_subname */
96 static MGVTBL subname_vtbl;
98 MODULE=List::Util PACKAGE=List::Util
109 NV retval = 0.0; /* avoid 'uninit var' warning */
118 magic = SvAMAGIC(retsv);
120 retval = slu_sv_value(retsv);
122 for(index = 1 ; index < items ; index++) {
123 SV *stacksv = ST(index);
126 if((magic || SvAMAGIC(stacksv)) && (tmpsv = amagic_call(retsv, stacksv, gt_amg, 0))) {
127 if(SvTRUE(tmpsv) ? !ix : ix) {
129 magic = SvAMAGIC(retsv);
131 retval = slu_sv_value(retsv);
136 NV val = slu_sv_value(stacksv);
138 retval = slu_sv_value(retsv);
141 if(val < retval ? !ix : ix) {
167 enum slu_accum accum;
168 int is_product = (ix == 2);
173 case 0: XSRETURN_UNDEF;
174 case 1: ST(0) = newSViv(0); XSRETURN(1);
175 case 2: ST(0) = newSViv(1); XSRETURN(1);
180 switch((accum = accum_type(sv))) {
189 retnv = slu_sv_value(sv);
193 for(index = 1 ; index < items ; index++) {
196 if(accum < ACC_SV && SvAMAGIC(sv)){
199 sv_setnv(retsv, accum == ACC_NV ? retnv : retiv);
204 tmpsv = amagic_call(retsv, sv,
205 is_product ? mult_amg : add_amg,
206 SvAMAGIC(retsv) ? AMGf_assign : 0);
208 switch((accum = accum_type(tmpsv))) {
216 retnv = slu_sv_value(tmpsv);
221 /* fall back to default */
223 is_product ? (retnv = SvNV(retsv) * SvNV(sv))
224 : (retnv = SvNV(retsv) + SvNV(sv));
229 /* TODO: Consider if product() should shortcircuit the moment its
230 * accumulator becomes zero
232 /* XXX testing flags before running get_magic may
233 * cause some valid tied values to fallback to the NV path
235 if(!SvNOK(sv) && SvIOK(sv)) {
237 if (retiv == 0) /* avoid later division by zero */
241 if (i >= IV_MAX / retiv) {
247 if (i <= IV_MIN / retiv) {
255 if (i >= IV_MIN / retiv) {
261 if (i <= IV_MAX / retiv) {
268 /* else fallthrough */
271 /* XXX testing flags before running get_magic may
272 * cause some valid tied values to fallback to the NV path
274 if(!SvNOK(sv) && SvIOK(sv)) {
276 if (retiv >= 0 && i >= 0) {
277 if (retiv <= IV_MAX - i) {
281 /* else fallthrough */
283 else if (retiv < 0 && i < 0) {
284 if (retiv >= IV_MIN - i) {
288 /* else fallthrough */
291 /* mixed signs can't overflow */
296 /* else fallthrough */
299 /* fallthrough to NV now */
303 is_product ? (retnv *= slu_sv_value(sv))
304 : (retnv += slu_sv_value(sv));
313 case ACC_SV: /* nothing to do */
316 sv_setiv(retsv, retiv);
319 sv_setnv(retsv, retnv);
327 #define SLU_CMP_LARGER 1
328 #define SLU_CMP_SMALLER -1
334 minstr = SLU_CMP_LARGER
335 maxstr = SLU_CMP_SMALLER
346 if(MAXARG & OPpLOCALE) {
347 for(index = 1 ; index < items ; index++) {
348 SV *right = ST(index);
349 if(sv_cmp_locale(left, right) == ix)
355 for(index = 1 ; index < items ; index++) {
356 SV *right = ST(index);
357 if(sv_cmp(left, right) == ix)
376 SV *ret = sv_newmortal();
380 SV **args = &PL_stack_base[ax];
381 CV *cv = sv_2cv(block, &stash, &gv, 0);
384 croak("Not a subroutine reference");
389 agv = gv_fetchpv("a", GV_ADD, SVt_PV);
390 bgv = gv_fetchpv("b", GV_ADD, SVt_PV);
394 SvSetMagicSV(ret, args[1]);
399 I32 gimme = G_SCALAR;
403 for(index = 2 ; index < items ; index++) {
404 GvSV(bgv) = args[index];
406 SvSetMagicSV(ret, *PL_stack_sp);
408 # ifdef PERL_HAS_BAD_MULTICALL_REFCOUNT
409 if(CvDEPTH(multicall_cv) > 1)
410 SvREFCNT_inc_simple_void_NN(multicall_cv);
417 for(index = 2 ; index < items ; index++) {
419 GvSV(bgv) = args[index];
422 call_sv((SV*)cv, G_SCALAR);
424 SvSetMagicSV(ret, *PL_stack_sp);
441 SV **args = &PL_stack_base[ax];
442 CV *cv = sv_2cv(block, &stash, &gv, 0);
445 croak("Not a subroutine reference");
450 SAVESPTR(GvSV(PL_defgv));
455 I32 gimme = G_SCALAR;
460 for(index = 1 ; index < items ; index++) {
461 SV *def_sv = GvSV(PL_defgv) = args[index];
466 if(SvTRUEx(*PL_stack_sp)) {
467 # ifdef PERL_HAS_BAD_MULTICALL_REFCOUNT
468 if(CvDEPTH(multicall_cv) > 1)
469 SvREFCNT_inc_simple_void_NN(multicall_cv);
476 # ifdef PERL_HAS_BAD_MULTICALL_REFCOUNT
477 if(CvDEPTH(multicall_cv) > 1)
478 SvREFCNT_inc_simple_void_NN(multicall_cv);
485 for(index = 1 ; index < items ; index++) {
487 GvSV(PL_defgv) = args[index];
490 call_sv((SV*)cv, G_SCALAR);
491 if(SvTRUEx(*PL_stack_sp)) {
512 int ret_true = !(ix & 2); /* return true at end of loop for none/all; false for any/notall */
513 int invert = (ix & 1); /* invert block test for all/notall */
516 SV **args = &PL_stack_base[ax];
517 CV *cv = sv_2cv(block, &stash, &gv, 0);
520 croak("Not a subroutine reference");
522 SAVESPTR(GvSV(PL_defgv));
527 I32 gimme = G_SCALAR;
532 for(index = 1; index < items; index++) {
533 SV *def_sv = GvSV(PL_defgv) = args[index];
539 if(SvTRUEx(*PL_stack_sp) ^ invert) {
541 ST(0) = ret_true ? &PL_sv_no : &PL_sv_yes;
551 for(index = 1; index < items; index++) {
553 GvSV(PL_defgv) = args[index];
556 call_sv((SV*)cv, G_SCALAR);
557 if(SvTRUEx(*PL_stack_sp) ^ invert) {
558 ST(0) = ret_true ? &PL_sv_no : &PL_sv_yes;
564 ST(0) = ret_true ? &PL_sv_yes : &PL_sv_no;
575 HV *pairstash = get_hv("List::Util::_Pair::", GV_ADD);
577 if(items % 2 && ckWARN(WARN_MISC))
578 warn("Odd number of elements in pairs");
581 for(; argi < items; argi += 2) {
583 SV *b = argi < items-1 ? ST(argi+1) : &PL_sv_undef;
586 av_push(av, newSVsv(a));
587 av_push(av, newSVsv(b));
589 ST(reti) = sv_2mortal(newRV_noinc((SV *)av));
590 sv_bless(ST(reti), pairstash);
603 /* Unlike pairs(), we're going to trash the input values on the stack
604 * almost as soon as we start generating output. So clone them first
608 Newx(args_copy, items, SV *);
609 SAVEFREEPV(args_copy);
611 Copy(&ST(0), args_copy, items, SV *);
613 for(i = 0; i < items; i++) {
614 SV *pair = args_copy[i];
619 if(SvTYPE(pair) != SVt_RV)
620 croak("Not a reference at List::Util::unpack() argument %d", i);
621 if(SvTYPE(SvRV(pair)) != SVt_PVAV)
622 croak("Not an ARRAY reference at List::Util::unpack() argument %d", i);
624 /* TODO: assert pair is an ARRAY ref */
625 pairav = (AV *)SvRV(pair);
629 if(AvFILL(pairav) >= 0)
630 mPUSHs(newSVsv(AvARRAY(pairav)[0]));
634 if(AvFILL(pairav) >= 1)
635 mPUSHs(newSVsv(AvARRAY(pairav)[1]));
651 if(items % 2 && ckWARN(WARN_MISC))
652 warn("Odd number of elements in pairkeys");
655 for(; argi < items; argi += 2) {
658 ST(reti++) = sv_2mortal(newSVsv(a));
673 if(items % 2 && ckWARN(WARN_MISC))
674 warn("Odd number of elements in pairvalues");
677 for(; argi < items; argi += 2) {
678 SV *b = argi < items-1 ? ST(argi+1) : &PL_sv_undef;
680 ST(reti++) = sv_2mortal(newSVsv(b));
695 CV *cv = sv_2cv(block, &stash, &gv, 0);
696 I32 ret_gimme = GIMME_V;
697 int argi = 1; /* "shift" the block */
699 if(!(items % 2) && ckWARN(WARN_MISC))
700 warn("Odd number of elements in pairfirst");
702 agv = gv_fetchpv("a", GV_ADD, SVt_PV);
703 bgv = gv_fetchpv("b", GV_ADD, SVt_PV);
709 /* Since MULTICALL is about to move it */
710 SV **stack = PL_stack_base + ax;
713 I32 gimme = G_SCALAR;
717 for(; argi < items; argi += 2) {
718 SV *a = GvSV(agv) = stack[argi];
719 SV *b = GvSV(bgv) = argi < items-1 ? stack[argi+1] : &PL_sv_undef;
723 if(!SvTRUEx(*PL_stack_sp))
727 if(ret_gimme == G_ARRAY) {
728 ST(0) = sv_mortalcopy(a);
729 ST(1) = sv_mortalcopy(b);
741 for(; argi < items; argi += 2) {
743 SV *a = GvSV(agv) = ST(argi);
744 SV *b = GvSV(bgv) = argi < items-1 ? ST(argi+1) : &PL_sv_undef;
747 call_sv((SV*)cv, G_SCALAR);
751 if(!SvTRUEx(*PL_stack_sp))
754 if(ret_gimme == G_ARRAY) {
755 ST(0) = sv_mortalcopy(a);
756 ST(1) = sv_mortalcopy(b);
775 CV *cv = sv_2cv(block, &stash, &gv, 0);
776 I32 ret_gimme = GIMME_V;
778 /* This function never returns more than it consumed in arguments. So we
779 * can build the results "live", behind the arguments
781 int argi = 1; /* "shift" the block */
784 if(!(items % 2) && ckWARN(WARN_MISC))
785 warn("Odd number of elements in pairgrep");
787 agv = gv_fetchpv("a", GV_ADD, SVt_PV);
788 bgv = gv_fetchpv("b", GV_ADD, SVt_PV);
794 /* Since MULTICALL is about to move it */
795 SV **stack = PL_stack_base + ax;
799 I32 gimme = G_SCALAR;
803 for(; argi < items; argi += 2) {
804 SV *a = GvSV(agv) = stack[argi];
805 SV *b = GvSV(bgv) = argi < items-1 ? stack[argi+1] : &PL_sv_undef;
809 if(SvTRUEx(*PL_stack_sp)) {
810 if(ret_gimme == G_ARRAY) {
811 /* We can't mortalise yet or they'd be mortal too early */
812 stack[reti++] = newSVsv(a);
813 stack[reti++] = newSVsv(b);
815 else if(ret_gimme == G_SCALAR)
821 if(ret_gimme == G_ARRAY)
822 for(i = 0; i < reti; i++)
823 sv_2mortal(stack[i]);
828 for(; argi < items; argi += 2) {
830 SV *a = GvSV(agv) = ST(argi);
831 SV *b = GvSV(bgv) = argi < items-1 ? ST(argi+1) : &PL_sv_undef;
834 call_sv((SV*)cv, G_SCALAR);
838 if(SvTRUEx(*PL_stack_sp)) {
839 if(ret_gimme == G_ARRAY) {
840 ST(reti++) = sv_mortalcopy(a);
841 ST(reti++) = sv_mortalcopy(b);
843 else if(ret_gimme == G_SCALAR)
849 if(ret_gimme == G_ARRAY)
851 else if(ret_gimme == G_SCALAR) {
852 ST(0) = newSViv(reti);
865 CV *cv = sv_2cv(block, &stash, &gv, 0);
866 SV **args_copy = NULL;
867 I32 ret_gimme = GIMME_V;
869 int argi = 1; /* "shift" the block */
872 if(!(items % 2) && ckWARN(WARN_MISC))
873 warn("Odd number of elements in pairmap");
875 agv = gv_fetchpv("a", GV_ADD, SVt_PV);
876 bgv = gv_fetchpv("b", GV_ADD, SVt_PV);
879 /* This MULTICALL-based code appears to fail on perl 5.10.0 and 5.8.9
880 * Skip it on those versions (RT#87857)
882 #if defined(dMULTICALL) && (PERL_BCDVERSION > 0x5010000 || PERL_BCDVERSION < 0x5008009)
885 /* Since MULTICALL is about to move it */
886 SV **stack = PL_stack_base + ax;
887 I32 ret_gimme = GIMME_V;
895 for(; argi < items; argi += 2) {
898 GvSV(agv) = args_copy ? args_copy[argi] : stack[argi];
899 GvSV(bgv) = argi < items-1 ?
900 (args_copy ? args_copy[argi+1] : stack[argi+1]) :
904 count = PL_stack_sp - PL_stack_base;
906 if(count > 2 && !args_copy) {
907 /* We can't return more than 2 results for a given input pair
908 * without trashing the remaining argmuents on the stack still
909 * to be processed. So, we'll copy them out to a temporary
910 * buffer and work from there instead.
911 * We didn't do this initially because in the common case, most
912 * code blocks will return only 1 or 2 items so it won't be
915 int n_args = items - argi;
916 Newx(args_copy, n_args, SV *);
917 SAVEFREEPV(args_copy);
919 Copy(stack + argi, args_copy, n_args, SV *);
925 for(i = 0; i < count; i++)
926 stack[reti++] = newSVsv(PL_stack_sp[i - count + 1]);
930 if(ret_gimme == G_ARRAY)
931 for(i = 0; i < reti; i++)
932 sv_2mortal(stack[i]);
937 for(; argi < items; argi += 2) {
942 GvSV(agv) = args_copy ? args_copy[argi] : ST(argi);
943 GvSV(bgv) = argi < items-1 ?
944 (args_copy ? args_copy[argi+1] : ST(argi+1)) :
948 count = call_sv((SV*)cv, G_ARRAY);
952 if(count > 2 && !args_copy && ret_gimme == G_ARRAY) {
953 int n_args = items - argi;
954 Newx(args_copy, n_args, SV *);
955 SAVEFREEPV(args_copy);
957 Copy(&ST(argi), args_copy, n_args, SV *);
963 if(ret_gimme == G_ARRAY)
964 for(i = 0; i < count; i++)
965 ST(reti++) = sv_mortalcopy(SP[i - count + 1]);
973 if(ret_gimme == G_ARRAY)
976 ST(0) = sv_2mortal(newSViv(reti));
986 #if (PERL_VERSION < 9)
988 struct op *old_op = PL_op;
990 /* We call pp_rand here so that Drand01 get initialized if rand()
991 or srand() has not already been called
993 memzero((char*)(&dmy_op), sizeof(struct op));
994 /* we let pp_rand() borrow the TARG allocated for this XS sub */
995 dmy_op.op_targ = PL_op->op_targ;
997 (void)*(PL_ppaddr[OP_RAND])(aTHX);
1000 /* Initialize Drand01 if rand() or srand() has
1001 not already been called
1003 if(!PL_srand_called) {
1004 (void)seedDrand01((Rand_seed_t)Perl_seed(aTHX));
1005 PL_srand_called = TRUE;
1009 for (index = items ; index > 1 ; ) {
1010 int swap = (int)(Drand01() * (double)(index--));
1012 ST(swap) = ST(index);
1031 SV **args = &PL_stack_base[ax];
1034 if(items == 0 || (items == 1 && !SvGAMAGIC(args[0]) && SvOK(args[0]))) {
1035 /* Optimise for the case of the empty list or a defined nonmagic
1036 * singleton. Leave a singleton magical||undef for the regular case */
1041 sv_2mortal((SV *)(seen = newHV()));
1045 /* A temporary buffer for number stringification */
1046 SV *keysv = sv_newmortal();
1048 for(index = 0 ; index < items ; index++) {
1049 SV *arg = args[index];
1050 #ifdef HV_FETCH_EMPTY_HE
1055 /* clone the value so we don't invoke magic again */
1056 arg = sv_mortalcopy(arg);
1059 sv_setpvf(keysv, "%"UVuf, SvUV(arg));
1061 sv_setpvf(keysv, "%"IVdf, SvIV(arg));
1063 sv_setpvf(keysv, "%"NVgf, SvNV(arg));
1064 #ifdef HV_FETCH_EMPTY_HE
1065 he = (HE*) hv_common(seen, NULL, SvPVX(keysv), SvCUR(keysv), 0, HV_FETCH_LVALUE | HV_FETCH_EMPTY_HE, NULL, 0);
1069 HeVAL(he) = &PL_sv_undef;
1071 if(hv_exists(seen, SvPVX(keysv), SvCUR(keysv)))
1074 hv_store(seen, SvPVX(keysv), SvCUR(keysv), &PL_sv_undef, 0);
1077 if(GIMME_V == G_ARRAY)
1078 ST(retcount) = SvOK(arg) ? arg : sv_2mortal(newSViv(0));
1083 /* uniqstr or uniq */
1086 for(index = 0 ; index < items ; index++) {
1087 SV *arg = args[index];
1088 #ifdef HV_FETCH_EMPTY_HE
1093 /* clone the value so we don't invoke magic again */
1094 arg = sv_mortalcopy(arg);
1096 if(ix == 2 && !SvOK(arg)) {
1097 /* special handling of undef for uniq() */
1103 if(GIMME_V == G_ARRAY)
1108 #ifdef HV_FETCH_EMPTY_HE
1109 he = (HE*) hv_common(seen, arg, NULL, 0, 0, HV_FETCH_LVALUE | HV_FETCH_EMPTY_HE, NULL, 0);
1113 HeVAL(he) = &PL_sv_undef;
1115 if (hv_exists_ent(seen, arg, 0))
1118 hv_store_ent(seen, arg, &PL_sv_undef, 0);
1121 if(GIMME_V == G_ARRAY)
1122 ST(retcount) = SvOK(arg) ? arg : sv_2mortal(newSVpvn("", 0));
1128 if(GIMME_V == G_ARRAY)
1131 ST(0) = sv_2mortal(newSViv(retcount));
1134 MODULE=List::Util PACKAGE=Scalar::Util
1145 (void)SvUPGRADE(TARG, SVt_PVNV);
1147 sv_copypv(TARG,str);
1149 if(SvNOK(num) || SvPOK(num) || SvMAGICAL(num)) {
1150 SvNV_set(TARG, SvNV(num));
1154 else if(SvUOK(num)) {
1155 SvUV_set(TARG, SvUV(num));
1161 SvIV_set(TARG, SvIV(num));
1165 if(PL_tainting && (SvTAINTED(num) || SvTAINTED(str)))
1180 ST(0) = boolSV((SvPOK(sv) || SvPOKp(sv)) && (SvNIOK(sv) || SvNIOKp(sv)));
1191 if(!(SvROK(sv) && SvOBJECT(SvRV(sv))))
1194 RETVAL = (char*)sv_reftype(SvRV(sv),TRUE);
1209 RETVAL = (char*)sv_reftype(SvRV(sv),FALSE);
1224 RETVAL = PTR2UV(SvRV(sv));
1237 croak("weak references are not implemented in this release of perl");
1248 /* This code stolen from core's sv_rvweaken() and modified */
1252 croak("Can't unweaken a nonreference");
1253 else if (!SvWEAKREF(sv)) {
1254 if(ckWARN(WARN_MISC))
1255 warn("Reference is not weak");
1258 else if (SvREADONLY(sv)) croak_no_modify();
1261 #if PERL_VERSION >= 14
1262 SvWEAKREF_off(sv); SvROK_on(sv);
1263 SvREFCNT_inc_NN(tsv);
1264 Perl_sv_del_backref(aTHX_ tsv, sv);
1266 /* Lacking sv_del_backref() the best we can do is clear the old (weak) ref
1267 * then set a new strong one
1269 sv_setsv(sv, &PL_sv_undef);
1270 SvRV_set(sv, SvREFCNT_inc_NN(tsv));
1274 croak("weak references are not implemented in this release of perl");
1283 ST(0) = boolSV(SvROK(sv) && SvWEAKREF(sv));
1286 croak("weak references are not implemented in this release of perl");
1295 RETVAL = SvREADONLY(sv);
1305 RETVAL = SvTAINTED(sv);
1316 ST(0) = boolSV(SvVOK(sv));
1319 croak("vstrings are not implemented in this release of perl");
1323 looks_like_number(sv)
1329 if(SvAMAGIC(sv) && (tempsv = AMG_CALLun(sv, numer))) {
1332 #if PERL_BCDVERSION < 0x5008005
1333 if(SvPOK(sv) || SvPOKp(sv)) {
1334 RETVAL = looks_like_number(sv) ? &PL_sv_yes : &PL_sv_no;
1337 RETVAL = (SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK)) ? &PL_sv_yes : &PL_sv_no;
1340 RETVAL = looks_like_number(sv) ? &PL_sv_yes : &PL_sv_no;
1357 /* must be GLOB or IO */
1361 else if(SvTYPE(sv) == SVt_PVIO){
1366 /* real or tied filehandle? */
1367 if(IoIFP(io) || SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)){
1374 MODULE=List::Util PACKAGE=Sub::Util
1377 set_prototype(proto, code)
1381 SV *cv; /* not CV * */
1385 croak("set_prototype: not a reference");
1388 if(SvTYPE(cv) != SVt_PVCV)
1389 croak("set_prototype: not a subroutine reference");
1392 /* set the prototype */
1393 sv_copypv(cv, proto);
1396 /* delete the prototype */
1404 set_subname(name, sub)
1410 HV *stash = CopSTASH(PL_curcop);
1411 char *s, *end = NULL;
1414 if (!SvROK(sub) && SvGMAGICAL(sub))
1417 cv = (CV *) SvRV(sub);
1418 else if (SvTYPE(sub) == SVt_PVGV)
1420 else if (!SvOK(sub))
1421 croak(PL_no_usym, "a subroutine");
1422 else if (PL_op->op_private & HINT_STRICT_REFS)
1423 croak("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use",
1424 SvPV_nolen(sub), "a subroutine");
1425 else if ((gv = gv_fetchpv(SvPV_nolen(sub), FALSE, SVt_PVCV)))
1428 croak("Undefined subroutine %s", SvPV_nolen(sub));
1429 if (SvTYPE(cv) != SVt_PVCV && SvTYPE(cv) != SVt_PVFM)
1430 croak("Not a subroutine reference");
1431 for (s = name; *s++; ) {
1432 if (*s == ':' && s[-1] == ':')
1434 else if (*s && s[-1] == '\'')
1439 char *namepv = savepvn(name, end - name);
1440 stash = GvHV(gv_fetchpv(namepv, TRUE, SVt_PVHV));
1445 /* under debugger, provide information about sub location */
1446 if (PL_DBsub && CvGV(cv)) {
1447 HV *hv = GvHV(PL_DBsub);
1449 char *new_pkg = HvNAME(stash);
1451 char *old_name = GvNAME( CvGV(cv) );
1452 char *old_pkg = HvNAME( GvSTASH(CvGV(cv)) );
1454 int old_len = strlen(old_name) + strlen(old_pkg);
1455 int new_len = strlen(name) + strlen(new_pkg);
1460 Newxz(full_name, (old_len > new_len ? old_len : new_len) + 3, char);
1462 strcat(full_name, old_pkg);
1463 strcat(full_name, "::");
1464 strcat(full_name, old_name);
1466 old_data = hv_fetch(hv, full_name, strlen(full_name), 0);
1469 strcpy(full_name, new_pkg);
1470 strcat(full_name, "::");
1471 strcat(full_name, name);
1473 SvREFCNT_inc(*old_data);
1474 if (!hv_store(hv, full_name, strlen(full_name), *old_data, 0))
1475 SvREFCNT_dec(*old_data);
1477 Safefree(full_name);
1480 gv = (GV *) newSV(0);
1481 gv_init(gv, stash, name, s - name, TRUE);
1484 * set_subname needs to create a GV to store the name. The CvGV field of a
1485 * CV is not refcounted, so perl wouldn't know to SvREFCNT_dec() this GV if
1486 * it destroys the containing CV. We use a MAGIC with an empty vtable
1487 * simply for the side-effect of using MGf_REFCOUNTED to store the
1488 * actually-counted reference to the GV.
1491 while (mg && mg->mg_virtual != &subname_vtbl)
1492 mg = mg->mg_moremagic;
1494 Newxz(mg, 1, MAGIC);
1495 mg->mg_moremagic = SvMAGIC(cv);
1496 mg->mg_type = PERL_MAGIC_ext;
1497 mg->mg_virtual = &subname_vtbl;
1498 SvMAGIC_set(cv, mg);
1500 if (mg->mg_flags & MGf_REFCOUNTED)
1501 SvREFCNT_dec(mg->mg_obj);
1502 mg->mg_flags |= MGf_REFCOUNTED;
1503 mg->mg_obj = (SV *) gv;
1520 if (!SvROK(code) && SvGMAGICAL(code))
1523 if(!SvROK(code) || SvTYPE(cv = (CV *)SvRV(code)) != SVt_PVCV)
1524 croak("Not a subroutine reference");
1526 if(!(gv = CvGV(cv)))
1529 mPUSHs(newSVpvf("%s::%s", HvNAME(GvSTASH(gv)), GvNAME(gv)));
1534 HV *lu_stash = gv_stashpvn("List::Util", 10, TRUE);
1535 GV *rmcgv = *(GV**)hv_fetch(lu_stash, "REAL_MULTICALL", 14, TRUE);
1537 #if !defined(SvWEAKREF) || !defined(SvVOK)
1538 HV *su_stash = gv_stashpvn("Scalar::Util", 12, TRUE);
1539 GV *vargv = *(GV**)hv_fetch(su_stash, "EXPORT_FAIL", 11, TRUE);
1541 if(SvTYPE(vargv) != SVt_PVGV)
1542 gv_init(vargv, su_stash, "Scalar::Util", 12, TRUE);
1543 varav = GvAVn(vargv);
1545 if(SvTYPE(rmcgv) != SVt_PVGV)
1546 gv_init(rmcgv, lu_stash, "List::Util", 10, TRUE);
1547 rmcsv = GvSVn(rmcgv);
1549 av_push(varav, newSVpv("weaken",6));
1550 av_push(varav, newSVpv("isweak",6));
1553 av_push(varav, newSVpv("isvstring",9));
1555 #ifdef REAL_MULTICALL
1556 sv_setsv(rmcsv, &PL_sv_yes);
1558 sv_setsv(rmcsv, &PL_sv_no);