1 /* sv.c 2 * 3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall 5 * and others 6 * 7 * You may distribute under the terms of either the GNU General Public 8 * License or the Artistic License, as specified in the README file. 9 * 10 */ 11 12 /* 13 * 'I wonder what the Entish is for "yes" and "no",' he thought. 14 * --Pippin 15 * 16 * [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"] 17 */ 18 19 /* 20 * 21 * 22 * This file contains the code that creates, manipulates and destroys 23 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the 24 * structure of an SV, so their creation and destruction is handled 25 * here; higher-level functions are in av.c, hv.c, and so on. Opcode 26 * level functions (eg. substr, split, join) for each of the types are 27 * in the pp*.c files. 28 */ 29 30 #include "EXTERN.h" 31 #define PERL_IN_SV_C 32 #include "perl.h" 33 #include "regcomp.h" 34 35 #ifndef HAS_C99 36 # if __STDC_VERSION__ >= 199901L && !defined(VMS) 37 # define HAS_C99 1 38 # endif 39 #endif 40 #if HAS_C99 41 # include <stdint.h> 42 #endif 43 44 #define FCALL *f 45 46 #ifdef __Lynx__ 47 /* Missing proto on LynxOS */ 48 char *gconvert(double, int, int, char *); 49 #endif 50 51 #ifdef PERL_UTF8_CACHE_ASSERT 52 /* if adding more checks watch out for the following tests: 53 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t 54 * lib/utf8.t lib/Unicode/Collate/t/index.t 55 * --jhi 56 */ 57 # define ASSERT_UTF8_CACHE(cache) \ 58 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \ 59 assert((cache)[2] <= (cache)[3]); \ 60 assert((cache)[3] <= (cache)[1]);} \ 61 } STMT_END 62 #else 63 # define ASSERT_UTF8_CACHE(cache) NOOP 64 #endif 65 66 #ifdef PERL_OLD_COPY_ON_WRITE 67 #define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv)) 68 #define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next)) 69 #endif 70 71 /* ============================================================================ 72 73 =head1 Allocation and deallocation of SVs. 74 75 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct 76 sv, av, hv...) contains type and reference count information, and for 77 many types, a pointer to the body (struct xrv, xpv, xpviv...), which 78 contains fields specific to each type. Some types store all they need 79 in the head, so don't have a body. 80 81 In all but the most memory-paranoid configurations (ex: PURIFY), heads 82 and bodies are allocated out of arenas, which by default are 83 approximately 4K chunks of memory parcelled up into N heads or bodies. 84 Sv-bodies are allocated by their sv-type, guaranteeing size 85 consistency needed to allocate safely from arrays. 86 87 For SV-heads, the first slot in each arena is reserved, and holds a 88 link to the next arena, some flags, and a note of the number of slots. 89 Snaked through each arena chain is a linked list of free items; when 90 this becomes empty, an extra arena is allocated and divided up into N 91 items which are threaded into the free list. 92 93 SV-bodies are similar, but they use arena-sets by default, which 94 separate the link and info from the arena itself, and reclaim the 1st 95 slot in the arena. SV-bodies are further described later. 96 97 The following global variables are associated with arenas: 98 99 PL_sv_arenaroot pointer to list of SV arenas 100 PL_sv_root pointer to list of free SV structures 101 102 PL_body_arenas head of linked-list of body arenas 103 PL_body_roots[] array of pointers to list of free bodies of svtype 104 arrays are indexed by the svtype needed 105 106 A few special SV heads are not allocated from an arena, but are 107 instead directly created in the interpreter structure, eg PL_sv_undef. 108 The size of arenas can be changed from the default by setting 109 PERL_ARENA_SIZE appropriately at compile time. 110 111 The SV arena serves the secondary purpose of allowing still-live SVs 112 to be located and destroyed during final cleanup. 113 114 At the lowest level, the macros new_SV() and del_SV() grab and free 115 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv() 116 to return the SV to the free list with error checking.) new_SV() calls 117 more_sv() / sv_add_arena() to add an extra arena if the free list is empty. 118 SVs in the free list have their SvTYPE field set to all ones. 119 120 At the time of very final cleanup, sv_free_arenas() is called from 121 perl_destruct() to physically free all the arenas allocated since the 122 start of the interpreter. 123 124 The function visit() scans the SV arenas list, and calls a specified 125 function for each SV it finds which is still live - ie which has an SvTYPE 126 other than all 1's, and a non-zero SvREFCNT. visit() is used by the 127 following functions (specified as [function that calls visit()] / [function 128 called by visit() for each SV]): 129 130 sv_report_used() / do_report_used() 131 dump all remaining SVs (debugging aid) 132 133 sv_clean_objs() / do_clean_objs(),do_clean_named_objs(), 134 do_clean_named_io_objs(),do_curse() 135 Attempt to free all objects pointed to by RVs, 136 try to do the same for all objects indir- 137 ectly referenced by typeglobs too, and 138 then do a final sweep, cursing any 139 objects that remain. Called once from 140 perl_destruct(), prior to calling sv_clean_all() 141 below. 142 143 sv_clean_all() / do_clean_all() 144 SvREFCNT_dec(sv) each remaining SV, possibly 145 triggering an sv_free(). It also sets the 146 SVf_BREAK flag on the SV to indicate that the 147 refcnt has been artificially lowered, and thus 148 stopping sv_free() from giving spurious warnings 149 about SVs which unexpectedly have a refcnt 150 of zero. called repeatedly from perl_destruct() 151 until there are no SVs left. 152 153 =head2 Arena allocator API Summary 154 155 Private API to rest of sv.c 156 157 new_SV(), del_SV(), 158 159 new_XPVNV(), del_XPVGV(), 160 etc 161 162 Public API: 163 164 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas() 165 166 =cut 167 168 * ========================================================================= */ 169 170 /* 171 * "A time to plant, and a time to uproot what was planted..." 172 */ 173 174 #ifdef PERL_MEM_LOG 175 # define MEM_LOG_NEW_SV(sv, file, line, func) \ 176 Perl_mem_log_new_sv(sv, file, line, func) 177 # define MEM_LOG_DEL_SV(sv, file, line, func) \ 178 Perl_mem_log_del_sv(sv, file, line, func) 179 #else 180 # define MEM_LOG_NEW_SV(sv, file, line, func) NOOP 181 # define MEM_LOG_DEL_SV(sv, file, line, func) NOOP 182 #endif 183 184 #ifdef DEBUG_LEAKING_SCALARS 185 # define FREE_SV_DEBUG_FILE(sv) STMT_START { \ 186 if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \ 187 } STMT_END 188 # define DEBUG_SV_SERIAL(sv) \ 189 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n", \ 190 PTR2UV(sv), (long)(sv)->sv_debug_serial)) 191 #else 192 # define FREE_SV_DEBUG_FILE(sv) 193 # define DEBUG_SV_SERIAL(sv) NOOP 194 #endif 195 196 #ifdef PERL_POISON 197 # define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv) 198 # define SvARENA_CHAIN_SET(sv,val) (sv)->sv_u.svu_rv = MUTABLE_SV((val)) 199 /* Whilst I'd love to do this, it seems that things like to check on 200 unreferenced scalars 201 # define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV) 202 */ 203 # define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \ 204 PoisonNew(&SvREFCNT(sv), 1, U32) 205 #else 206 # define SvARENA_CHAIN(sv) SvANY(sv) 207 # define SvARENA_CHAIN_SET(sv,val) SvANY(sv) = (void *)(val) 208 # define POSION_SV_HEAD(sv) 209 #endif 210 211 /* Mark an SV head as unused, and add to free list. 212 * 213 * If SVf_BREAK is set, skip adding it to the free list, as this SV had 214 * its refcount artificially decremented during global destruction, so 215 * there may be dangling pointers to it. The last thing we want in that 216 * case is for it to be reused. */ 217 218 #define plant_SV(p) \ 219 STMT_START { \ 220 const U32 old_flags = SvFLAGS(p); \ 221 MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__); \ 222 DEBUG_SV_SERIAL(p); \ 223 FREE_SV_DEBUG_FILE(p); \ 224 POSION_SV_HEAD(p); \ 225 SvFLAGS(p) = SVTYPEMASK; \ 226 if (!(old_flags & SVf_BREAK)) { \ 227 SvARENA_CHAIN_SET(p, PL_sv_root); \ 228 PL_sv_root = (p); \ 229 } \ 230 --PL_sv_count; \ 231 } STMT_END 232 233 #define uproot_SV(p) \ 234 STMT_START { \ 235 (p) = PL_sv_root; \ 236 PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p)); \ 237 ++PL_sv_count; \ 238 } STMT_END 239 240 241 /* make some more SVs by adding another arena */ 242 243 STATIC SV* 244 S_more_sv(pTHX) 245 { 246 dVAR; 247 SV* sv; 248 char *chunk; /* must use New here to match call to */ 249 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */ 250 sv_add_arena(chunk, PERL_ARENA_SIZE, 0); 251 uproot_SV(sv); 252 return sv; 253 } 254 255 /* new_SV(): return a new, empty SV head */ 256 257 #ifdef DEBUG_LEAKING_SCALARS 258 /* provide a real function for a debugger to play with */ 259 STATIC SV* 260 S_new_SV(pTHX_ const char *file, int line, const char *func) 261 { 262 SV* sv; 263 264 if (PL_sv_root) 265 uproot_SV(sv); 266 else 267 sv = S_more_sv(aTHX); 268 SvANY(sv) = 0; 269 SvREFCNT(sv) = 1; 270 SvFLAGS(sv) = 0; 271 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0; 272 sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE 273 ? PL_parser->copline 274 : PL_curcop 275 ? CopLINE(PL_curcop) 276 : 0 277 ); 278 sv->sv_debug_inpad = 0; 279 sv->sv_debug_parent = NULL; 280 sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL; 281 282 sv->sv_debug_serial = PL_sv_serial++; 283 284 MEM_LOG_NEW_SV(sv, file, line, func); 285 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n", 286 PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func)); 287 288 return sv; 289 } 290 # define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__) 291 292 #else 293 # define new_SV(p) \ 294 STMT_START { \ 295 if (PL_sv_root) \ 296 uproot_SV(p); \ 297 else \ 298 (p) = S_more_sv(aTHX); \ 299 SvANY(p) = 0; \ 300 SvREFCNT(p) = 1; \ 301 SvFLAGS(p) = 0; \ 302 MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__); \ 303 } STMT_END 304 #endif 305 306 307 /* del_SV(): return an empty SV head to the free list */ 308 309 #ifdef DEBUGGING 310 311 #define del_SV(p) \ 312 STMT_START { \ 313 if (DEBUG_D_TEST) \ 314 del_sv(p); \ 315 else \ 316 plant_SV(p); \ 317 } STMT_END 318 319 STATIC void 320 S_del_sv(pTHX_ SV *p) 321 { 322 dVAR; 323 324 PERL_ARGS_ASSERT_DEL_SV; 325 326 if (DEBUG_D_TEST) { 327 SV* sva; 328 bool ok = 0; 329 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) { 330 const SV * const sv = sva + 1; 331 const SV * const svend = &sva[SvREFCNT(sva)]; 332 if (p >= sv && p < svend) { 333 ok = 1; 334 break; 335 } 336 } 337 if (!ok) { 338 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), 339 "Attempt to free non-arena SV: 0x%"UVxf 340 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE); 341 return; 342 } 343 } 344 plant_SV(p); 345 } 346 347 #else /* ! DEBUGGING */ 348 349 #define del_SV(p) plant_SV(p) 350 351 #endif /* DEBUGGING */ 352 353 354 /* 355 =head1 SV Manipulation Functions 356 357 =for apidoc sv_add_arena 358 359 Given a chunk of memory, link it to the head of the list of arenas, 360 and split it into a list of free SVs. 361 362 =cut 363 */ 364 365 static void 366 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags) 367 { 368 dVAR; 369 SV *const sva = MUTABLE_SV(ptr); 370 SV* sv; 371 SV* svend; 372 373 PERL_ARGS_ASSERT_SV_ADD_ARENA; 374 375 /* The first SV in an arena isn't an SV. */ 376 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */ 377 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */ 378 SvFLAGS(sva) = flags; /* FAKE if not to be freed */ 379 380 PL_sv_arenaroot = sva; 381 PL_sv_root = sva + 1; 382 383 svend = &sva[SvREFCNT(sva) - 1]; 384 sv = sva + 1; 385 while (sv < svend) { 386 SvARENA_CHAIN_SET(sv, (sv + 1)); 387 #ifdef DEBUGGING 388 SvREFCNT(sv) = 0; 389 #endif 390 /* Must always set typemask because it's always checked in on cleanup 391 when the arenas are walked looking for objects. */ 392 SvFLAGS(sv) = SVTYPEMASK; 393 sv++; 394 } 395 SvARENA_CHAIN_SET(sv, 0); 396 #ifdef DEBUGGING 397 SvREFCNT(sv) = 0; 398 #endif 399 SvFLAGS(sv) = SVTYPEMASK; 400 } 401 402 /* visit(): call the named function for each non-free SV in the arenas 403 * whose flags field matches the flags/mask args. */ 404 405 STATIC I32 406 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask) 407 { 408 dVAR; 409 SV* sva; 410 I32 visited = 0; 411 412 PERL_ARGS_ASSERT_VISIT; 413 414 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) { 415 const SV * const svend = &sva[SvREFCNT(sva)]; 416 SV* sv; 417 for (sv = sva + 1; sv < svend; ++sv) { 418 if (SvTYPE(sv) != (svtype)SVTYPEMASK 419 && (sv->sv_flags & mask) == flags 420 && SvREFCNT(sv)) 421 { 422 (FCALL)(aTHX_ sv); 423 ++visited; 424 } 425 } 426 } 427 return visited; 428 } 429 430 #ifdef DEBUGGING 431 432 /* called by sv_report_used() for each live SV */ 433 434 static void 435 do_report_used(pTHX_ SV *const sv) 436 { 437 if (SvTYPE(sv) != (svtype)SVTYPEMASK) { 438 PerlIO_printf(Perl_debug_log, "****\n"); 439 sv_dump(sv); 440 } 441 } 442 #endif 443 444 /* 445 =for apidoc sv_report_used 446 447 Dump the contents of all SVs not yet freed (debugging aid). 448 449 =cut 450 */ 451 452 void 453 Perl_sv_report_used(pTHX) 454 { 455 #ifdef DEBUGGING 456 visit(do_report_used, 0, 0); 457 #else 458 PERL_UNUSED_CONTEXT; 459 #endif 460 } 461 462 /* called by sv_clean_objs() for each live SV */ 463 464 static void 465 do_clean_objs(pTHX_ SV *const ref) 466 { 467 dVAR; 468 assert (SvROK(ref)); 469 { 470 SV * const target = SvRV(ref); 471 if (SvOBJECT(target)) { 472 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref))); 473 if (SvWEAKREF(ref)) { 474 sv_del_backref(target, ref); 475 SvWEAKREF_off(ref); 476 SvRV_set(ref, NULL); 477 } else { 478 SvROK_off(ref); 479 SvRV_set(ref, NULL); 480 SvREFCNT_dec_NN(target); 481 } 482 } 483 } 484 } 485 486 487 /* clear any slots in a GV which hold objects - except IO; 488 * called by sv_clean_objs() for each live GV */ 489 490 static void 491 do_clean_named_objs(pTHX_ SV *const sv) 492 { 493 dVAR; 494 SV *obj; 495 assert(SvTYPE(sv) == SVt_PVGV); 496 assert(isGV_with_GP(sv)); 497 if (!GvGP(sv)) 498 return; 499 500 /* freeing GP entries may indirectly free the current GV; 501 * hold onto it while we mess with the GP slots */ 502 SvREFCNT_inc(sv); 503 504 if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) { 505 DEBUG_D((PerlIO_printf(Perl_debug_log, 506 "Cleaning named glob SV object:\n "), sv_dump(obj))); 507 GvSV(sv) = NULL; 508 SvREFCNT_dec_NN(obj); 509 } 510 if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) { 511 DEBUG_D((PerlIO_printf(Perl_debug_log, 512 "Cleaning named glob AV object:\n "), sv_dump(obj))); 513 GvAV(sv) = NULL; 514 SvREFCNT_dec_NN(obj); 515 } 516 if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) { 517 DEBUG_D((PerlIO_printf(Perl_debug_log, 518 "Cleaning named glob HV object:\n "), sv_dump(obj))); 519 GvHV(sv) = NULL; 520 SvREFCNT_dec_NN(obj); 521 } 522 if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) { 523 DEBUG_D((PerlIO_printf(Perl_debug_log, 524 "Cleaning named glob CV object:\n "), sv_dump(obj))); 525 GvCV_set(sv, NULL); 526 SvREFCNT_dec_NN(obj); 527 } 528 SvREFCNT_dec_NN(sv); /* undo the inc above */ 529 } 530 531 /* clear any IO slots in a GV which hold objects (except stderr, defout); 532 * called by sv_clean_objs() for each live GV */ 533 534 static void 535 do_clean_named_io_objs(pTHX_ SV *const sv) 536 { 537 dVAR; 538 SV *obj; 539 assert(SvTYPE(sv) == SVt_PVGV); 540 assert(isGV_with_GP(sv)); 541 if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv) 542 return; 543 544 SvREFCNT_inc(sv); 545 if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) { 546 DEBUG_D((PerlIO_printf(Perl_debug_log, 547 "Cleaning named glob IO object:\n "), sv_dump(obj))); 548 GvIOp(sv) = NULL; 549 SvREFCNT_dec_NN(obj); 550 } 551 SvREFCNT_dec_NN(sv); /* undo the inc above */ 552 } 553 554 /* Void wrapper to pass to visit() */ 555 static void 556 do_curse(pTHX_ SV * const sv) { 557 if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv) 558 || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv)) 559 return; 560 (void)curse(sv, 0); 561 } 562 563 /* 564 =for apidoc sv_clean_objs 565 566 Attempt to destroy all objects not yet freed. 567 568 =cut 569 */ 570 571 void 572 Perl_sv_clean_objs(pTHX) 573 { 574 dVAR; 575 GV *olddef, *olderr; 576 PL_in_clean_objs = TRUE; 577 visit(do_clean_objs, SVf_ROK, SVf_ROK); 578 /* Some barnacles may yet remain, clinging to typeglobs. 579 * Run the non-IO destructors first: they may want to output 580 * error messages, close files etc */ 581 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP); 582 visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP); 583 /* And if there are some very tenacious barnacles clinging to arrays, 584 closures, or what have you.... */ 585 visit(do_curse, SVs_OBJECT, SVs_OBJECT); 586 olddef = PL_defoutgv; 587 PL_defoutgv = NULL; /* disable skip of PL_defoutgv */ 588 if (olddef && isGV_with_GP(olddef)) 589 do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef)); 590 olderr = PL_stderrgv; 591 PL_stderrgv = NULL; /* disable skip of PL_stderrgv */ 592 if (olderr && isGV_with_GP(olderr)) 593 do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr)); 594 SvREFCNT_dec(olddef); 595 PL_in_clean_objs = FALSE; 596 } 597 598 /* called by sv_clean_all() for each live SV */ 599 600 static void 601 do_clean_all(pTHX_ SV *const sv) 602 { 603 dVAR; 604 if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) { 605 /* don't clean pid table and strtab */ 606 return; 607 } 608 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) )); 609 SvFLAGS(sv) |= SVf_BREAK; 610 SvREFCNT_dec_NN(sv); 611 } 612 613 /* 614 =for apidoc sv_clean_all 615 616 Decrement the refcnt of each remaining SV, possibly triggering a 617 cleanup. This function may have to be called multiple times to free 618 SVs which are in complex self-referential hierarchies. 619 620 =cut 621 */ 622 623 I32 624 Perl_sv_clean_all(pTHX) 625 { 626 dVAR; 627 I32 cleaned; 628 PL_in_clean_all = TRUE; 629 cleaned = visit(do_clean_all, 0,0); 630 return cleaned; 631 } 632 633 /* 634 ARENASETS: a meta-arena implementation which separates arena-info 635 into struct arena_set, which contains an array of struct 636 arena_descs, each holding info for a single arena. By separating 637 the meta-info from the arena, we recover the 1st slot, formerly 638 borrowed for list management. The arena_set is about the size of an 639 arena, avoiding the needless malloc overhead of a naive linked-list. 640 641 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused 642 memory in the last arena-set (1/2 on average). In trade, we get 643 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for 644 smaller types). The recovery of the wasted space allows use of 645 small arenas for large, rare body types, by changing array* fields 646 in body_details_by_type[] below. 647 */ 648 struct arena_desc { 649 char *arena; /* the raw storage, allocated aligned */ 650 size_t size; /* its size ~4k typ */ 651 svtype utype; /* bodytype stored in arena */ 652 }; 653 654 struct arena_set; 655 656 /* Get the maximum number of elements in set[] such that struct arena_set 657 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and 658 therefore likely to be 1 aligned memory page. */ 659 660 #define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \ 661 - 2 * sizeof(int)) / sizeof (struct arena_desc)) 662 663 struct arena_set { 664 struct arena_set* next; 665 unsigned int set_size; /* ie ARENAS_PER_SET */ 666 unsigned int curr; /* index of next available arena-desc */ 667 struct arena_desc set[ARENAS_PER_SET]; 668 }; 669 670 /* 671 =for apidoc sv_free_arenas 672 673 Deallocate the memory used by all arenas. Note that all the individual SV 674 heads and bodies within the arenas must already have been freed. 675 676 =cut 677 */ 678 void 679 Perl_sv_free_arenas(pTHX) 680 { 681 dVAR; 682 SV* sva; 683 SV* svanext; 684 unsigned int i; 685 686 /* Free arenas here, but be careful about fake ones. (We assume 687 contiguity of the fake ones with the corresponding real ones.) */ 688 689 for (sva = PL_sv_arenaroot; sva; sva = svanext) { 690 svanext = MUTABLE_SV(SvANY(sva)); 691 while (svanext && SvFAKE(svanext)) 692 svanext = MUTABLE_SV(SvANY(svanext)); 693 694 if (!SvFAKE(sva)) 695 Safefree(sva); 696 } 697 698 { 699 struct arena_set *aroot = (struct arena_set*) PL_body_arenas; 700 701 while (aroot) { 702 struct arena_set *current = aroot; 703 i = aroot->curr; 704 while (i--) { 705 assert(aroot->set[i].arena); 706 Safefree(aroot->set[i].arena); 707 } 708 aroot = aroot->next; 709 Safefree(current); 710 } 711 } 712 PL_body_arenas = 0; 713 714 i = PERL_ARENA_ROOTS_SIZE; 715 while (i--) 716 PL_body_roots[i] = 0; 717 718 PL_sv_arenaroot = 0; 719 PL_sv_root = 0; 720 } 721 722 /* 723 Here are mid-level routines that manage the allocation of bodies out 724 of the various arenas. There are 5 kinds of arenas: 725 726 1. SV-head arenas, which are discussed and handled above 727 2. regular body arenas 728 3. arenas for reduced-size bodies 729 4. Hash-Entry arenas 730 731 Arena types 2 & 3 are chained by body-type off an array of 732 arena-root pointers, which is indexed by svtype. Some of the 733 larger/less used body types are malloced singly, since a large 734 unused block of them is wasteful. Also, several svtypes dont have 735 bodies; the data fits into the sv-head itself. The arena-root 736 pointer thus has a few unused root-pointers (which may be hijacked 737 later for arena types 4,5) 738 739 3 differs from 2 as an optimization; some body types have several 740 unused fields in the front of the structure (which are kept in-place 741 for consistency). These bodies can be allocated in smaller chunks, 742 because the leading fields arent accessed. Pointers to such bodies 743 are decremented to point at the unused 'ghost' memory, knowing that 744 the pointers are used with offsets to the real memory. 745 746 747 =head1 SV-Body Allocation 748 749 Allocation of SV-bodies is similar to SV-heads, differing as follows; 750 the allocation mechanism is used for many body types, so is somewhat 751 more complicated, it uses arena-sets, and has no need for still-live 752 SV detection. 753 754 At the outermost level, (new|del)_X*V macros return bodies of the 755 appropriate type. These macros call either (new|del)_body_type or 756 (new|del)_body_allocated macro pairs, depending on specifics of the 757 type. Most body types use the former pair, the latter pair is used to 758 allocate body types with "ghost fields". 759 760 "ghost fields" are fields that are unused in certain types, and 761 consequently don't need to actually exist. They are declared because 762 they're part of a "base type", which allows use of functions as 763 methods. The simplest examples are AVs and HVs, 2 aggregate types 764 which don't use the fields which support SCALAR semantics. 765 766 For these types, the arenas are carved up into appropriately sized 767 chunks, we thus avoid wasted memory for those unaccessed members. 768 When bodies are allocated, we adjust the pointer back in memory by the 769 size of the part not allocated, so it's as if we allocated the full 770 structure. (But things will all go boom if you write to the part that 771 is "not there", because you'll be overwriting the last members of the 772 preceding structure in memory.) 773 774 We calculate the correction using the STRUCT_OFFSET macro on the first 775 member present. If the allocated structure is smaller (no initial NV 776 actually allocated) then the net effect is to subtract the size of the NV 777 from the pointer, to return a new pointer as if an initial NV were actually 778 allocated. (We were using structures named *_allocated for this, but 779 this turned out to be a subtle bug, because a structure without an NV 780 could have a lower alignment constraint, but the compiler is allowed to 781 optimised accesses based on the alignment constraint of the actual pointer 782 to the full structure, for example, using a single 64 bit load instruction 783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.) 784 785 This is the same trick as was used for NV and IV bodies. Ironically it 786 doesn't need to be used for NV bodies any more, because NV is now at 787 the start of the structure. IV bodies don't need it either, because 788 they are no longer allocated. 789 790 In turn, the new_body_* allocators call S_new_body(), which invokes 791 new_body_inline macro, which takes a lock, and takes a body off the 792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if 793 necessary to refresh an empty list. Then the lock is released, and 794 the body is returned. 795 796 Perl_more_bodies allocates a new arena, and carves it up into an array of N 797 bodies, which it strings into a linked list. It looks up arena-size 798 and body-size from the body_details table described below, thus 799 supporting the multiple body-types. 800 801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and 802 the (new|del)_X*V macros are mapped directly to malloc/free. 803 804 For each sv-type, struct body_details bodies_by_type[] carries 805 parameters which control these aspects of SV handling: 806 807 Arena_size determines whether arenas are used for this body type, and if 808 so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to 809 zero, forcing individual mallocs and frees. 810 811 Body_size determines how big a body is, and therefore how many fit into 812 each arena. Offset carries the body-pointer adjustment needed for 813 "ghost fields", and is used in *_allocated macros. 814 815 But its main purpose is to parameterize info needed in 816 Perl_sv_upgrade(). The info here dramatically simplifies the function 817 vs the implementation in 5.8.8, making it table-driven. All fields 818 are used for this, except for arena_size. 819 820 For the sv-types that have no bodies, arenas are not used, so those 821 PL_body_roots[sv_type] are unused, and can be overloaded. In 822 something of a special case, SVt_NULL is borrowed for HE arenas; 823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the 824 bodies_by_type[SVt_NULL] slot is not used, as the table is not 825 available in hv.c. 826 827 */ 828 829 struct body_details { 830 U8 body_size; /* Size to allocate */ 831 U8 copy; /* Size of structure to copy (may be shorter) */ 832 U8 offset; 833 unsigned int type : 4; /* We have space for a sanity check. */ 834 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */ 835 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */ 836 unsigned int arena : 1; /* Allocated from an arena */ 837 size_t arena_size; /* Size of arena to allocate */ 838 }; 839 840 #define HADNV FALSE 841 #define NONV TRUE 842 843 844 #ifdef PURIFY 845 /* With -DPURFIY we allocate everything directly, and don't use arenas. 846 This seems a rather elegant way to simplify some of the code below. */ 847 #define HASARENA FALSE 848 #else 849 #define HASARENA TRUE 850 #endif 851 #define NOARENA FALSE 852 853 /* Size the arenas to exactly fit a given number of bodies. A count 854 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block, 855 simplifying the default. If count > 0, the arena is sized to fit 856 only that many bodies, allowing arenas to be used for large, rare 857 bodies (XPVFM, XPVIO) without undue waste. The arena size is 858 limited by PERL_ARENA_SIZE, so we can safely oversize the 859 declarations. 860 */ 861 #define FIT_ARENA0(body_size) \ 862 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size) 863 #define FIT_ARENAn(count,body_size) \ 864 ( count * body_size <= PERL_ARENA_SIZE) \ 865 ? count * body_size \ 866 : FIT_ARENA0 (body_size) 867 #define FIT_ARENA(count,body_size) \ 868 count \ 869 ? FIT_ARENAn (count, body_size) \ 870 : FIT_ARENA0 (body_size) 871 872 /* Calculate the length to copy. Specifically work out the length less any 873 final padding the compiler needed to add. See the comment in sv_upgrade 874 for why copying the padding proved to be a bug. */ 875 876 #define copy_length(type, last_member) \ 877 STRUCT_OFFSET(type, last_member) \ 878 + sizeof (((type*)SvANY((const SV *)0))->last_member) 879 880 static const struct body_details bodies_by_type[] = { 881 /* HEs use this offset for their arena. */ 882 { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 }, 883 884 /* The bind placeholder pretends to be an RV for now. 885 Also it's marked as "can't upgrade" to stop anyone using it before it's 886 implemented. */ 887 { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 }, 888 889 /* IVs are in the head, so the allocation size is 0. */ 890 { 0, 891 sizeof(IV), /* This is used to copy out the IV body. */ 892 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV, 893 NOARENA /* IVS don't need an arena */, 0 894 }, 895 896 { sizeof(NV), sizeof(NV), 897 STRUCT_OFFSET(XPVNV, xnv_u), 898 SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) }, 899 900 { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur), 901 copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur), 902 + STRUCT_OFFSET(XPV, xpv_cur), 903 SVt_PV, FALSE, NONV, HASARENA, 904 FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) }, 905 906 { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur), 907 copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur), 908 + STRUCT_OFFSET(XPV, xpv_cur), 909 SVt_PVIV, FALSE, NONV, HASARENA, 910 FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) }, 911 912 { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur), 913 copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur), 914 + STRUCT_OFFSET(XPV, xpv_cur), 915 SVt_PVNV, FALSE, HADNV, HASARENA, 916 FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) }, 917 918 { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV, 919 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) }, 920 921 { sizeof(regexp), 922 sizeof(regexp), 923 0, 924 SVt_REGEXP, FALSE, NONV, HASARENA, 925 FIT_ARENA(0, sizeof(regexp)) 926 }, 927 928 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV, 929 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) }, 930 931 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV, 932 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) }, 933 934 { sizeof(XPVAV), 935 copy_length(XPVAV, xav_alloc), 936 0, 937 SVt_PVAV, TRUE, NONV, HASARENA, 938 FIT_ARENA(0, sizeof(XPVAV)) }, 939 940 { sizeof(XPVHV), 941 copy_length(XPVHV, xhv_max), 942 0, 943 SVt_PVHV, TRUE, NONV, HASARENA, 944 FIT_ARENA(0, sizeof(XPVHV)) }, 945 946 { sizeof(XPVCV), 947 sizeof(XPVCV), 948 0, 949 SVt_PVCV, TRUE, NONV, HASARENA, 950 FIT_ARENA(0, sizeof(XPVCV)) }, 951 952 { sizeof(XPVFM), 953 sizeof(XPVFM), 954 0, 955 SVt_PVFM, TRUE, NONV, NOARENA, 956 FIT_ARENA(20, sizeof(XPVFM)) }, 957 958 { sizeof(XPVIO), 959 sizeof(XPVIO), 960 0, 961 SVt_PVIO, TRUE, NONV, HASARENA, 962 FIT_ARENA(24, sizeof(XPVIO)) }, 963 }; 964 965 #define new_body_allocated(sv_type) \ 966 (void *)((char *)S_new_body(aTHX_ sv_type) \ 967 - bodies_by_type[sv_type].offset) 968 969 /* return a thing to the free list */ 970 971 #define del_body(thing, root) \ 972 STMT_START { \ 973 void ** const thing_copy = (void **)thing; \ 974 *thing_copy = *root; \ 975 *root = (void*)thing_copy; \ 976 } STMT_END 977 978 #ifdef PURIFY 979 980 #define new_XNV() safemalloc(sizeof(XPVNV)) 981 #define new_XPVNV() safemalloc(sizeof(XPVNV)) 982 #define new_XPVMG() safemalloc(sizeof(XPVMG)) 983 984 #define del_XPVGV(p) safefree(p) 985 986 #else /* !PURIFY */ 987 988 #define new_XNV() new_body_allocated(SVt_NV) 989 #define new_XPVNV() new_body_allocated(SVt_PVNV) 990 #define new_XPVMG() new_body_allocated(SVt_PVMG) 991 992 #define del_XPVGV(p) del_body(p + bodies_by_type[SVt_PVGV].offset, \ 993 &PL_body_roots[SVt_PVGV]) 994 995 #endif /* PURIFY */ 996 997 /* no arena for you! */ 998 999 #define new_NOARENA(details) \ 1000 safemalloc((details)->body_size + (details)->offset) 1001 #define new_NOARENAZ(details) \ 1002 safecalloc((details)->body_size + (details)->offset, 1) 1003 1004 void * 1005 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size, 1006 const size_t arena_size) 1007 { 1008 dVAR; 1009 void ** const root = &PL_body_roots[sv_type]; 1010 struct arena_desc *adesc; 1011 struct arena_set *aroot = (struct arena_set *) PL_body_arenas; 1012 unsigned int curr; 1013 char *start; 1014 const char *end; 1015 const size_t good_arena_size = Perl_malloc_good_size(arena_size); 1016 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE) 1017 static bool done_sanity_check; 1018 1019 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global 1020 * variables like done_sanity_check. */ 1021 if (!done_sanity_check) { 1022 unsigned int i = SVt_LAST; 1023 1024 done_sanity_check = TRUE; 1025 1026 while (i--) 1027 assert (bodies_by_type[i].type == i); 1028 } 1029 #endif 1030 1031 assert(arena_size); 1032 1033 /* may need new arena-set to hold new arena */ 1034 if (!aroot || aroot->curr >= aroot->set_size) { 1035 struct arena_set *newroot; 1036 Newxz(newroot, 1, struct arena_set); 1037 newroot->set_size = ARENAS_PER_SET; 1038 newroot->next = aroot; 1039 aroot = newroot; 1040 PL_body_arenas = (void *) newroot; 1041 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot)); 1042 } 1043 1044 /* ok, now have arena-set with at least 1 empty/available arena-desc */ 1045 curr = aroot->curr++; 1046 adesc = &(aroot->set[curr]); 1047 assert(!adesc->arena); 1048 1049 Newx(adesc->arena, good_arena_size, char); 1050 adesc->size = good_arena_size; 1051 adesc->utype = sv_type; 1052 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 1053 curr, (void*)adesc->arena, (UV)good_arena_size)); 1054 1055 start = (char *) adesc->arena; 1056 1057 /* Get the address of the byte after the end of the last body we can fit. 1058 Remember, this is integer division: */ 1059 end = start + good_arena_size / body_size * body_size; 1060 1061 /* computed count doesn't reflect the 1st slot reservation */ 1062 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE) 1063 DEBUG_m(PerlIO_printf(Perl_debug_log, 1064 "arena %p end %p arena-size %d (from %d) type %d " 1065 "size %d ct %d\n", 1066 (void*)start, (void*)end, (int)good_arena_size, 1067 (int)arena_size, sv_type, (int)body_size, 1068 (int)good_arena_size / (int)body_size)); 1069 #else 1070 DEBUG_m(PerlIO_printf(Perl_debug_log, 1071 "arena %p end %p arena-size %d type %d size %d ct %d\n", 1072 (void*)start, (void*)end, 1073 (int)arena_size, sv_type, (int)body_size, 1074 (int)good_arena_size / (int)body_size)); 1075 #endif 1076 *root = (void *)start; 1077 1078 while (1) { 1079 /* Where the next body would start: */ 1080 char * const next = start + body_size; 1081 1082 if (next >= end) { 1083 /* This is the last body: */ 1084 assert(next == end); 1085 1086 *(void **)start = 0; 1087 return *root; 1088 } 1089 1090 *(void**) start = (void *)next; 1091 start = next; 1092 } 1093 } 1094 1095 /* grab a new thing from the free list, allocating more if necessary. 1096 The inline version is used for speed in hot routines, and the 1097 function using it serves the rest (unless PURIFY). 1098 */ 1099 #define new_body_inline(xpv, sv_type) \ 1100 STMT_START { \ 1101 void ** const r3wt = &PL_body_roots[sv_type]; \ 1102 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \ 1103 ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \ 1104 bodies_by_type[sv_type].body_size,\ 1105 bodies_by_type[sv_type].arena_size)); \ 1106 *(r3wt) = *(void**)(xpv); \ 1107 } STMT_END 1108 1109 #ifndef PURIFY 1110 1111 STATIC void * 1112 S_new_body(pTHX_ const svtype sv_type) 1113 { 1114 dVAR; 1115 void *xpv; 1116 new_body_inline(xpv, sv_type); 1117 return xpv; 1118 } 1119 1120 #endif 1121 1122 static const struct body_details fake_rv = 1123 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 }; 1124 1125 /* 1126 =for apidoc sv_upgrade 1127 1128 Upgrade an SV to a more complex form. Generally adds a new body type to the 1129 SV, then copies across as much information as possible from the old body. 1130 It croaks if the SV is already in a more complex form than requested. You 1131 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type 1132 before calling C<sv_upgrade>, and hence does not croak. See also 1133 C<svtype>. 1134 1135 =cut 1136 */ 1137 1138 void 1139 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type) 1140 { 1141 dVAR; 1142 void* old_body; 1143 void* new_body; 1144 const svtype old_type = SvTYPE(sv); 1145 const struct body_details *new_type_details; 1146 const struct body_details *old_type_details 1147 = bodies_by_type + old_type; 1148 SV *referant = NULL; 1149 1150 PERL_ARGS_ASSERT_SV_UPGRADE; 1151 1152 if (old_type == new_type) 1153 return; 1154 1155 /* This clause was purposefully added ahead of the early return above to 1156 the shared string hackery for (sort {$a <=> $b} keys %hash), with the 1157 inference by Nick I-S that it would fix other troublesome cases. See 1158 changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent) 1159 1160 Given that shared hash key scalars are no longer PVIV, but PV, there is 1161 no longer need to unshare so as to free up the IVX slot for its proper 1162 purpose. So it's safe to move the early return earlier. */ 1163 1164 if (new_type > SVt_PVMG && SvIsCOW(sv)) { 1165 sv_force_normal_flags(sv, 0); 1166 } 1167 1168 old_body = SvANY(sv); 1169 1170 /* Copying structures onto other structures that have been neatly zeroed 1171 has a subtle gotcha. Consider XPVMG 1172 1173 +------+------+------+------+------+-------+-------+ 1174 | NV | CUR | LEN | IV | MAGIC | STASH | 1175 +------+------+------+------+------+-------+-------+ 1176 0 4 8 12 16 20 24 28 1177 1178 where NVs are aligned to 8 bytes, so that sizeof that structure is 1179 actually 32 bytes long, with 4 bytes of padding at the end: 1180 1181 +------+------+------+------+------+-------+-------+------+ 1182 | NV | CUR | LEN | IV | MAGIC | STASH | ??? | 1183 +------+------+------+------+------+-------+-------+------+ 1184 0 4 8 12 16 20 24 28 32 1185 1186 so what happens if you allocate memory for this structure: 1187 1188 +------+------+------+------+------+-------+-------+------+------+... 1189 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME | 1190 +------+------+------+------+------+-------+-------+------+------+... 1191 0 4 8 12 16 20 24 28 32 36 1192 1193 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you 1194 expect, because you copy the area marked ??? onto GP. Now, ??? may have 1195 started out as zero once, but it's quite possible that it isn't. So now, 1196 rather than a nicely zeroed GP, you have it pointing somewhere random. 1197 Bugs ensue. 1198 1199 (In fact, GP ends up pointing at a previous GP structure, because the 1200 principle cause of the padding in XPVMG getting garbage is a copy of 1201 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now 1202 this happens to be moot because XPVGV has been re-ordered, with GP 1203 no longer after STASH) 1204 1205 So we are careful and work out the size of used parts of all the 1206 structures. */ 1207 1208 switch (old_type) { 1209 case SVt_NULL: 1210 break; 1211 case SVt_IV: 1212 if (SvROK(sv)) { 1213 referant = SvRV(sv); 1214 old_type_details = &fake_rv; 1215 if (new_type == SVt_NV) 1216 new_type = SVt_PVNV; 1217 } else { 1218 if (new_type < SVt_PVIV) { 1219 new_type = (new_type == SVt_NV) 1220 ? SVt_PVNV : SVt_PVIV; 1221 } 1222 } 1223 break; 1224 case SVt_NV: 1225 if (new_type < SVt_PVNV) { 1226 new_type = SVt_PVNV; 1227 } 1228 break; 1229 case SVt_PV: 1230 assert(new_type > SVt_PV); 1231 assert(SVt_IV < SVt_PV); 1232 assert(SVt_NV < SVt_PV); 1233 break; 1234 case SVt_PVIV: 1235 break; 1236 case SVt_PVNV: 1237 break; 1238 case SVt_PVMG: 1239 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena, 1240 there's no way that it can be safely upgraded, because perl.c 1241 expects to Safefree(SvANY(PL_mess_sv)) */ 1242 assert(sv != PL_mess_sv); 1243 /* This flag bit is used to mean other things in other scalar types. 1244 Given that it only has meaning inside the pad, it shouldn't be set 1245 on anything that can get upgraded. */ 1246 assert(!SvPAD_TYPED(sv)); 1247 break; 1248 default: 1249 if (UNLIKELY(old_type_details->cant_upgrade)) 1250 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf, 1251 sv_reftype(sv, 0), (UV) old_type, (UV) new_type); 1252 } 1253 1254 if (UNLIKELY(old_type > new_type)) 1255 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d", 1256 (int)old_type, (int)new_type); 1257 1258 new_type_details = bodies_by_type + new_type; 1259 1260 SvFLAGS(sv) &= ~SVTYPEMASK; 1261 SvFLAGS(sv) |= new_type; 1262 1263 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of 1264 the return statements above will have triggered. */ 1265 assert (new_type != SVt_NULL); 1266 switch (new_type) { 1267 case SVt_IV: 1268 assert(old_type == SVt_NULL); 1269 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv)); 1270 SvIV_set(sv, 0); 1271 return; 1272 case SVt_NV: 1273 assert(old_type == SVt_NULL); 1274 SvANY(sv) = new_XNV(); 1275 SvNV_set(sv, 0); 1276 return; 1277 case SVt_PVHV: 1278 case SVt_PVAV: 1279 assert(new_type_details->body_size); 1280 1281 #ifndef PURIFY 1282 assert(new_type_details->arena); 1283 assert(new_type_details->arena_size); 1284 /* This points to the start of the allocated area. */ 1285 new_body_inline(new_body, new_type); 1286 Zero(new_body, new_type_details->body_size, char); 1287 new_body = ((char *)new_body) - new_type_details->offset; 1288 #else 1289 /* We always allocated the full length item with PURIFY. To do this 1290 we fake things so that arena is false for all 16 types.. */ 1291 new_body = new_NOARENAZ(new_type_details); 1292 #endif 1293 SvANY(sv) = new_body; 1294 if (new_type == SVt_PVAV) { 1295 AvMAX(sv) = -1; 1296 AvFILLp(sv) = -1; 1297 AvREAL_only(sv); 1298 if (old_type_details->body_size) { 1299 AvALLOC(sv) = 0; 1300 } else { 1301 /* It will have been zeroed when the new body was allocated. 1302 Lets not write to it, in case it confuses a write-back 1303 cache. */ 1304 } 1305 } else { 1306 assert(!SvOK(sv)); 1307 SvOK_off(sv); 1308 #ifndef NODEFAULT_SHAREKEYS 1309 HvSHAREKEYS_on(sv); /* key-sharing on by default */ 1310 #endif 1311 HvMAX(sv) = 7; /* (start with 8 buckets) */ 1312 } 1313 1314 /* SVt_NULL isn't the only thing upgraded to AV or HV. 1315 The target created by newSVrv also is, and it can have magic. 1316 However, it never has SvPVX set. 1317 */ 1318 if (old_type == SVt_IV) { 1319 assert(!SvROK(sv)); 1320 } else if (old_type >= SVt_PV) { 1321 assert(SvPVX_const(sv) == 0); 1322 } 1323 1324 if (old_type >= SVt_PVMG) { 1325 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic); 1326 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash); 1327 } else { 1328 sv->sv_u.svu_array = NULL; /* or svu_hash */ 1329 } 1330 break; 1331 1332 case SVt_PVIV: 1333 /* XXX Is this still needed? Was it ever needed? Surely as there is 1334 no route from NV to PVIV, NOK can never be true */ 1335 assert(!SvNOKp(sv)); 1336 assert(!SvNOK(sv)); 1337 case SVt_PVIO: 1338 case SVt_PVFM: 1339 case SVt_PVGV: 1340 case SVt_PVCV: 1341 case SVt_PVLV: 1342 case SVt_REGEXP: 1343 case SVt_PVMG: 1344 case SVt_PVNV: 1345 case SVt_PV: 1346 1347 assert(new_type_details->body_size); 1348 /* We always allocated the full length item with PURIFY. To do this 1349 we fake things so that arena is false for all 16 types.. */ 1350 if(new_type_details->arena) { 1351 /* This points to the start of the allocated area. */ 1352 new_body_inline(new_body, new_type); 1353 Zero(new_body, new_type_details->body_size, char); 1354 new_body = ((char *)new_body) - new_type_details->offset; 1355 } else { 1356 new_body = new_NOARENAZ(new_type_details); 1357 } 1358 SvANY(sv) = new_body; 1359 1360 if (old_type_details->copy) { 1361 /* There is now the potential for an upgrade from something without 1362 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */ 1363 int offset = old_type_details->offset; 1364 int length = old_type_details->copy; 1365 1366 if (new_type_details->offset > old_type_details->offset) { 1367 const int difference 1368 = new_type_details->offset - old_type_details->offset; 1369 offset += difference; 1370 length -= difference; 1371 } 1372 assert (length >= 0); 1373 1374 Copy((char *)old_body + offset, (char *)new_body + offset, length, 1375 char); 1376 } 1377 1378 #ifndef NV_ZERO_IS_ALLBITS_ZERO 1379 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a 1380 * correct 0.0 for us. Otherwise, if the old body didn't have an 1381 * NV slot, but the new one does, then we need to initialise the 1382 * freshly created NV slot with whatever the correct bit pattern is 1383 * for 0.0 */ 1384 if (old_type_details->zero_nv && !new_type_details->zero_nv 1385 && !isGV_with_GP(sv)) 1386 SvNV_set(sv, 0); 1387 #endif 1388 1389 if (UNLIKELY(new_type == SVt_PVIO)) { 1390 IO * const io = MUTABLE_IO(sv); 1391 GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV); 1392 1393 SvOBJECT_on(io); 1394 /* Clear the stashcache because a new IO could overrule a package 1395 name */ 1396 DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n")); 1397 hv_clear(PL_stashcache); 1398 1399 SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv)))); 1400 IoPAGE_LEN(sv) = 60; 1401 } 1402 if (UNLIKELY(new_type == SVt_REGEXP)) 1403 sv->sv_u.svu_rx = (regexp *)new_body; 1404 else if (old_type < SVt_PV) { 1405 /* referant will be NULL unless the old type was SVt_IV emulating 1406 SVt_RV */ 1407 sv->sv_u.svu_rv = referant; 1408 } 1409 break; 1410 default: 1411 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu", 1412 (unsigned long)new_type); 1413 } 1414 1415 if (old_type > SVt_IV) { 1416 #ifdef PURIFY 1417 safefree(old_body); 1418 #else 1419 /* Note that there is an assumption that all bodies of types that 1420 can be upgraded came from arenas. Only the more complex non- 1421 upgradable types are allowed to be directly malloc()ed. */ 1422 assert(old_type_details->arena); 1423 del_body((void*)((char*)old_body + old_type_details->offset), 1424 &PL_body_roots[old_type]); 1425 #endif 1426 } 1427 } 1428 1429 /* 1430 =for apidoc sv_backoff 1431 1432 Remove any string offset. You should normally use the C<SvOOK_off> macro 1433 wrapper instead. 1434 1435 =cut 1436 */ 1437 1438 int 1439 Perl_sv_backoff(pTHX_ SV *const sv) 1440 { 1441 STRLEN delta; 1442 const char * const s = SvPVX_const(sv); 1443 1444 PERL_ARGS_ASSERT_SV_BACKOFF; 1445 PERL_UNUSED_CONTEXT; 1446 1447 assert(SvOOK(sv)); 1448 assert(SvTYPE(sv) != SVt_PVHV); 1449 assert(SvTYPE(sv) != SVt_PVAV); 1450 1451 SvOOK_offset(sv, delta); 1452 1453 SvLEN_set(sv, SvLEN(sv) + delta); 1454 SvPV_set(sv, SvPVX(sv) - delta); 1455 Move(s, SvPVX(sv), SvCUR(sv)+1, char); 1456 SvFLAGS(sv) &= ~SVf_OOK; 1457 return 0; 1458 } 1459 1460 /* 1461 =for apidoc sv_grow 1462 1463 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and 1464 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer. 1465 Use the C<SvGROW> wrapper instead. 1466 1467 =cut 1468 */ 1469 1470 char * 1471 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen) 1472 { 1473 char *s; 1474 1475 PERL_ARGS_ASSERT_SV_GROW; 1476 1477 if (PL_madskills && newlen >= 0x100000) { 1478 PerlIO_printf(Perl_debug_log, 1479 "Allocation too large: %"UVxf"\n", (UV)newlen); 1480 } 1481 #ifdef HAS_64K_LIMIT 1482 if (newlen >= 0x10000) { 1483 PerlIO_printf(Perl_debug_log, 1484 "Allocation too large: %"UVxf"\n", (UV)newlen); 1485 my_exit(1); 1486 } 1487 #endif /* HAS_64K_LIMIT */ 1488 if (SvROK(sv)) 1489 sv_unref(sv); 1490 if (SvTYPE(sv) < SVt_PV) { 1491 sv_upgrade(sv, SVt_PV); 1492 s = SvPVX_mutable(sv); 1493 } 1494 else if (SvOOK(sv)) { /* pv is offset? */ 1495 sv_backoff(sv); 1496 s = SvPVX_mutable(sv); 1497 if (newlen > SvLEN(sv)) 1498 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */ 1499 #ifdef HAS_64K_LIMIT 1500 if (newlen >= 0x10000) 1501 newlen = 0xFFFF; 1502 #endif 1503 } 1504 else 1505 { 1506 if (SvIsCOW(sv)) sv_force_normal(sv); 1507 s = SvPVX_mutable(sv); 1508 } 1509 1510 if (newlen > SvLEN(sv)) { /* need more room? */ 1511 STRLEN minlen = SvCUR(sv); 1512 minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10; 1513 if (newlen < minlen) 1514 newlen = minlen; 1515 #ifndef Perl_safesysmalloc_size 1516 newlen = PERL_STRLEN_ROUNDUP(newlen); 1517 #endif 1518 if (SvLEN(sv) && s) { 1519 s = (char*)saferealloc(s, newlen); 1520 } 1521 else { 1522 s = (char*)safemalloc(newlen); 1523 if (SvPVX_const(sv) && SvCUR(sv)) { 1524 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char); 1525 } 1526 } 1527 SvPV_set(sv, s); 1528 #ifdef Perl_safesysmalloc_size 1529 /* Do this here, do it once, do it right, and then we will never get 1530 called back into sv_grow() unless there really is some growing 1531 needed. */ 1532 SvLEN_set(sv, Perl_safesysmalloc_size(s)); 1533 #else 1534 SvLEN_set(sv, newlen); 1535 #endif 1536 } 1537 return s; 1538 } 1539 1540 /* 1541 =for apidoc sv_setiv 1542 1543 Copies an integer into the given SV, upgrading first if necessary. 1544 Does not handle 'set' magic. See also C<sv_setiv_mg>. 1545 1546 =cut 1547 */ 1548 1549 void 1550 Perl_sv_setiv(pTHX_ SV *const sv, const IV i) 1551 { 1552 dVAR; 1553 1554 PERL_ARGS_ASSERT_SV_SETIV; 1555 1556 SV_CHECK_THINKFIRST_COW_DROP(sv); 1557 switch (SvTYPE(sv)) { 1558 case SVt_NULL: 1559 case SVt_NV: 1560 sv_upgrade(sv, SVt_IV); 1561 break; 1562 case SVt_PV: 1563 sv_upgrade(sv, SVt_PVIV); 1564 break; 1565 1566 case SVt_PVGV: 1567 if (!isGV_with_GP(sv)) 1568 break; 1569 case SVt_PVAV: 1570 case SVt_PVHV: 1571 case SVt_PVCV: 1572 case SVt_PVFM: 1573 case SVt_PVIO: 1574 /* diag_listed_as: Can't coerce %s to %s in %s */ 1575 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0), 1576 OP_DESC(PL_op)); 1577 default: NOOP; 1578 } 1579 (void)SvIOK_only(sv); /* validate number */ 1580 SvIV_set(sv, i); 1581 SvTAINT(sv); 1582 } 1583 1584 /* 1585 =for apidoc sv_setiv_mg 1586 1587 Like C<sv_setiv>, but also handles 'set' magic. 1588 1589 =cut 1590 */ 1591 1592 void 1593 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i) 1594 { 1595 PERL_ARGS_ASSERT_SV_SETIV_MG; 1596 1597 sv_setiv(sv,i); 1598 SvSETMAGIC(sv); 1599 } 1600 1601 /* 1602 =for apidoc sv_setuv 1603 1604 Copies an unsigned integer into the given SV, upgrading first if necessary. 1605 Does not handle 'set' magic. See also C<sv_setuv_mg>. 1606 1607 =cut 1608 */ 1609 1610 void 1611 Perl_sv_setuv(pTHX_ SV *const sv, const UV u) 1612 { 1613 PERL_ARGS_ASSERT_SV_SETUV; 1614 1615 /* With the if statement to ensure that integers are stored as IVs whenever 1616 possible: 1617 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865 1618 1619 without 1620 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865 1621 1622 If you wish to remove the following if statement, so that this routine 1623 (and its callers) always return UVs, please benchmark to see what the 1624 effect is. Modern CPUs may be different. Or may not :-) 1625 */ 1626 if (u <= (UV)IV_MAX) { 1627 sv_setiv(sv, (IV)u); 1628 return; 1629 } 1630 sv_setiv(sv, 0); 1631 SvIsUV_on(sv); 1632 SvUV_set(sv, u); 1633 } 1634 1635 /* 1636 =for apidoc sv_setuv_mg 1637 1638 Like C<sv_setuv>, but also handles 'set' magic. 1639 1640 =cut 1641 */ 1642 1643 void 1644 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u) 1645 { 1646 PERL_ARGS_ASSERT_SV_SETUV_MG; 1647 1648 sv_setuv(sv,u); 1649 SvSETMAGIC(sv); 1650 } 1651 1652 /* 1653 =for apidoc sv_setnv 1654 1655 Copies a double into the given SV, upgrading first if necessary. 1656 Does not handle 'set' magic. See also C<sv_setnv_mg>. 1657 1658 =cut 1659 */ 1660 1661 void 1662 Perl_sv_setnv(pTHX_ SV *const sv, const NV num) 1663 { 1664 dVAR; 1665 1666 PERL_ARGS_ASSERT_SV_SETNV; 1667 1668 SV_CHECK_THINKFIRST_COW_DROP(sv); 1669 switch (SvTYPE(sv)) { 1670 case SVt_NULL: 1671 case SVt_IV: 1672 sv_upgrade(sv, SVt_NV); 1673 break; 1674 case SVt_PV: 1675 case SVt_PVIV: 1676 sv_upgrade(sv, SVt_PVNV); 1677 break; 1678 1679 case SVt_PVGV: 1680 if (!isGV_with_GP(sv)) 1681 break; 1682 case SVt_PVAV: 1683 case SVt_PVHV: 1684 case SVt_PVCV: 1685 case SVt_PVFM: 1686 case SVt_PVIO: 1687 /* diag_listed_as: Can't coerce %s to %s in %s */ 1688 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0), 1689 OP_DESC(PL_op)); 1690 default: NOOP; 1691 } 1692 SvNV_set(sv, num); 1693 (void)SvNOK_only(sv); /* validate number */ 1694 SvTAINT(sv); 1695 } 1696 1697 /* 1698 =for apidoc sv_setnv_mg 1699 1700 Like C<sv_setnv>, but also handles 'set' magic. 1701 1702 =cut 1703 */ 1704 1705 void 1706 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num) 1707 { 1708 PERL_ARGS_ASSERT_SV_SETNV_MG; 1709 1710 sv_setnv(sv,num); 1711 SvSETMAGIC(sv); 1712 } 1713 1714 /* Print an "isn't numeric" warning, using a cleaned-up, 1715 * printable version of the offending string 1716 */ 1717 1718 STATIC void 1719 S_not_a_number(pTHX_ SV *const sv) 1720 { 1721 dVAR; 1722 SV *dsv; 1723 char tmpbuf[64]; 1724 const char *pv; 1725 1726 PERL_ARGS_ASSERT_NOT_A_NUMBER; 1727 1728 if (DO_UTF8(sv)) { 1729 dsv = newSVpvs_flags("", SVs_TEMP); 1730 pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT); 1731 } else { 1732 char *d = tmpbuf; 1733 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8; 1734 /* each *s can expand to 4 chars + "...\0", 1735 i.e. need room for 8 chars */ 1736 1737 const char *s = SvPVX_const(sv); 1738 const char * const end = s + SvCUR(sv); 1739 for ( ; s < end && d < limit; s++ ) { 1740 int ch = *s & 0xFF; 1741 if (ch & 128 && !isPRINT_LC(ch)) { 1742 *d++ = 'M'; 1743 *d++ = '-'; 1744 ch &= 127; 1745 } 1746 if (ch == '\n') { 1747 *d++ = '\\'; 1748 *d++ = 'n'; 1749 } 1750 else if (ch == '\r') { 1751 *d++ = '\\'; 1752 *d++ = 'r'; 1753 } 1754 else if (ch == '\f') { 1755 *d++ = '\\'; 1756 *d++ = 'f'; 1757 } 1758 else if (ch == '\\') { 1759 *d++ = '\\'; 1760 *d++ = '\\'; 1761 } 1762 else if (ch == '\0') { 1763 *d++ = '\\'; 1764 *d++ = '0'; 1765 } 1766 else if (isPRINT_LC(ch)) 1767 *d++ = ch; 1768 else { 1769 *d++ = '^'; 1770 *d++ = toCTRL(ch); 1771 } 1772 } 1773 if (s < end) { 1774 *d++ = '.'; 1775 *d++ = '.'; 1776 *d++ = '.'; 1777 } 1778 *d = '\0'; 1779 pv = tmpbuf; 1780 } 1781 1782 if (PL_op) 1783 Perl_warner(aTHX_ packWARN(WARN_NUMERIC), 1784 /* diag_listed_as: Argument "%s" isn't numeric%s */ 1785 "Argument \"%s\" isn't numeric in %s", pv, 1786 OP_DESC(PL_op)); 1787 else 1788 Perl_warner(aTHX_ packWARN(WARN_NUMERIC), 1789 /* diag_listed_as: Argument "%s" isn't numeric%s */ 1790 "Argument \"%s\" isn't numeric", pv); 1791 } 1792 1793 /* 1794 =for apidoc looks_like_number 1795 1796 Test if the content of an SV looks like a number (or is a number). 1797 C<Inf> and C<Infinity> are treated as numbers (so will not issue a 1798 non-numeric warning), even if your atof() doesn't grok them. Get-magic is 1799 ignored. 1800 1801 =cut 1802 */ 1803 1804 I32 1805 Perl_looks_like_number(pTHX_ SV *const sv) 1806 { 1807 const char *sbegin; 1808 STRLEN len; 1809 1810 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER; 1811 1812 if (SvPOK(sv) || SvPOKp(sv)) { 1813 sbegin = SvPV_nomg_const(sv, len); 1814 } 1815 else 1816 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK); 1817 return grok_number(sbegin, len, NULL); 1818 } 1819 1820 STATIC bool 1821 S_glob_2number(pTHX_ GV * const gv) 1822 { 1823 PERL_ARGS_ASSERT_GLOB_2NUMBER; 1824 1825 /* We know that all GVs stringify to something that is not-a-number, 1826 so no need to test that. */ 1827 if (ckWARN(WARN_NUMERIC)) 1828 { 1829 SV *const buffer = sv_newmortal(); 1830 gv_efullname3(buffer, gv, "*"); 1831 not_a_number(buffer); 1832 } 1833 /* We just want something true to return, so that S_sv_2iuv_common 1834 can tail call us and return true. */ 1835 return TRUE; 1836 } 1837 1838 /* Actually, ISO C leaves conversion of UV to IV undefined, but 1839 until proven guilty, assume that things are not that bad... */ 1840 1841 /* 1842 NV_PRESERVES_UV: 1843 1844 As 64 bit platforms often have an NV that doesn't preserve all bits of 1845 an IV (an assumption perl has been based on to date) it becomes necessary 1846 to remove the assumption that the NV always carries enough precision to 1847 recreate the IV whenever needed, and that the NV is the canonical form. 1848 Instead, IV/UV and NV need to be given equal rights. So as to not lose 1849 precision as a side effect of conversion (which would lead to insanity 1850 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is 1851 1) to distinguish between IV/UV/NV slots that have cached a valid 1852 conversion where precision was lost and IV/UV/NV slots that have a 1853 valid conversion which has lost no precision 1854 2) to ensure that if a numeric conversion to one form is requested that 1855 would lose precision, the precise conversion (or differently 1856 imprecise conversion) is also performed and cached, to prevent 1857 requests for different numeric formats on the same SV causing 1858 lossy conversion chains. (lossless conversion chains are perfectly 1859 acceptable (still)) 1860 1861 1862 flags are used: 1863 SvIOKp is true if the IV slot contains a valid value 1864 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true) 1865 SvNOKp is true if the NV slot contains a valid value 1866 SvNOK is true only if the NV value is accurate 1867 1868 so 1869 while converting from PV to NV, check to see if converting that NV to an 1870 IV(or UV) would lose accuracy over a direct conversion from PV to 1871 IV(or UV). If it would, cache both conversions, return NV, but mark 1872 SV as IOK NOKp (ie not NOK). 1873 1874 While converting from PV to IV, check to see if converting that IV to an 1875 NV would lose accuracy over a direct conversion from PV to NV. If it 1876 would, cache both conversions, flag similarly. 1877 1878 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite 1879 correctly because if IV & NV were set NV *always* overruled. 1880 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning 1881 changes - now IV and NV together means that the two are interchangeable: 1882 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX; 1883 1884 The benefit of this is that operations such as pp_add know that if 1885 SvIOK is true for both left and right operands, then integer addition 1886 can be used instead of floating point (for cases where the result won't 1887 overflow). Before, floating point was always used, which could lead to 1888 loss of precision compared with integer addition. 1889 1890 * making IV and NV equal status should make maths accurate on 64 bit 1891 platforms 1892 * may speed up maths somewhat if pp_add and friends start to use 1893 integers when possible instead of fp. (Hopefully the overhead in 1894 looking for SvIOK and checking for overflow will not outweigh the 1895 fp to integer speedup) 1896 * will slow down integer operations (callers of SvIV) on "inaccurate" 1897 values, as the change from SvIOK to SvIOKp will cause a call into 1898 sv_2iv each time rather than a macro access direct to the IV slot 1899 * should speed up number->string conversion on integers as IV is 1900 favoured when IV and NV are equally accurate 1901 1902 #################################################################### 1903 You had better be using SvIOK_notUV if you want an IV for arithmetic: 1904 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV. 1905 On the other hand, SvUOK is true iff UV. 1906 #################################################################### 1907 1908 Your mileage will vary depending your CPU's relative fp to integer 1909 performance ratio. 1910 */ 1911 1912 #ifndef NV_PRESERVES_UV 1913 # define IS_NUMBER_UNDERFLOW_IV 1 1914 # define IS_NUMBER_UNDERFLOW_UV 2 1915 # define IS_NUMBER_IV_AND_UV 2 1916 # define IS_NUMBER_OVERFLOW_IV 4 1917 # define IS_NUMBER_OVERFLOW_UV 5 1918 1919 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */ 1920 1921 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */ 1922 STATIC int 1923 S_sv_2iuv_non_preserve(pTHX_ SV *const sv 1924 # ifdef DEBUGGING 1925 , I32 numtype 1926 # endif 1927 ) 1928 { 1929 dVAR; 1930 1931 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE; 1932 1933 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype)); 1934 if (SvNVX(sv) < (NV)IV_MIN) { 1935 (void)SvIOKp_on(sv); 1936 (void)SvNOK_on(sv); 1937 SvIV_set(sv, IV_MIN); 1938 return IS_NUMBER_UNDERFLOW_IV; 1939 } 1940 if (SvNVX(sv) > (NV)UV_MAX) { 1941 (void)SvIOKp_on(sv); 1942 (void)SvNOK_on(sv); 1943 SvIsUV_on(sv); 1944 SvUV_set(sv, UV_MAX); 1945 return IS_NUMBER_OVERFLOW_UV; 1946 } 1947 (void)SvIOKp_on(sv); 1948 (void)SvNOK_on(sv); 1949 /* Can't use strtol etc to convert this string. (See truth table in 1950 sv_2iv */ 1951 if (SvNVX(sv) <= (UV)IV_MAX) { 1952 SvIV_set(sv, I_V(SvNVX(sv))); 1953 if ((NV)(SvIVX(sv)) == SvNVX(sv)) { 1954 SvIOK_on(sv); /* Integer is precise. NOK, IOK */ 1955 } else { 1956 /* Integer is imprecise. NOK, IOKp */ 1957 } 1958 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV; 1959 } 1960 SvIsUV_on(sv); 1961 SvUV_set(sv, U_V(SvNVX(sv))); 1962 if ((NV)(SvUVX(sv)) == SvNVX(sv)) { 1963 if (SvUVX(sv) == UV_MAX) { 1964 /* As we know that NVs don't preserve UVs, UV_MAX cannot 1965 possibly be preserved by NV. Hence, it must be overflow. 1966 NOK, IOKp */ 1967 return IS_NUMBER_OVERFLOW_UV; 1968 } 1969 SvIOK_on(sv); /* Integer is precise. NOK, UOK */ 1970 } else { 1971 /* Integer is imprecise. NOK, IOKp */ 1972 } 1973 return IS_NUMBER_OVERFLOW_IV; 1974 } 1975 #endif /* !NV_PRESERVES_UV*/ 1976 1977 STATIC bool 1978 S_sv_2iuv_common(pTHX_ SV *const sv) 1979 { 1980 dVAR; 1981 1982 PERL_ARGS_ASSERT_SV_2IUV_COMMON; 1983 1984 if (SvNOKp(sv)) { 1985 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv 1986 * without also getting a cached IV/UV from it at the same time 1987 * (ie PV->NV conversion should detect loss of accuracy and cache 1988 * IV or UV at same time to avoid this. */ 1989 /* IV-over-UV optimisation - choose to cache IV if possible */ 1990 1991 if (SvTYPE(sv) == SVt_NV) 1992 sv_upgrade(sv, SVt_PVNV); 1993 1994 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */ 1995 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost 1996 certainly cast into the IV range at IV_MAX, whereas the correct 1997 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary 1998 cases go to UV */ 1999 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan) 2000 if (Perl_isnan(SvNVX(sv))) { 2001 SvUV_set(sv, 0); 2002 SvIsUV_on(sv); 2003 return FALSE; 2004 } 2005 #endif 2006 if (SvNVX(sv) < (NV)IV_MAX + 0.5) { 2007 SvIV_set(sv, I_V(SvNVX(sv))); 2008 if (SvNVX(sv) == (NV) SvIVX(sv) 2009 #ifndef NV_PRESERVES_UV 2010 && (((UV)1 << NV_PRESERVES_UV_BITS) > 2011 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv))) 2012 /* Don't flag it as "accurately an integer" if the number 2013 came from a (by definition imprecise) NV operation, and 2014 we're outside the range of NV integer precision */ 2015 #endif 2016 ) { 2017 if (SvNOK(sv)) 2018 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */ 2019 else { 2020 /* scalar has trailing garbage, eg "42a" */ 2021 } 2022 DEBUG_c(PerlIO_printf(Perl_debug_log, 2023 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n", 2024 PTR2UV(sv), 2025 SvNVX(sv), 2026 SvIVX(sv))); 2027 2028 } else { 2029 /* IV not precise. No need to convert from PV, as NV 2030 conversion would already have cached IV if it detected 2031 that PV->IV would be better than PV->NV->IV 2032 flags already correct - don't set public IOK. */ 2033 DEBUG_c(PerlIO_printf(Perl_debug_log, 2034 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n", 2035 PTR2UV(sv), 2036 SvNVX(sv), 2037 SvIVX(sv))); 2038 } 2039 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN, 2040 but the cast (NV)IV_MIN rounds to a the value less (more 2041 negative) than IV_MIN which happens to be equal to SvNVX ?? 2042 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and 2043 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and 2044 (NV)UVX == NVX are both true, but the values differ. :-( 2045 Hopefully for 2s complement IV_MIN is something like 2046 0x8000000000000000 which will be exact. NWC */ 2047 } 2048 else { 2049 SvUV_set(sv, U_V(SvNVX(sv))); 2050 if ( 2051 (SvNVX(sv) == (NV) SvUVX(sv)) 2052 #ifndef NV_PRESERVES_UV 2053 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */ 2054 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */ 2055 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv)) 2056 /* Don't flag it as "accurately an integer" if the number 2057 came from a (by definition imprecise) NV operation, and 2058 we're outside the range of NV integer precision */ 2059 #endif 2060 && SvNOK(sv) 2061 ) 2062 SvIOK_on(sv); 2063 SvIsUV_on(sv); 2064 DEBUG_c(PerlIO_printf(Perl_debug_log, 2065 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n", 2066 PTR2UV(sv), 2067 SvUVX(sv), 2068 SvUVX(sv))); 2069 } 2070 } 2071 else if (SvPOKp(sv)) { 2072 UV value; 2073 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value); 2074 /* We want to avoid a possible problem when we cache an IV/ a UV which 2075 may be later translated to an NV, and the resulting NV is not 2076 the same as the direct translation of the initial string 2077 (eg 123.456 can shortcut to the IV 123 with atol(), but we must 2078 be careful to ensure that the value with the .456 is around if the 2079 NV value is requested in the future). 2080 2081 This means that if we cache such an IV/a UV, we need to cache the 2082 NV as well. Moreover, we trade speed for space, and do not 2083 cache the NV if we are sure it's not needed. 2084 */ 2085 2086 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */ 2087 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) 2088 == IS_NUMBER_IN_UV) { 2089 /* It's definitely an integer, only upgrade to PVIV */ 2090 if (SvTYPE(sv) < SVt_PVIV) 2091 sv_upgrade(sv, SVt_PVIV); 2092 (void)SvIOK_on(sv); 2093 } else if (SvTYPE(sv) < SVt_PVNV) 2094 sv_upgrade(sv, SVt_PVNV); 2095 2096 /* If NVs preserve UVs then we only use the UV value if we know that 2097 we aren't going to call atof() below. If NVs don't preserve UVs 2098 then the value returned may have more precision than atof() will 2099 return, even though value isn't perfectly accurate. */ 2100 if ((numtype & (IS_NUMBER_IN_UV 2101 #ifdef NV_PRESERVES_UV 2102 | IS_NUMBER_NOT_INT 2103 #endif 2104 )) == IS_NUMBER_IN_UV) { 2105 /* This won't turn off the public IOK flag if it was set above */ 2106 (void)SvIOKp_on(sv); 2107 2108 if (!(numtype & IS_NUMBER_NEG)) { 2109 /* positive */; 2110 if (value <= (UV)IV_MAX) { 2111 SvIV_set(sv, (IV)value); 2112 } else { 2113 /* it didn't overflow, and it was positive. */ 2114 SvUV_set(sv, value); 2115 SvIsUV_on(sv); 2116 } 2117 } else { 2118 /* 2s complement assumption */ 2119 if (value <= (UV)IV_MIN) { 2120 SvIV_set(sv, -(IV)value); 2121 } else { 2122 /* Too negative for an IV. This is a double upgrade, but 2123 I'm assuming it will be rare. */ 2124 if (SvTYPE(sv) < SVt_PVNV) 2125 sv_upgrade(sv, SVt_PVNV); 2126 SvNOK_on(sv); 2127 SvIOK_off(sv); 2128 SvIOKp_on(sv); 2129 SvNV_set(sv, -(NV)value); 2130 SvIV_set(sv, IV_MIN); 2131 } 2132 } 2133 } 2134 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we 2135 will be in the previous block to set the IV slot, and the next 2136 block to set the NV slot. So no else here. */ 2137 2138 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) 2139 != IS_NUMBER_IN_UV) { 2140 /* It wasn't an (integer that doesn't overflow the UV). */ 2141 SvNV_set(sv, Atof(SvPVX_const(sv))); 2142 2143 if (! numtype && ckWARN(WARN_NUMERIC)) 2144 not_a_number(sv); 2145 2146 #if defined(USE_LONG_DOUBLE) 2147 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n", 2148 PTR2UV(sv), SvNVX(sv))); 2149 #else 2150 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n", 2151 PTR2UV(sv), SvNVX(sv))); 2152 #endif 2153 2154 #ifdef NV_PRESERVES_UV 2155 (void)SvIOKp_on(sv); 2156 (void)SvNOK_on(sv); 2157 if (SvNVX(sv) < (NV)IV_MAX + 0.5) { 2158 SvIV_set(sv, I_V(SvNVX(sv))); 2159 if ((NV)(SvIVX(sv)) == SvNVX(sv)) { 2160 SvIOK_on(sv); 2161 } else { 2162 NOOP; /* Integer is imprecise. NOK, IOKp */ 2163 } 2164 /* UV will not work better than IV */ 2165 } else { 2166 if (SvNVX(sv) > (NV)UV_MAX) { 2167 SvIsUV_on(sv); 2168 /* Integer is inaccurate. NOK, IOKp, is UV */ 2169 SvUV_set(sv, UV_MAX); 2170 } else { 2171 SvUV_set(sv, U_V(SvNVX(sv))); 2172 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs 2173 NV preservse UV so can do correct comparison. */ 2174 if ((NV)(SvUVX(sv)) == SvNVX(sv)) { 2175 SvIOK_on(sv); 2176 } else { 2177 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */ 2178 } 2179 } 2180 SvIsUV_on(sv); 2181 } 2182 #else /* NV_PRESERVES_UV */ 2183 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) 2184 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) { 2185 /* The IV/UV slot will have been set from value returned by 2186 grok_number above. The NV slot has just been set using 2187 Atof. */ 2188 SvNOK_on(sv); 2189 assert (SvIOKp(sv)); 2190 } else { 2191 if (((UV)1 << NV_PRESERVES_UV_BITS) > 2192 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) { 2193 /* Small enough to preserve all bits. */ 2194 (void)SvIOKp_on(sv); 2195 SvNOK_on(sv); 2196 SvIV_set(sv, I_V(SvNVX(sv))); 2197 if ((NV)(SvIVX(sv)) == SvNVX(sv)) 2198 SvIOK_on(sv); 2199 /* Assumption: first non-preserved integer is < IV_MAX, 2200 this NV is in the preserved range, therefore: */ 2201 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv)) 2202 < (UV)IV_MAX)) { 2203 Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX); 2204 } 2205 } else { 2206 /* IN_UV NOT_INT 2207 0 0 already failed to read UV. 2208 0 1 already failed to read UV. 2209 1 0 you won't get here in this case. IV/UV 2210 slot set, public IOK, Atof() unneeded. 2211 1 1 already read UV. 2212 so there's no point in sv_2iuv_non_preserve() attempting 2213 to use atol, strtol, strtoul etc. */ 2214 # ifdef DEBUGGING 2215 sv_2iuv_non_preserve (sv, numtype); 2216 # else 2217 sv_2iuv_non_preserve (sv); 2218 # endif 2219 } 2220 } 2221 #endif /* NV_PRESERVES_UV */ 2222 /* It might be more code efficient to go through the entire logic above 2223 and conditionally set with SvIOKp_on() rather than SvIOK(), but it 2224 gets complex and potentially buggy, so more programmer efficient 2225 to do it this way, by turning off the public flags: */ 2226 if (!numtype) 2227 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK); 2228 } 2229 } 2230 else { 2231 if (isGV_with_GP(sv)) 2232 return glob_2number(MUTABLE_GV(sv)); 2233 2234 if (!SvPADTMP(sv)) { 2235 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED)) 2236 report_uninit(sv); 2237 } 2238 if (SvTYPE(sv) < SVt_IV) 2239 /* Typically the caller expects that sv_any is not NULL now. */ 2240 sv_upgrade(sv, SVt_IV); 2241 /* Return 0 from the caller. */ 2242 return TRUE; 2243 } 2244 return FALSE; 2245 } 2246 2247 /* 2248 =for apidoc sv_2iv_flags 2249 2250 Return the integer value of an SV, doing any necessary string 2251 conversion. If flags includes SV_GMAGIC, does an mg_get() first. 2252 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros. 2253 2254 =cut 2255 */ 2256 2257 IV 2258 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags) 2259 { 2260 dVAR; 2261 2262 if (!sv) 2263 return 0; 2264 2265 if (SvGMAGICAL(sv) && (flags & SV_GMAGIC)) 2266 mg_get(sv); 2267 2268 if (SvROK(sv)) { 2269 if (SvAMAGIC(sv)) { 2270 SV * tmpstr; 2271 if (flags & SV_SKIP_OVERLOAD) 2272 return 0; 2273 tmpstr = AMG_CALLunary(sv, numer_amg); 2274 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) { 2275 return SvIV(tmpstr); 2276 } 2277 } 2278 return PTR2IV(SvRV(sv)); 2279 } 2280 2281 if (SvVALID(sv) || isREGEXP(sv)) { 2282 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use 2283 the same flag bit as SVf_IVisUV, so must not let them cache IVs. 2284 In practice they are extremely unlikely to actually get anywhere 2285 accessible by user Perl code - the only way that I'm aware of is when 2286 a constant subroutine which is used as the second argument to index. 2287 2288 Regexps have no SvIVX and SvNVX fields. 2289 */ 2290 assert(isREGEXP(sv) || SvPOKp(sv)); 2291 { 2292 UV value; 2293 const char * const ptr = 2294 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv); 2295 const int numtype 2296 = grok_number(ptr, SvCUR(sv), &value); 2297 2298 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) 2299 == IS_NUMBER_IN_UV) { 2300 /* It's definitely an integer */ 2301 if (numtype & IS_NUMBER_NEG) { 2302 if (value < (UV)IV_MIN) 2303 return -(IV)value; 2304 } else { 2305 if (value < (UV)IV_MAX) 2306 return (IV)value; 2307 } 2308 } 2309 if (!numtype) { 2310 if (ckWARN(WARN_NUMERIC)) 2311 not_a_number(sv); 2312 } 2313 return I_V(Atof(ptr)); 2314 } 2315 } 2316 2317 if (SvTHINKFIRST(sv)) { 2318 #ifdef PERL_OLD_COPY_ON_WRITE 2319 if (SvIsCOW(sv)) { 2320 sv_force_normal_flags(sv, 0); 2321 } 2322 #endif 2323 if (SvREADONLY(sv) && !SvOK(sv)) { 2324 if (ckWARN(WARN_UNINITIALIZED)) 2325 report_uninit(sv); 2326 return 0; 2327 } 2328 } 2329 2330 if (!SvIOKp(sv)) { 2331 if (S_sv_2iuv_common(aTHX_ sv)) 2332 return 0; 2333 } 2334 2335 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n", 2336 PTR2UV(sv),SvIVX(sv))); 2337 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv); 2338 } 2339 2340 /* 2341 =for apidoc sv_2uv_flags 2342 2343 Return the unsigned integer value of an SV, doing any necessary string 2344 conversion. If flags includes SV_GMAGIC, does an mg_get() first. 2345 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros. 2346 2347 =cut 2348 */ 2349 2350 UV 2351 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags) 2352 { 2353 dVAR; 2354 2355 if (!sv) 2356 return 0; 2357 2358 if (SvGMAGICAL(sv) && (flags & SV_GMAGIC)) 2359 mg_get(sv); 2360 2361 if (SvROK(sv)) { 2362 if (SvAMAGIC(sv)) { 2363 SV *tmpstr; 2364 if (flags & SV_SKIP_OVERLOAD) 2365 return 0; 2366 tmpstr = AMG_CALLunary(sv, numer_amg); 2367 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) { 2368 return SvUV(tmpstr); 2369 } 2370 } 2371 return PTR2UV(SvRV(sv)); 2372 } 2373 2374 if (SvVALID(sv) || isREGEXP(sv)) { 2375 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use 2376 the same flag bit as SVf_IVisUV, so must not let them cache IVs. 2377 Regexps have no SvIVX and SvNVX fields. */ 2378 assert(isREGEXP(sv) || SvPOKp(sv)); 2379 { 2380 UV value; 2381 const char * const ptr = 2382 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv); 2383 const int numtype 2384 = grok_number(ptr, SvCUR(sv), &value); 2385 2386 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) 2387 == IS_NUMBER_IN_UV) { 2388 /* It's definitely an integer */ 2389 if (!(numtype & IS_NUMBER_NEG)) 2390 return value; 2391 } 2392 if (!numtype) { 2393 if (ckWARN(WARN_NUMERIC)) 2394 not_a_number(sv); 2395 } 2396 return U_V(Atof(ptr)); 2397 } 2398 } 2399 2400 if (SvTHINKFIRST(sv)) { 2401 #ifdef PERL_OLD_COPY_ON_WRITE 2402 if (SvIsCOW(sv)) { 2403 sv_force_normal_flags(sv, 0); 2404 } 2405 #endif 2406 if (SvREADONLY(sv) && !SvOK(sv)) { 2407 if (ckWARN(WARN_UNINITIALIZED)) 2408 report_uninit(sv); 2409 return 0; 2410 } 2411 } 2412 2413 if (!SvIOKp(sv)) { 2414 if (S_sv_2iuv_common(aTHX_ sv)) 2415 return 0; 2416 } 2417 2418 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n", 2419 PTR2UV(sv),SvUVX(sv))); 2420 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv); 2421 } 2422 2423 /* 2424 =for apidoc sv_2nv_flags 2425 2426 Return the num value of an SV, doing any necessary string or integer 2427 conversion. If flags includes SV_GMAGIC, does an mg_get() first. 2428 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros. 2429 2430 =cut 2431 */ 2432 2433 NV 2434 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags) 2435 { 2436 dVAR; 2437 if (!sv) 2438 return 0.0; 2439 if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) { 2440 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use 2441 the same flag bit as SVf_IVisUV, so must not let them cache NVs. 2442 Regexps have no SvIVX and SvNVX fields. */ 2443 const char *ptr; 2444 if (flags & SV_GMAGIC) 2445 mg_get(sv); 2446 if (SvNOKp(sv)) 2447 return SvNVX(sv); 2448 if (SvPOKp(sv) && !SvIOKp(sv)) { 2449 ptr = SvPVX_const(sv); 2450 grokpv: 2451 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) && 2452 !grok_number(ptr, SvCUR(sv), NULL)) 2453 not_a_number(sv); 2454 return Atof(ptr); 2455 } 2456 if (SvIOKp(sv)) { 2457 if (SvIsUV(sv)) 2458 return (NV)SvUVX(sv); 2459 else 2460 return (NV)SvIVX(sv); 2461 } 2462 if (SvROK(sv)) { 2463 goto return_rok; 2464 } 2465 if (isREGEXP(sv)) { 2466 ptr = RX_WRAPPED((REGEXP *)sv); 2467 goto grokpv; 2468 } 2469 assert(SvTYPE(sv) >= SVt_PVMG); 2470 /* This falls through to the report_uninit near the end of the 2471 function. */ 2472 } else if (SvTHINKFIRST(sv)) { 2473 if (SvROK(sv)) { 2474 return_rok: 2475 if (SvAMAGIC(sv)) { 2476 SV *tmpstr; 2477 if (flags & SV_SKIP_OVERLOAD) 2478 return 0; 2479 tmpstr = AMG_CALLunary(sv, numer_amg); 2480 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) { 2481 return SvNV(tmpstr); 2482 } 2483 } 2484 return PTR2NV(SvRV(sv)); 2485 } 2486 #ifdef PERL_OLD_COPY_ON_WRITE 2487 if (SvIsCOW(sv)) { 2488 sv_force_normal_flags(sv, 0); 2489 } 2490 #endif 2491 if (SvREADONLY(sv) && !SvOK(sv)) { 2492 if (ckWARN(WARN_UNINITIALIZED)) 2493 report_uninit(sv); 2494 return 0.0; 2495 } 2496 } 2497 if (SvTYPE(sv) < SVt_NV) { 2498 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */ 2499 sv_upgrade(sv, SVt_NV); 2500 #ifdef USE_LONG_DOUBLE 2501 DEBUG_c({ 2502 STORE_NUMERIC_LOCAL_SET_STANDARD(); 2503 PerlIO_printf(Perl_debug_log, 2504 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n", 2505 PTR2UV(sv), SvNVX(sv)); 2506 RESTORE_NUMERIC_LOCAL(); 2507 }); 2508 #else 2509 DEBUG_c({ 2510 STORE_NUMERIC_LOCAL_SET_STANDARD(); 2511 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n", 2512 PTR2UV(sv), SvNVX(sv)); 2513 RESTORE_NUMERIC_LOCAL(); 2514 }); 2515 #endif 2516 } 2517 else if (SvTYPE(sv) < SVt_PVNV) 2518 sv_upgrade(sv, SVt_PVNV); 2519 if (SvNOKp(sv)) { 2520 return SvNVX(sv); 2521 } 2522 if (SvIOKp(sv)) { 2523 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv)); 2524 #ifdef NV_PRESERVES_UV 2525 if (SvIOK(sv)) 2526 SvNOK_on(sv); 2527 else 2528 SvNOKp_on(sv); 2529 #else 2530 /* Only set the public NV OK flag if this NV preserves the IV */ 2531 /* Check it's not 0xFFFFFFFFFFFFFFFF */ 2532 if (SvIOK(sv) && 2533 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv)))) 2534 : (SvIVX(sv) == I_V(SvNVX(sv)))) 2535 SvNOK_on(sv); 2536 else 2537 SvNOKp_on(sv); 2538 #endif 2539 } 2540 else if (SvPOKp(sv)) { 2541 UV value; 2542 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value); 2543 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC)) 2544 not_a_number(sv); 2545 #ifdef NV_PRESERVES_UV 2546 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) 2547 == IS_NUMBER_IN_UV) { 2548 /* It's definitely an integer */ 2549 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value); 2550 } else 2551 SvNV_set(sv, Atof(SvPVX_const(sv))); 2552 if (numtype) 2553 SvNOK_on(sv); 2554 else 2555 SvNOKp_on(sv); 2556 #else 2557 SvNV_set(sv, Atof(SvPVX_const(sv))); 2558 /* Only set the public NV OK flag if this NV preserves the value in 2559 the PV at least as well as an IV/UV would. 2560 Not sure how to do this 100% reliably. */ 2561 /* if that shift count is out of range then Configure's test is 2562 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS == 2563 UV_BITS */ 2564 if (((UV)1 << NV_PRESERVES_UV_BITS) > 2565 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) { 2566 SvNOK_on(sv); /* Definitely small enough to preserve all bits */ 2567 } else if (!(numtype & IS_NUMBER_IN_UV)) { 2568 /* Can't use strtol etc to convert this string, so don't try. 2569 sv_2iv and sv_2uv will use the NV to convert, not the PV. */ 2570 SvNOK_on(sv); 2571 } else { 2572 /* value has been set. It may not be precise. */ 2573 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) { 2574 /* 2s complement assumption for (UV)IV_MIN */ 2575 SvNOK_on(sv); /* Integer is too negative. */ 2576 } else { 2577 SvNOKp_on(sv); 2578 SvIOKp_on(sv); 2579 2580 if (numtype & IS_NUMBER_NEG) { 2581 SvIV_set(sv, -(IV)value); 2582 } else if (value <= (UV)IV_MAX) { 2583 SvIV_set(sv, (IV)value); 2584 } else { 2585 SvUV_set(sv, value); 2586 SvIsUV_on(sv); 2587 } 2588 2589 if (numtype & IS_NUMBER_NOT_INT) { 2590 /* I believe that even if the original PV had decimals, 2591 they are lost beyond the limit of the FP precision. 2592 However, neither is canonical, so both only get p 2593 flags. NWC, 2000/11/25 */ 2594 /* Both already have p flags, so do nothing */ 2595 } else { 2596 const NV nv = SvNVX(sv); 2597 if (SvNVX(sv) < (NV)IV_MAX + 0.5) { 2598 if (SvIVX(sv) == I_V(nv)) { 2599 SvNOK_on(sv); 2600 } else { 2601 /* It had no "." so it must be integer. */ 2602 } 2603 SvIOK_on(sv); 2604 } else { 2605 /* between IV_MAX and NV(UV_MAX). 2606 Could be slightly > UV_MAX */ 2607 2608 if (numtype & IS_NUMBER_NOT_INT) { 2609 /* UV and NV both imprecise. */ 2610 } else { 2611 const UV nv_as_uv = U_V(nv); 2612 2613 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) { 2614 SvNOK_on(sv); 2615 } 2616 SvIOK_on(sv); 2617 } 2618 } 2619 } 2620 } 2621 } 2622 /* It might be more code efficient to go through the entire logic above 2623 and conditionally set with SvNOKp_on() rather than SvNOK(), but it 2624 gets complex and potentially buggy, so more programmer efficient 2625 to do it this way, by turning off the public flags: */ 2626 if (!numtype) 2627 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK); 2628 #endif /* NV_PRESERVES_UV */ 2629 } 2630 else { 2631 if (isGV_with_GP(sv)) { 2632 glob_2number(MUTABLE_GV(sv)); 2633 return 0.0; 2634 } 2635 2636 if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED)) 2637 report_uninit(sv); 2638 assert (SvTYPE(sv) >= SVt_NV); 2639 /* Typically the caller expects that sv_any is not NULL now. */ 2640 /* XXX Ilya implies that this is a bug in callers that assume this 2641 and ideally should be fixed. */ 2642 return 0.0; 2643 } 2644 #if defined(USE_LONG_DOUBLE) 2645 DEBUG_c({ 2646 STORE_NUMERIC_LOCAL_SET_STANDARD(); 2647 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n", 2648 PTR2UV(sv), SvNVX(sv)); 2649 RESTORE_NUMERIC_LOCAL(); 2650 }); 2651 #else 2652 DEBUG_c({ 2653 STORE_NUMERIC_LOCAL_SET_STANDARD(); 2654 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n", 2655 PTR2UV(sv), SvNVX(sv)); 2656 RESTORE_NUMERIC_LOCAL(); 2657 }); 2658 #endif 2659 return SvNVX(sv); 2660 } 2661 2662 /* 2663 =for apidoc sv_2num 2664 2665 Return an SV with the numeric value of the source SV, doing any necessary 2666 reference or overload conversion. You must use the C<SvNUM(sv)> macro to 2667 access this function. 2668 2669 =cut 2670 */ 2671 2672 SV * 2673 Perl_sv_2num(pTHX_ SV *const sv) 2674 { 2675 PERL_ARGS_ASSERT_SV_2NUM; 2676 2677 if (!SvROK(sv)) 2678 return sv; 2679 if (SvAMAGIC(sv)) { 2680 SV * const tmpsv = AMG_CALLunary(sv, numer_amg); 2681 TAINT_IF(tmpsv && SvTAINTED(tmpsv)); 2682 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) 2683 return sv_2num(tmpsv); 2684 } 2685 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv)))); 2686 } 2687 2688 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or 2689 * UV as a string towards the end of buf, and return pointers to start and 2690 * end of it. 2691 * 2692 * We assume that buf is at least TYPE_CHARS(UV) long. 2693 */ 2694 2695 static char * 2696 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob) 2697 { 2698 char *ptr = buf + TYPE_CHARS(UV); 2699 char * const ebuf = ptr; 2700 int sign; 2701 2702 PERL_ARGS_ASSERT_UIV_2BUF; 2703 2704 if (is_uv) 2705 sign = 0; 2706 else if (iv >= 0) { 2707 uv = iv; 2708 sign = 0; 2709 } else { 2710 uv = -iv; 2711 sign = 1; 2712 } 2713 do { 2714 *--ptr = '0' + (char)(uv % 10); 2715 } while (uv /= 10); 2716 if (sign) 2717 *--ptr = '-'; 2718 *peob = ebuf; 2719 return ptr; 2720 } 2721 2722 /* 2723 =for apidoc sv_2pv_flags 2724 2725 Returns a pointer to the string value of an SV, and sets *lp to its length. 2726 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a 2727 string if necessary. Normally invoked via the C<SvPV_flags> macro. 2728 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too. 2729 2730 =cut 2731 */ 2732 2733 char * 2734 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags) 2735 { 2736 dVAR; 2737 char *s; 2738 2739 if (!sv) { 2740 if (lp) 2741 *lp = 0; 2742 return (char *)""; 2743 } 2744 if (SvGMAGICAL(sv) && (flags & SV_GMAGIC)) 2745 mg_get(sv); 2746 if (SvROK(sv)) { 2747 if (SvAMAGIC(sv)) { 2748 SV *tmpstr; 2749 if (flags & SV_SKIP_OVERLOAD) 2750 return NULL; 2751 tmpstr = AMG_CALLunary(sv, string_amg); 2752 TAINT_IF(tmpstr && SvTAINTED(tmpstr)); 2753 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) { 2754 /* Unwrap this: */ 2755 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr); 2756 */ 2757 2758 char *pv; 2759 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) { 2760 if (flags & SV_CONST_RETURN) { 2761 pv = (char *) SvPVX_const(tmpstr); 2762 } else { 2763 pv = (flags & SV_MUTABLE_RETURN) 2764 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr); 2765 } 2766 if (lp) 2767 *lp = SvCUR(tmpstr); 2768 } else { 2769 pv = sv_2pv_flags(tmpstr, lp, flags); 2770 } 2771 if (SvUTF8(tmpstr)) 2772 SvUTF8_on(sv); 2773 else 2774 SvUTF8_off(sv); 2775 return pv; 2776 } 2777 } 2778 { 2779 STRLEN len; 2780 char *retval; 2781 char *buffer; 2782 SV *const referent = SvRV(sv); 2783 2784 if (!referent) { 2785 len = 7; 2786 retval = buffer = savepvn("NULLREF", len); 2787 } else if (SvTYPE(referent) == SVt_REGEXP && 2788 (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) || 2789 amagic_is_enabled(string_amg))) { 2790 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent); 2791 2792 assert(re); 2793 2794 /* If the regex is UTF-8 we want the containing scalar to 2795 have an UTF-8 flag too */ 2796 if (RX_UTF8(re)) 2797 SvUTF8_on(sv); 2798 else 2799 SvUTF8_off(sv); 2800 2801 if (lp) 2802 *lp = RX_WRAPLEN(re); 2803 2804 return RX_WRAPPED(re); 2805 } else { 2806 const char *const typestr = sv_reftype(referent, 0); 2807 const STRLEN typelen = strlen(typestr); 2808 UV addr = PTR2UV(referent); 2809 const char *stashname = NULL; 2810 STRLEN stashnamelen = 0; /* hush, gcc */ 2811 const char *buffer_end; 2812 2813 if (SvOBJECT(referent)) { 2814 const HEK *const name = HvNAME_HEK(SvSTASH(referent)); 2815 2816 if (name) { 2817 stashname = HEK_KEY(name); 2818 stashnamelen = HEK_LEN(name); 2819 2820 if (HEK_UTF8(name)) { 2821 SvUTF8_on(sv); 2822 } else { 2823 SvUTF8_off(sv); 2824 } 2825 } else { 2826 stashname = "__ANON__"; 2827 stashnamelen = 8; 2828 } 2829 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */ 2830 + 2 * sizeof(UV) + 2 /* )\0 */; 2831 } else { 2832 len = typelen + 3 /* (0x */ 2833 + 2 * sizeof(UV) + 2 /* )\0 */; 2834 } 2835 2836 Newx(buffer, len, char); 2837 buffer_end = retval = buffer + len; 2838 2839 /* Working backwards */ 2840 *--retval = '\0'; 2841 *--retval = ')'; 2842 do { 2843 *--retval = PL_hexdigit[addr & 15]; 2844 } while (addr >>= 4); 2845 *--retval = 'x'; 2846 *--retval = '0'; 2847 *--retval = '('; 2848 2849 retval -= typelen; 2850 memcpy(retval, typestr, typelen); 2851 2852 if (stashname) { 2853 *--retval = '='; 2854 retval -= stashnamelen; 2855 memcpy(retval, stashname, stashnamelen); 2856 } 2857 /* retval may not necessarily have reached the start of the 2858 buffer here. */ 2859 assert (retval >= buffer); 2860 2861 len = buffer_end - retval - 1; /* -1 for that \0 */ 2862 } 2863 if (lp) 2864 *lp = len; 2865 SAVEFREEPV(buffer); 2866 return retval; 2867 } 2868 } 2869 2870 if (SvPOKp(sv)) { 2871 if (lp) 2872 *lp = SvCUR(sv); 2873 if (flags & SV_MUTABLE_RETURN) 2874 return SvPVX_mutable(sv); 2875 if (flags & SV_CONST_RETURN) 2876 return (char *)SvPVX_const(sv); 2877 return SvPVX(sv); 2878 } 2879 2880 if (SvIOK(sv)) { 2881 /* I'm assuming that if both IV and NV are equally valid then 2882 converting the IV is going to be more efficient */ 2883 const U32 isUIOK = SvIsUV(sv); 2884 char buf[TYPE_CHARS(UV)]; 2885 char *ebuf, *ptr; 2886 STRLEN len; 2887 2888 if (SvTYPE(sv) < SVt_PVIV) 2889 sv_upgrade(sv, SVt_PVIV); 2890 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf); 2891 len = ebuf - ptr; 2892 /* inlined from sv_setpvn */ 2893 s = SvGROW_mutable(sv, len + 1); 2894 Move(ptr, s, len, char); 2895 s += len; 2896 *s = '\0'; 2897 } 2898 else if (SvNOK(sv)) { 2899 if (SvTYPE(sv) < SVt_PVNV) 2900 sv_upgrade(sv, SVt_PVNV); 2901 if (SvNVX(sv) == 0.0) { 2902 s = SvGROW_mutable(sv, 2); 2903 *s++ = '0'; 2904 *s = '\0'; 2905 } else { 2906 dSAVE_ERRNO; 2907 /* The +20 is pure guesswork. Configure test needed. --jhi */ 2908 s = SvGROW_mutable(sv, NV_DIG + 20); 2909 /* some Xenix systems wipe out errno here */ 2910 Gconvert(SvNVX(sv), NV_DIG, 0, s); 2911 RESTORE_ERRNO; 2912 while (*s) s++; 2913 } 2914 #ifdef hcx 2915 if (s[-1] == '.') 2916 *--s = '\0'; 2917 #endif 2918 } 2919 else if (isGV_with_GP(sv)) { 2920 GV *const gv = MUTABLE_GV(sv); 2921 SV *const buffer = sv_newmortal(); 2922 2923 gv_efullname3(buffer, gv, "*"); 2924 2925 assert(SvPOK(buffer)); 2926 if (SvUTF8(buffer)) 2927 SvUTF8_on(sv); 2928 if (lp) 2929 *lp = SvCUR(buffer); 2930 return SvPVX(buffer); 2931 } 2932 else if (isREGEXP(sv)) { 2933 if (lp) *lp = RX_WRAPLEN((REGEXP *)sv); 2934 return RX_WRAPPED((REGEXP *)sv); 2935 } 2936 else { 2937 if (lp) 2938 *lp = 0; 2939 if (flags & SV_UNDEF_RETURNS_NULL) 2940 return NULL; 2941 if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED)) 2942 report_uninit(sv); 2943 /* Typically the caller expects that sv_any is not NULL now. */ 2944 if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV) 2945 sv_upgrade(sv, SVt_PV); 2946 return (char *)""; 2947 } 2948 2949 { 2950 const STRLEN len = s - SvPVX_const(sv); 2951 if (lp) 2952 *lp = len; 2953 SvCUR_set(sv, len); 2954 } 2955 SvPOK_on(sv); 2956 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n", 2957 PTR2UV(sv),SvPVX_const(sv))); 2958 if (flags & SV_CONST_RETURN) 2959 return (char *)SvPVX_const(sv); 2960 if (flags & SV_MUTABLE_RETURN) 2961 return SvPVX_mutable(sv); 2962 return SvPVX(sv); 2963 } 2964 2965 /* 2966 =for apidoc sv_copypv 2967 2968 Copies a stringified representation of the source SV into the 2969 destination SV. Automatically performs any necessary mg_get and 2970 coercion of numeric values into strings. Guaranteed to preserve 2971 UTF8 flag even from overloaded objects. Similar in nature to 2972 sv_2pv[_flags] but operates directly on an SV instead of just the 2973 string. Mostly uses sv_2pv_flags to do its work, except when that 2974 would lose the UTF-8'ness of the PV. 2975 2976 =for apidoc sv_copypv_nomg 2977 2978 Like sv_copypv, but doesn't invoke get magic first. 2979 2980 =for apidoc sv_copypv_flags 2981 2982 Implementation of sv_copypv and sv_copypv_nomg. Calls get magic iff flags 2983 include SV_GMAGIC. 2984 2985 =cut 2986 */ 2987 2988 void 2989 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv) 2990 { 2991 PERL_ARGS_ASSERT_SV_COPYPV; 2992 2993 sv_copypv_flags(dsv, ssv, 0); 2994 } 2995 2996 void 2997 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags) 2998 { 2999 STRLEN len; 3000 const char *s; 3001 3002 PERL_ARGS_ASSERT_SV_COPYPV_FLAGS; 3003 3004 if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv)) 3005 mg_get(ssv); 3006 s = SvPV_nomg_const(ssv,len); 3007 sv_setpvn(dsv,s,len); 3008 if (SvUTF8(ssv)) 3009 SvUTF8_on(dsv); 3010 else 3011 SvUTF8_off(dsv); 3012 } 3013 3014 /* 3015 =for apidoc sv_2pvbyte 3016 3017 Return a pointer to the byte-encoded representation of the SV, and set *lp 3018 to its length. May cause the SV to be downgraded from UTF-8 as a 3019 side-effect. 3020 3021 Usually accessed via the C<SvPVbyte> macro. 3022 3023 =cut 3024 */ 3025 3026 char * 3027 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp) 3028 { 3029 PERL_ARGS_ASSERT_SV_2PVBYTE; 3030 3031 if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv)) 3032 || isGV_with_GP(sv) || SvROK(sv)) { 3033 SV *sv2 = sv_newmortal(); 3034 sv_copypv(sv2,sv); 3035 sv = sv2; 3036 } 3037 else SvGETMAGIC(sv); 3038 sv_utf8_downgrade(sv,0); 3039 return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv); 3040 } 3041 3042 /* 3043 =for apidoc sv_2pvutf8 3044 3045 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp 3046 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect. 3047 3048 Usually accessed via the C<SvPVutf8> macro. 3049 3050 =cut 3051 */ 3052 3053 char * 3054 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp) 3055 { 3056 PERL_ARGS_ASSERT_SV_2PVUTF8; 3057 3058 if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv)) 3059 || isGV_with_GP(sv) || SvROK(sv)) 3060 sv = sv_mortalcopy(sv); 3061 else 3062 SvGETMAGIC(sv); 3063 sv_utf8_upgrade_nomg(sv); 3064 return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv); 3065 } 3066 3067 3068 /* 3069 =for apidoc sv_2bool 3070 3071 This macro is only used by sv_true() or its macro equivalent, and only if 3072 the latter's argument is neither SvPOK, SvIOK nor SvNOK. 3073 It calls sv_2bool_flags with the SV_GMAGIC flag. 3074 3075 =for apidoc sv_2bool_flags 3076 3077 This function is only used by sv_true() and friends, and only if 3078 the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags 3079 contain SV_GMAGIC, then it does an mg_get() first. 3080 3081 3082 =cut 3083 */ 3084 3085 bool 3086 Perl_sv_2bool_flags(pTHX_ SV *const sv, const I32 flags) 3087 { 3088 dVAR; 3089 3090 PERL_ARGS_ASSERT_SV_2BOOL_FLAGS; 3091 3092 if(flags & SV_GMAGIC) SvGETMAGIC(sv); 3093 3094 if (!SvOK(sv)) 3095 return 0; 3096 if (SvROK(sv)) { 3097 if (SvAMAGIC(sv)) { 3098 SV * const tmpsv = AMG_CALLunary(sv, bool__amg); 3099 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) 3100 return cBOOL(SvTRUE(tmpsv)); 3101 } 3102 return SvRV(sv) != 0; 3103 } 3104 return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0); 3105 } 3106 3107 /* 3108 =for apidoc sv_utf8_upgrade 3109 3110 Converts the PV of an SV to its UTF-8-encoded form. 3111 Forces the SV to string form if it is not already. 3112 Will C<mg_get> on C<sv> if appropriate. 3113 Always sets the SvUTF8 flag to avoid future validity checks even 3114 if the whole string is the same in UTF-8 as not. 3115 Returns the number of bytes in the converted string 3116 3117 This is not a general purpose byte encoding to Unicode interface: 3118 use the Encode extension for that. 3119 3120 =for apidoc sv_utf8_upgrade_nomg 3121 3122 Like sv_utf8_upgrade, but doesn't do magic on C<sv>. 3123 3124 =for apidoc sv_utf8_upgrade_flags 3125 3126 Converts the PV of an SV to its UTF-8-encoded form. 3127 Forces the SV to string form if it is not already. 3128 Always sets the SvUTF8 flag to avoid future validity checks even 3129 if all the bytes are invariant in UTF-8. 3130 If C<flags> has C<SV_GMAGIC> bit set, 3131 will C<mg_get> on C<sv> if appropriate, else not. 3132 Returns the number of bytes in the converted string 3133 C<sv_utf8_upgrade> and 3134 C<sv_utf8_upgrade_nomg> are implemented in terms of this function. 3135 3136 This is not a general purpose byte encoding to Unicode interface: 3137 use the Encode extension for that. 3138 3139 =cut 3140 3141 The grow version is currently not externally documented. It adds a parameter, 3142 extra, which is the number of unused bytes the string of 'sv' is guaranteed to 3143 have free after it upon return. This allows the caller to reserve extra space 3144 that it intends to fill, to avoid extra grows. 3145 3146 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE, 3147 which can be used to tell this function to not first check to see if there are 3148 any characters that are different in UTF-8 (variant characters) which would 3149 force it to allocate a new string to sv, but to assume there are. Typically 3150 this flag is used by a routine that has already parsed the string to find that 3151 there are such characters, and passes this information on so that the work 3152 doesn't have to be repeated. 3153 3154 (One might think that the calling routine could pass in the position of the 3155 first such variant, so it wouldn't have to be found again. But that is not the 3156 case, because typically when the caller is likely to use this flag, it won't be 3157 calling this routine unless it finds something that won't fit into a byte. 3158 Otherwise it tries to not upgrade and just use bytes. But some things that 3159 do fit into a byte are variants in utf8, and the caller may not have been 3160 keeping track of these.) 3161 3162 If the routine itself changes the string, it adds a trailing NUL. Such a NUL 3163 isn't guaranteed due to having other routines do the work in some input cases, 3164 or if the input is already flagged as being in utf8. 3165 3166 The speed of this could perhaps be improved for many cases if someone wanted to 3167 write a fast function that counts the number of variant characters in a string, 3168 especially if it could return the position of the first one. 3169 3170 */ 3171 3172 STRLEN 3173 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra) 3174 { 3175 dVAR; 3176 3177 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW; 3178 3179 if (sv == &PL_sv_undef) 3180 return 0; 3181 if (!SvPOK_nog(sv)) { 3182 STRLEN len = 0; 3183 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) { 3184 (void) sv_2pv_flags(sv,&len, flags); 3185 if (SvUTF8(sv)) { 3186 if (extra) SvGROW(sv, SvCUR(sv) + extra); 3187 return len; 3188 } 3189 } else { 3190 (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC); 3191 } 3192 } 3193 3194 if (SvUTF8(sv)) { 3195 if (extra) SvGROW(sv, SvCUR(sv) + extra); 3196 return SvCUR(sv); 3197 } 3198 3199 if (SvIsCOW(sv)) { 3200 sv_force_normal_flags(sv, 0); 3201 } 3202 3203 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) { 3204 sv_recode_to_utf8(sv, PL_encoding); 3205 if (extra) SvGROW(sv, SvCUR(sv) + extra); 3206 return SvCUR(sv); 3207 } 3208 3209 if (SvCUR(sv) == 0) { 3210 if (extra) SvGROW(sv, extra); 3211 } else { /* Assume Latin-1/EBCDIC */ 3212 /* This function could be much more efficient if we 3213 * had a FLAG in SVs to signal if there are any variant 3214 * chars in the PV. Given that there isn't such a flag 3215 * make the loop as fast as possible (although there are certainly ways 3216 * to speed this up, eg. through vectorization) */ 3217 U8 * s = (U8 *) SvPVX_const(sv); 3218 U8 * e = (U8 *) SvEND(sv); 3219 U8 *t = s; 3220 STRLEN two_byte_count = 0; 3221 3222 if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8; 3223 3224 /* See if really will need to convert to utf8. We mustn't rely on our 3225 * incoming SV being well formed and having a trailing '\0', as certain 3226 * code in pp_formline can send us partially built SVs. */ 3227 3228 while (t < e) { 3229 const U8 ch = *t++; 3230 if (NATIVE_IS_INVARIANT(ch)) continue; 3231 3232 t--; /* t already incremented; re-point to first variant */ 3233 two_byte_count = 1; 3234 goto must_be_utf8; 3235 } 3236 3237 /* utf8 conversion not needed because all are invariants. Mark as 3238 * UTF-8 even if no variant - saves scanning loop */ 3239 SvUTF8_on(sv); 3240 if (extra) SvGROW(sv, SvCUR(sv) + extra); 3241 return SvCUR(sv); 3242 3243 must_be_utf8: 3244 3245 /* Here, the string should be converted to utf8, either because of an 3246 * input flag (two_byte_count = 0), or because a character that 3247 * requires 2 bytes was found (two_byte_count = 1). t points either to 3248 * the beginning of the string (if we didn't examine anything), or to 3249 * the first variant. In either case, everything from s to t - 1 will 3250 * occupy only 1 byte each on output. 3251 * 3252 * There are two main ways to convert. One is to create a new string 3253 * and go through the input starting from the beginning, appending each 3254 * converted value onto the new string as we go along. It's probably 3255 * best to allocate enough space in the string for the worst possible 3256 * case rather than possibly running out of space and having to 3257 * reallocate and then copy what we've done so far. Since everything 3258 * from s to t - 1 is invariant, the destination can be initialized 3259 * with these using a fast memory copy 3260 * 3261 * The other way is to figure out exactly how big the string should be 3262 * by parsing the entire input. Then you don't have to make it big 3263 * enough to handle the worst possible case, and more importantly, if 3264 * the string you already have is large enough, you don't have to 3265 * allocate a new string, you can copy the last character in the input 3266 * string to the final position(s) that will be occupied by the 3267 * converted string and go backwards, stopping at t, since everything 3268 * before that is invariant. 3269 * 3270 * There are advantages and disadvantages to each method. 3271 * 3272 * In the first method, we can allocate a new string, do the memory 3273 * copy from the s to t - 1, and then proceed through the rest of the 3274 * string byte-by-byte. 3275 * 3276 * In the second method, we proceed through the rest of the input 3277 * string just calculating how big the converted string will be. Then 3278 * there are two cases: 3279 * 1) if the string has enough extra space to handle the converted 3280 * value. We go backwards through the string, converting until we 3281 * get to the position we are at now, and then stop. If this 3282 * position is far enough along in the string, this method is 3283 * faster than the other method. If the memory copy were the same 3284 * speed as the byte-by-byte loop, that position would be about 3285 * half-way, as at the half-way mark, parsing to the end and back 3286 * is one complete string's parse, the same amount as starting 3287 * over and going all the way through. Actually, it would be 3288 * somewhat less than half-way, as it's faster to just count bytes 3289 * than to also copy, and we don't have the overhead of allocating 3290 * a new string, changing the scalar to use it, and freeing the 3291 * existing one. But if the memory copy is fast, the break-even 3292 * point is somewhere after half way. The counting loop could be 3293 * sped up by vectorization, etc, to move the break-even point 3294 * further towards the beginning. 3295 * 2) if the string doesn't have enough space to handle the converted 3296 * value. A new string will have to be allocated, and one might 3297 * as well, given that, start from the beginning doing the first 3298 * method. We've spent extra time parsing the string and in 3299 * exchange all we've gotten is that we know precisely how big to 3300 * make the new one. Perl is more optimized for time than space, 3301 * so this case is a loser. 3302 * So what I've decided to do is not use the 2nd method unless it is 3303 * guaranteed that a new string won't have to be allocated, assuming 3304 * the worst case. I also decided not to put any more conditions on it 3305 * than this, for now. It seems likely that, since the worst case is 3306 * twice as big as the unknown portion of the string (plus 1), we won't 3307 * be guaranteed enough space, causing us to go to the first method, 3308 * unless the string is short, or the first variant character is near 3309 * the end of it. In either of these cases, it seems best to use the 3310 * 2nd method. The only circumstance I can think of where this would 3311 * be really slower is if the string had once had much more data in it 3312 * than it does now, but there is still a substantial amount in it */ 3313 3314 { 3315 STRLEN invariant_head = t - s; 3316 STRLEN size = invariant_head + (e - t) * 2 + 1 + extra; 3317 if (SvLEN(sv) < size) { 3318 3319 /* Here, have decided to allocate a new string */ 3320 3321 U8 *dst; 3322 U8 *d; 3323 3324 Newx(dst, size, U8); 3325 3326 /* If no known invariants at the beginning of the input string, 3327 * set so starts from there. Otherwise, can use memory copy to 3328 * get up to where we are now, and then start from here */ 3329 3330 if (invariant_head <= 0) { 3331 d = dst; 3332 } else { 3333 Copy(s, dst, invariant_head, char); 3334 d = dst + invariant_head; 3335 } 3336 3337 while (t < e) { 3338 const UV uv = NATIVE8_TO_UNI(*t++); 3339 if (UNI_IS_INVARIANT(uv)) 3340 *d++ = (U8)UNI_TO_NATIVE(uv); 3341 else { 3342 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv); 3343 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv); 3344 } 3345 } 3346 *d = '\0'; 3347 SvPV_free(sv); /* No longer using pre-existing string */ 3348 SvPV_set(sv, (char*)dst); 3349 SvCUR_set(sv, d - dst); 3350 SvLEN_set(sv, size); 3351 } else { 3352 3353 /* Here, have decided to get the exact size of the string. 3354 * Currently this happens only when we know that there is 3355 * guaranteed enough space to fit the converted string, so 3356 * don't have to worry about growing. If two_byte_count is 0, 3357 * then t points to the first byte of the string which hasn't 3358 * been examined yet. Otherwise two_byte_count is 1, and t 3359 * points to the first byte in the string that will expand to 3360 * two. Depending on this, start examining at t or 1 after t. 3361 * */ 3362 3363 U8 *d = t + two_byte_count; 3364 3365 3366 /* Count up the remaining bytes that expand to two */ 3367 3368 while (d < e) { 3369 const U8 chr = *d++; 3370 if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++; 3371 } 3372 3373 /* The string will expand by just the number of bytes that 3374 * occupy two positions. But we are one afterwards because of 3375 * the increment just above. This is the place to put the 3376 * trailing NUL, and to set the length before we decrement */ 3377 3378 d += two_byte_count; 3379 SvCUR_set(sv, d - s); 3380 *d-- = '\0'; 3381 3382 3383 /* Having decremented d, it points to the position to put the 3384 * very last byte of the expanded string. Go backwards through 3385 * the string, copying and expanding as we go, stopping when we 3386 * get to the part that is invariant the rest of the way down */ 3387 3388 e--; 3389 while (e >= t) { 3390 const U8 ch = NATIVE8_TO_UNI(*e--); 3391 if (UNI_IS_INVARIANT(ch)) { 3392 *d-- = UNI_TO_NATIVE(ch); 3393 } else { 3394 *d-- = (U8)UTF8_EIGHT_BIT_LO(ch); 3395 *d-- = (U8)UTF8_EIGHT_BIT_HI(ch); 3396 } 3397 } 3398 } 3399 3400 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) { 3401 /* Update pos. We do it at the end rather than during 3402 * the upgrade, to avoid slowing down the common case 3403 * (upgrade without pos) */ 3404 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global); 3405 if (mg) { 3406 I32 pos = mg->mg_len; 3407 if (pos > 0 && (U32)pos > invariant_head) { 3408 U8 *d = (U8*) SvPVX(sv) + invariant_head; 3409 STRLEN n = (U32)pos - invariant_head; 3410 while (n > 0) { 3411 if (UTF8_IS_START(*d)) 3412 d++; 3413 d++; 3414 n--; 3415 } 3416 mg->mg_len = d - (U8*)SvPVX(sv); 3417 } 3418 } 3419 if ((mg = mg_find(sv, PERL_MAGIC_utf8))) 3420 magic_setutf8(sv,mg); /* clear UTF8 cache */ 3421 } 3422 } 3423 } 3424 3425 /* Mark as UTF-8 even if no variant - saves scanning loop */ 3426 SvUTF8_on(sv); 3427 return SvCUR(sv); 3428 } 3429 3430 /* 3431 =for apidoc sv_utf8_downgrade 3432 3433 Attempts to convert the PV of an SV from characters to bytes. 3434 If the PV contains a character that cannot fit 3435 in a byte, this conversion will fail; 3436 in this case, either returns false or, if C<fail_ok> is not 3437 true, croaks. 3438 3439 This is not a general purpose Unicode to byte encoding interface: 3440 use the Encode extension for that. 3441 3442 =cut 3443 */ 3444 3445 bool 3446 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok) 3447 { 3448 dVAR; 3449 3450 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE; 3451 3452 if (SvPOKp(sv) && SvUTF8(sv)) { 3453 if (SvCUR(sv)) { 3454 U8 *s; 3455 STRLEN len; 3456 int mg_flags = SV_GMAGIC; 3457 3458 if (SvIsCOW(sv)) { 3459 sv_force_normal_flags(sv, 0); 3460 } 3461 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) { 3462 /* update pos */ 3463 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global); 3464 if (mg) { 3465 I32 pos = mg->mg_len; 3466 if (pos > 0) { 3467 sv_pos_b2u(sv, &pos); 3468 mg_flags = 0; /* sv_pos_b2u does get magic */ 3469 mg->mg_len = pos; 3470 } 3471 } 3472 if ((mg = mg_find(sv, PERL_MAGIC_utf8))) 3473 magic_setutf8(sv,mg); /* clear UTF8 cache */ 3474 3475 } 3476 s = (U8 *) SvPV_flags(sv, len, mg_flags); 3477 3478 if (!utf8_to_bytes(s, &len)) { 3479 if (fail_ok) 3480 return FALSE; 3481 else { 3482 if (PL_op) 3483 Perl_croak(aTHX_ "Wide character in %s", 3484 OP_DESC(PL_op)); 3485 else 3486 Perl_croak(aTHX_ "Wide character"); 3487 } 3488 } 3489 SvCUR_set(sv, len); 3490 } 3491 } 3492 SvUTF8_off(sv); 3493 return TRUE; 3494 } 3495 3496 /* 3497 =for apidoc sv_utf8_encode 3498 3499 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8> 3500 flag off so that it looks like octets again. 3501 3502 =cut 3503 */ 3504 3505 void 3506 Perl_sv_utf8_encode(pTHX_ SV *const sv) 3507 { 3508 PERL_ARGS_ASSERT_SV_UTF8_ENCODE; 3509 3510 if (SvREADONLY(sv)) { 3511 sv_force_normal_flags(sv, 0); 3512 } 3513 (void) sv_utf8_upgrade(sv); 3514 SvUTF8_off(sv); 3515 } 3516 3517 /* 3518 =for apidoc sv_utf8_decode 3519 3520 If the PV of the SV is an octet sequence in UTF-8 3521 and contains a multiple-byte character, the C<SvUTF8> flag is turned on 3522 so that it looks like a character. If the PV contains only single-byte 3523 characters, the C<SvUTF8> flag stays off. 3524 Scans PV for validity and returns false if the PV is invalid UTF-8. 3525 3526 =cut 3527 */ 3528 3529 bool 3530 Perl_sv_utf8_decode(pTHX_ SV *const sv) 3531 { 3532 PERL_ARGS_ASSERT_SV_UTF8_DECODE; 3533 3534 if (SvPOKp(sv)) { 3535 const U8 *start, *c; 3536 const U8 *e; 3537 3538 /* The octets may have got themselves encoded - get them back as 3539 * bytes 3540 */ 3541 if (!sv_utf8_downgrade(sv, TRUE)) 3542 return FALSE; 3543 3544 /* it is actually just a matter of turning the utf8 flag on, but 3545 * we want to make sure everything inside is valid utf8 first. 3546 */ 3547 c = start = (const U8 *) SvPVX_const(sv); 3548 if (!is_utf8_string(c, SvCUR(sv))) 3549 return FALSE; 3550 e = (const U8 *) SvEND(sv); 3551 while (c < e) { 3552 const U8 ch = *c++; 3553 if (!UTF8_IS_INVARIANT(ch)) { 3554 SvUTF8_on(sv); 3555 break; 3556 } 3557 } 3558 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) { 3559 /* adjust pos to the start of a UTF8 char sequence */ 3560 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global); 3561 if (mg) { 3562 I32 pos = mg->mg_len; 3563 if (pos > 0) { 3564 for (c = start + pos; c > start; c--) { 3565 if (UTF8_IS_START(*c)) 3566 break; 3567 } 3568 mg->mg_len = c - start; 3569 } 3570 } 3571 if ((mg = mg_find(sv, PERL_MAGIC_utf8))) 3572 magic_setutf8(sv,mg); /* clear UTF8 cache */ 3573 } 3574 } 3575 return TRUE; 3576 } 3577 3578 /* 3579 =for apidoc sv_setsv 3580 3581 Copies the contents of the source SV C<ssv> into the destination SV 3582 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this 3583 function if the source SV needs to be reused. Does not handle 'set' magic. 3584 Loosely speaking, it performs a copy-by-value, obliterating any previous 3585 content of the destination. 3586 3587 You probably want to use one of the assortment of wrappers, such as 3588 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and 3589 C<SvSetMagicSV_nosteal>. 3590 3591 =for apidoc sv_setsv_flags 3592 3593 Copies the contents of the source SV C<ssv> into the destination SV 3594 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this 3595 function if the source SV needs to be reused. Does not handle 'set' magic. 3596 Loosely speaking, it performs a copy-by-value, obliterating any previous 3597 content of the destination. 3598 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on 3599 C<ssv> if appropriate, else not. If the C<flags> 3600 parameter has the C<NOSTEAL> bit set then the 3601 buffers of temps will not be stolen. <sv_setsv> 3602 and C<sv_setsv_nomg> are implemented in terms of this function. 3603 3604 You probably want to use one of the assortment of wrappers, such as 3605 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and 3606 C<SvSetMagicSV_nosteal>. 3607 3608 This is the primary function for copying scalars, and most other 3609 copy-ish functions and macros use this underneath. 3610 3611 =cut 3612 */ 3613 3614 static void 3615 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype) 3616 { 3617 I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */ 3618 HV *old_stash = NULL; 3619 3620 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB; 3621 3622 if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) { 3623 const char * const name = GvNAME(sstr); 3624 const STRLEN len = GvNAMELEN(sstr); 3625 { 3626 if (dtype >= SVt_PV) { 3627 SvPV_free(dstr); 3628 SvPV_set(dstr, 0); 3629 SvLEN_set(dstr, 0); 3630 SvCUR_set(dstr, 0); 3631 } 3632 SvUPGRADE(dstr, SVt_PVGV); 3633 (void)SvOK_off(dstr); 3634 /* We have to turn this on here, even though we turn it off 3635 below, as GvSTASH will fail an assertion otherwise. */ 3636 isGV_with_GP_on(dstr); 3637 } 3638 GvSTASH(dstr) = GvSTASH(sstr); 3639 if (GvSTASH(dstr)) 3640 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr); 3641 gv_name_set(MUTABLE_GV(dstr), name, len, 3642 GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 )); 3643 SvFAKE_on(dstr); /* can coerce to non-glob */ 3644 } 3645 3646 if(GvGP(MUTABLE_GV(sstr))) { 3647 /* If source has method cache entry, clear it */ 3648 if(GvCVGEN(sstr)) { 3649 SvREFCNT_dec(GvCV(sstr)); 3650 GvCV_set(sstr, NULL); 3651 GvCVGEN(sstr) = 0; 3652 } 3653 /* If source has a real method, then a method is 3654 going to change */ 3655 else if( 3656 GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr)) 3657 ) { 3658 mro_changes = 1; 3659 } 3660 } 3661 3662 /* If dest already had a real method, that's a change as well */ 3663 if( 3664 !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr) 3665 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr)) 3666 ) { 3667 mro_changes = 1; 3668 } 3669 3670 /* We don't need to check the name of the destination if it was not a 3671 glob to begin with. */ 3672 if(dtype == SVt_PVGV) { 3673 const char * const name = GvNAME((const GV *)dstr); 3674 if( 3675 strEQ(name,"ISA") 3676 /* The stash may have been detached from the symbol table, so 3677 check its name. */ 3678 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr)) 3679 ) 3680 mro_changes = 2; 3681 else { 3682 const STRLEN len = GvNAMELEN(dstr); 3683 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':') 3684 || (len == 1 && name[0] == ':')) { 3685 mro_changes = 3; 3686 3687 /* Set aside the old stash, so we can reset isa caches on 3688 its subclasses. */ 3689 if((old_stash = GvHV(dstr))) 3690 /* Make sure we do not lose it early. */ 3691 SvREFCNT_inc_simple_void_NN( 3692 sv_2mortal((SV *)old_stash) 3693 ); 3694 } 3695 } 3696 } 3697 3698 gp_free(MUTABLE_GV(dstr)); 3699 isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */ 3700 (void)SvOK_off(dstr); 3701 isGV_with_GP_on(dstr); 3702 GvINTRO_off(dstr); /* one-shot flag */ 3703 GvGP_set(dstr, gp_ref(GvGP(sstr))); 3704 if (SvTAINTED(sstr)) 3705 SvTAINT(dstr); 3706 if (GvIMPORTED(dstr) != GVf_IMPORTED 3707 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) 3708 { 3709 GvIMPORTED_on(dstr); 3710 } 3711 GvMULTI_on(dstr); 3712 if(mro_changes == 2) { 3713 if (GvAV((const GV *)sstr)) { 3714 MAGIC *mg; 3715 SV * const sref = (SV *)GvAV((const GV *)dstr); 3716 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) { 3717 if (SvTYPE(mg->mg_obj) != SVt_PVAV) { 3718 AV * const ary = newAV(); 3719 av_push(ary, mg->mg_obj); /* takes the refcount */ 3720 mg->mg_obj = (SV *)ary; 3721 } 3722 av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr)); 3723 } 3724 else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0); 3725 } 3726 mro_isa_changed_in(GvSTASH(dstr)); 3727 } 3728 else if(mro_changes == 3) { 3729 HV * const stash = GvHV(dstr); 3730 if(old_stash ? (HV *)HvENAME_get(old_stash) : stash) 3731 mro_package_moved( 3732 stash, old_stash, 3733 (GV *)dstr, 0 3734 ); 3735 } 3736 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr)); 3737 return; 3738 } 3739 3740 static void 3741 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr) 3742 { 3743 SV * const sref = SvRV(sstr); 3744 SV *dref; 3745 const int intro = GvINTRO(dstr); 3746 SV **location; 3747 U8 import_flag = 0; 3748 const U32 stype = SvTYPE(sref); 3749 3750 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF; 3751 3752 if (intro) { 3753 GvINTRO_off(dstr); /* one-shot flag */ 3754 GvLINE(dstr) = CopLINE(PL_curcop); 3755 GvEGV(dstr) = MUTABLE_GV(dstr); 3756 } 3757 GvMULTI_on(dstr); 3758 switch (stype) { 3759 case SVt_PVCV: 3760 location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */ 3761 import_flag = GVf_IMPORTED_CV; 3762 goto common; 3763 case SVt_PVHV: 3764 location = (SV **) &GvHV(dstr); 3765 import_flag = GVf_IMPORTED_HV; 3766 goto common; 3767 case SVt_PVAV: 3768 location = (SV **) &GvAV(dstr); 3769 import_flag = GVf_IMPORTED_AV; 3770 goto common; 3771 case SVt_PVIO: 3772 location = (SV **) &GvIOp(dstr); 3773 goto common; 3774 case SVt_PVFM: 3775 location = (SV **) &GvFORM(dstr); 3776 goto common; 3777 default: 3778 location = &GvSV(dstr); 3779 import_flag = GVf_IMPORTED_SV; 3780 common: 3781 if (intro) { 3782 if (stype == SVt_PVCV) { 3783 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/ 3784 if (GvCVGEN(dstr)) { 3785 SvREFCNT_dec(GvCV(dstr)); 3786 GvCV_set(dstr, NULL); 3787 GvCVGEN(dstr) = 0; /* Switch off cacheness. */ 3788 } 3789 } 3790 /* SAVEt_GVSLOT takes more room on the savestack and has more 3791 overhead in leave_scope than SAVEt_GENERIC_SV. But for CVs 3792 leave_scope needs access to the GV so it can reset method 3793 caches. We must use SAVEt_GVSLOT whenever the type is 3794 SVt_PVCV, even if the stash is anonymous, as the stash may 3795 gain a name somehow before leave_scope. */ 3796 if (stype == SVt_PVCV) { 3797 /* There is no save_pushptrptrptr. Creating it for this 3798 one call site would be overkill. So inline the ss add 3799 routines here. */ 3800 dSS_ADD; 3801 SS_ADD_PTR(dstr); 3802 SS_ADD_PTR(location); 3803 SS_ADD_PTR(SvREFCNT_inc(*location)); 3804 SS_ADD_UV(SAVEt_GVSLOT); 3805 SS_ADD_END(4); 3806 } 3807 else SAVEGENERICSV(*location); 3808 } 3809 dref = *location; 3810 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) { 3811 CV* const cv = MUTABLE_CV(*location); 3812 if (cv) { 3813 if (!GvCVGEN((const GV *)dstr) && 3814 (CvROOT(cv) || CvXSUB(cv)) && 3815 /* redundant check that avoids creating the extra SV 3816 most of the time: */ 3817 (CvCONST(cv) || ckWARN(WARN_REDEFINE))) 3818 { 3819 SV * const new_const_sv = 3820 CvCONST((const CV *)sref) 3821 ? cv_const_sv((const CV *)sref) 3822 : NULL; 3823 report_redefined_cv( 3824 sv_2mortal(Perl_newSVpvf(aTHX_ 3825 "%"HEKf"::%"HEKf, 3826 HEKfARG( 3827 HvNAME_HEK(GvSTASH((const GV *)dstr)) 3828 ), 3829 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))) 3830 )), 3831 cv, 3832 CvCONST((const CV *)sref) ? &new_const_sv : NULL 3833 ); 3834 } 3835 if (!intro) 3836 cv_ckproto_len_flags(cv, (const GV *)dstr, 3837 SvPOK(sref) ? CvPROTO(sref) : NULL, 3838 SvPOK(sref) ? CvPROTOLEN(sref) : 0, 3839 SvPOK(sref) ? SvUTF8(sref) : 0); 3840 } 3841 GvCVGEN(dstr) = 0; /* Switch off cacheness. */ 3842 GvASSUMECV_on(dstr); 3843 if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */ 3844 } 3845 *location = SvREFCNT_inc_simple_NN(sref); 3846 if (import_flag && !(GvFLAGS(dstr) & import_flag) 3847 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) { 3848 GvFLAGS(dstr) |= import_flag; 3849 } 3850 if (stype == SVt_PVHV) { 3851 const char * const name = GvNAME((GV*)dstr); 3852 const STRLEN len = GvNAMELEN(dstr); 3853 if ( 3854 ( 3855 (len > 1 && name[len-2] == ':' && name[len-1] == ':') 3856 || (len == 1 && name[0] == ':') 3857 ) 3858 && (!dref || HvENAME_get(dref)) 3859 ) { 3860 mro_package_moved( 3861 (HV *)sref, (HV *)dref, 3862 (GV *)dstr, 0 3863 ); 3864 } 3865 } 3866 else if ( 3867 stype == SVt_PVAV && sref != dref 3868 && strEQ(GvNAME((GV*)dstr), "ISA") 3869 /* The stash may have been detached from the symbol table, so 3870 check its name before doing anything. */ 3871 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr)) 3872 ) { 3873 MAGIC *mg; 3874 MAGIC * const omg = dref && SvSMAGICAL(dref) 3875 ? mg_find(dref, PERL_MAGIC_isa) 3876 : NULL; 3877 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) { 3878 if (SvTYPE(mg->mg_obj) != SVt_PVAV) { 3879 AV * const ary = newAV(); 3880 av_push(ary, mg->mg_obj); /* takes the refcount */ 3881 mg->mg_obj = (SV *)ary; 3882 } 3883 if (omg) { 3884 if (SvTYPE(omg->mg_obj) == SVt_PVAV) { 3885 SV **svp = AvARRAY((AV *)omg->mg_obj); 3886 I32 items = AvFILLp((AV *)omg->mg_obj) + 1; 3887 while (items--) 3888 av_push( 3889 (AV *)mg->mg_obj, 3890 SvREFCNT_inc_simple_NN(*svp++) 3891 ); 3892 } 3893 else 3894 av_push( 3895 (AV *)mg->mg_obj, 3896 SvREFCNT_inc_simple_NN(omg->mg_obj) 3897 ); 3898 } 3899 else 3900 av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr)); 3901 } 3902 else 3903 { 3904 sv_magic( 3905 sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0 3906 ); 3907 mg = mg_find(sref, PERL_MAGIC_isa); 3908 } 3909 /* Since the *ISA assignment could have affected more than 3910 one stash, don't call mro_isa_changed_in directly, but let 3911 magic_clearisa do it for us, as it already has the logic for 3912 dealing with globs vs arrays of globs. */ 3913 assert(mg); 3914 Perl_magic_clearisa(aTHX_ NULL, mg); 3915 } 3916 else if (stype == SVt_PVIO) { 3917 DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n")); 3918 /* It's a cache. It will rebuild itself quite happily. 3919 It's a lot of effort to work out exactly which key (or keys) 3920 might be invalidated by the creation of the this file handle. 3921 */ 3922 hv_clear(PL_stashcache); 3923 } 3924 break; 3925 } 3926 if (!intro) SvREFCNT_dec(dref); 3927 if (SvTAINTED(sstr)) 3928 SvTAINT(dstr); 3929 return; 3930 } 3931 3932 /* Work around compiler warnings about unsigned >= THRESHOLD when thres- 3933 hold is 0. */ 3934 #if SV_COW_THRESHOLD 3935 # define GE_COW_THRESHOLD(len) ((len) >= SV_COW_THRESHOLD) 3936 #else 3937 # define GE_COW_THRESHOLD(len) 1 3938 #endif 3939 #if SV_COWBUF_THRESHOLD 3940 # define GE_COWBUF_THRESHOLD(len) ((len) >= SV_COWBUF_THRESHOLD) 3941 #else 3942 # define GE_COWBUF_THRESHOLD(len) 1 3943 #endif 3944 3945 void 3946 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags) 3947 { 3948 dVAR; 3949 U32 sflags; 3950 int dtype; 3951 svtype stype; 3952 3953 PERL_ARGS_ASSERT_SV_SETSV_FLAGS; 3954 3955 if (sstr == dstr) 3956 return; 3957 3958 if (SvIS_FREED(dstr)) { 3959 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf 3960 " to a freed scalar %p", SVfARG(sstr), (void *)dstr); 3961 } 3962 SV_CHECK_THINKFIRST_COW_DROP(dstr); 3963 if (!sstr) 3964 sstr = &PL_sv_undef; 3965 if (SvIS_FREED(sstr)) { 3966 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p", 3967 (void*)sstr, (void*)dstr); 3968 } 3969 stype = SvTYPE(sstr); 3970 dtype = SvTYPE(dstr); 3971 3972 /* There's a lot of redundancy below but we're going for speed here */ 3973 3974 switch (stype) { 3975 case SVt_NULL: 3976 undef_sstr: 3977 if (dtype != SVt_PVGV && dtype != SVt_PVLV) { 3978 (void)SvOK_off(dstr); 3979 return; 3980 } 3981 break; 3982 case SVt_IV: 3983 if (SvIOK(sstr)) { 3984 switch (dtype) { 3985 case SVt_NULL: 3986 sv_upgrade(dstr, SVt_IV); 3987 break; 3988 case SVt_NV: 3989 case SVt_PV: 3990 sv_upgrade(dstr, SVt_PVIV); 3991 break; 3992 case SVt_PVGV: 3993 case SVt_PVLV: 3994 goto end_of_first_switch; 3995 } 3996 (void)SvIOK_only(dstr); 3997 SvIV_set(dstr, SvIVX(sstr)); 3998 if (SvIsUV(sstr)) 3999 SvIsUV_on(dstr); 4000 /* SvTAINTED can only be true if the SV has taint magic, which in 4001 turn means that the SV type is PVMG (or greater). This is the 4002 case statement for SVt_IV, so this cannot be true (whatever gcov 4003 may say). */ 4004 assert(!SvTAINTED(sstr)); 4005 return; 4006 } 4007 if (!SvROK(sstr)) 4008 goto undef_sstr; 4009 if (dtype < SVt_PV && dtype != SVt_IV) 4010 sv_upgrade(dstr, SVt_IV); 4011 break; 4012 4013 case SVt_NV: 4014 if (SvNOK(sstr)) { 4015 switch (dtype) { 4016 case SVt_NULL: 4017 case SVt_IV: 4018 sv_upgrade(dstr, SVt_NV); 4019 break; 4020 case SVt_PV: 4021 case SVt_PVIV: 4022 sv_upgrade(dstr, SVt_PVNV); 4023 break; 4024 case SVt_PVGV: 4025 case SVt_PVLV: 4026 goto end_of_first_switch; 4027 } 4028 SvNV_set(dstr, SvNVX(sstr)); 4029 (void)SvNOK_only(dstr); 4030 /* SvTAINTED can only be true if the SV has taint magic, which in 4031 turn means that the SV type is PVMG (or greater). This is the 4032 case statement for SVt_NV, so this cannot be true (whatever gcov 4033 may say). */ 4034 assert(!SvTAINTED(sstr)); 4035 return; 4036 } 4037 goto undef_sstr; 4038 4039 case SVt_PV: 4040 if (dtype < SVt_PV) 4041 sv_upgrade(dstr, SVt_PV); 4042 break; 4043 case SVt_PVIV: 4044 if (dtype < SVt_PVIV) 4045 sv_upgrade(dstr, SVt_PVIV); 4046 break; 4047 case SVt_PVNV: 4048 if (dtype < SVt_PVNV) 4049 sv_upgrade(dstr, SVt_PVNV); 4050 break; 4051 default: 4052 { 4053 const char * const type = sv_reftype(sstr,0); 4054 if (PL_op) 4055 /* diag_listed_as: Bizarre copy of %s */ 4056 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op)); 4057 else 4058 Perl_croak(aTHX_ "Bizarre copy of %s", type); 4059 } 4060 break; 4061 4062 case SVt_REGEXP: 4063 upgregexp: 4064 if (dtype < SVt_REGEXP) 4065 { 4066 if (dtype >= SVt_PV) { 4067 SvPV_free(dstr); 4068 SvPV_set(dstr, 0); 4069 SvLEN_set(dstr, 0); 4070 SvCUR_set(dstr, 0); 4071 } 4072 sv_upgrade(dstr, SVt_REGEXP); 4073 } 4074 break; 4075 4076 /* case SVt_BIND: */ 4077 case SVt_PVLV: 4078 case SVt_PVGV: 4079 case SVt_PVMG: 4080 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) { 4081 mg_get(sstr); 4082 if (SvTYPE(sstr) != stype) 4083 stype = SvTYPE(sstr); 4084 } 4085 if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) { 4086 glob_assign_glob(dstr, sstr, dtype); 4087 return; 4088 } 4089 if (stype == SVt_PVLV) 4090 { 4091 if (isREGEXP(sstr)) goto upgregexp; 4092 SvUPGRADE(dstr, SVt_PVNV); 4093 } 4094 else 4095 SvUPGRADE(dstr, (svtype)stype); 4096 } 4097 end_of_first_switch: 4098 4099 /* dstr may have been upgraded. */ 4100 dtype = SvTYPE(dstr); 4101 sflags = SvFLAGS(sstr); 4102 4103 if (dtype == SVt_PVCV) { 4104 /* Assigning to a subroutine sets the prototype. */ 4105 if (SvOK(sstr)) { 4106 STRLEN len; 4107 const char *const ptr = SvPV_const(sstr, len); 4108 4109 SvGROW(dstr, len + 1); 4110 Copy(ptr, SvPVX(dstr), len + 1, char); 4111 SvCUR_set(dstr, len); 4112 SvPOK_only(dstr); 4113 SvFLAGS(dstr) |= sflags & SVf_UTF8; 4114 CvAUTOLOAD_off(dstr); 4115 } else { 4116 SvOK_off(dstr); 4117 } 4118 } 4119 else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) { 4120 const char * const type = sv_reftype(dstr,0); 4121 if (PL_op) 4122 /* diag_listed_as: Cannot copy to %s */ 4123 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op)); 4124 else 4125 Perl_croak(aTHX_ "Cannot copy to %s", type); 4126 } else if (sflags & SVf_ROK) { 4127 if (isGV_with_GP(dstr) 4128 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) { 4129 sstr = SvRV(sstr); 4130 if (sstr == dstr) { 4131 if (GvIMPORTED(dstr) != GVf_IMPORTED 4132 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) 4133 { 4134 GvIMPORTED_on(dstr); 4135 } 4136 GvMULTI_on(dstr); 4137 return; 4138 } 4139 glob_assign_glob(dstr, sstr, dtype); 4140 return; 4141 } 4142 4143 if (dtype >= SVt_PV) { 4144 if (isGV_with_GP(dstr)) { 4145 glob_assign_ref(dstr, sstr); 4146 return; 4147 } 4148 if (SvPVX_const(dstr)) { 4149 SvPV_free(dstr); 4150 SvLEN_set(dstr, 0); 4151 SvCUR_set(dstr, 0); 4152 } 4153 } 4154 (void)SvOK_off(dstr); 4155 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr))); 4156 SvFLAGS(dstr) |= sflags & SVf_ROK; 4157 assert(!(sflags & SVp_NOK)); 4158 assert(!(sflags & SVp_IOK)); 4159 assert(!(sflags & SVf_NOK)); 4160 assert(!(sflags & SVf_IOK)); 4161 } 4162 else if (isGV_with_GP(dstr)) { 4163 if (!(sflags & SVf_OK)) { 4164 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), 4165 "Undefined value assigned to typeglob"); 4166 } 4167 else { 4168 GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV); 4169 if (dstr != (const SV *)gv) { 4170 const char * const name = GvNAME((const GV *)dstr); 4171 const STRLEN len = GvNAMELEN(dstr); 4172 HV *old_stash = NULL; 4173 bool reset_isa = FALSE; 4174 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':') 4175 || (len == 1 && name[0] == ':')) { 4176 /* Set aside the old stash, so we can reset isa caches 4177 on its subclasses. */ 4178 if((old_stash = GvHV(dstr))) { 4179 /* Make sure we do not lose it early. */ 4180 SvREFCNT_inc_simple_void_NN( 4181 sv_2mortal((SV *)old_stash) 4182 ); 4183 } 4184 reset_isa = TRUE; 4185 } 4186 4187 if (GvGP(dstr)) 4188 gp_free(MUTABLE_GV(dstr)); 4189 GvGP_set(dstr, gp_ref(GvGP(gv))); 4190 4191 if (reset_isa) { 4192 HV * const stash = GvHV(dstr); 4193 if( 4194 old_stash ? (HV *)HvENAME_get(old_stash) : stash 4195 ) 4196 mro_package_moved( 4197 stash, old_stash, 4198 (GV *)dstr, 0 4199 ); 4200 } 4201 } 4202 } 4203 } 4204 else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV) 4205 && (stype == SVt_REGEXP || isREGEXP(sstr))) { 4206 reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr); 4207 } 4208 else if (sflags & SVp_POK) { 4209 bool isSwipe = 0; 4210 const STRLEN cur = SvCUR(sstr); 4211 const STRLEN len = SvLEN(sstr); 4212 4213 /* 4214 * Check to see if we can just swipe the string. If so, it's a 4215 * possible small lose on short strings, but a big win on long ones. 4216 * It might even be a win on short strings if SvPVX_const(dstr) 4217 * has to be allocated and SvPVX_const(sstr) has to be freed. 4218 * Likewise if we can set up COW rather than doing an actual copy, we 4219 * drop to the else clause, as the swipe code and the COW setup code 4220 * have much in common. 4221 */ 4222 4223 /* Whichever path we take through the next code, we want this true, 4224 and doing it now facilitates the COW check. */ 4225 (void)SvPOK_only(dstr); 4226 4227 if ( 4228 /* If we're already COW then this clause is not true, and if COW 4229 is allowed then we drop down to the else and make dest COW 4230 with us. If caller hasn't said that we're allowed to COW 4231 shared hash keys then we don't do the COW setup, even if the 4232 source scalar is a shared hash key scalar. */ 4233 (((flags & SV_COW_SHARED_HASH_KEYS) 4234 ? !(sflags & SVf_IsCOW) 4235 #ifdef PERL_NEW_COPY_ON_WRITE 4236 || (len && 4237 ((!GE_COWBUF_THRESHOLD(cur) && SvLEN(dstr) > cur) 4238 /* If this is a regular (non-hek) COW, only so many COW 4239 "copies" are possible. */ 4240 || CowREFCNT(sstr) == SV_COW_REFCNT_MAX)) 4241 #endif 4242 : 1 /* If making a COW copy is forbidden then the behaviour we 4243 desire is as if the source SV isn't actually already 4244 COW, even if it is. So we act as if the source flags 4245 are not COW, rather than actually testing them. */ 4246 ) 4247 #ifndef PERL_ANY_COW 4248 /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic 4249 when PERL_OLD_COPY_ON_WRITE is defined a little wrong. 4250 Conceptually PERL_OLD_COPY_ON_WRITE being defined should 4251 override SV_COW_SHARED_HASH_KEYS, because it means "always COW" 4252 but in turn, it's somewhat dead code, never expected to go 4253 live, but more kept as a placeholder on how to do it better 4254 in a newer implementation. */ 4255 /* If we are COW and dstr is a suitable target then we drop down 4256 into the else and make dest a COW of us. */ 4257 || (SvFLAGS(dstr) & SVf_BREAK) 4258 #endif 4259 ) 4260 && 4261 !(isSwipe = 4262 #ifdef PERL_NEW_COPY_ON_WRITE 4263 /* slated for free anyway (and not COW)? */ 4264 (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP && 4265 #else 4266 (sflags & SVs_TEMP) && /* slated for free anyway? */ 4267 #endif 4268 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */ 4269 (!(flags & SV_NOSTEAL)) && 4270 /* and we're allowed to steal temps */ 4271 SvREFCNT(sstr) == 1 && /* and no other references to it? */ 4272 len) /* and really is a string */ 4273 #ifdef PERL_ANY_COW 4274 && ((flags & SV_COW_SHARED_HASH_KEYS) 4275 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS 4276 # ifdef PERL_OLD_COPY_ON_WRITE 4277 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS 4278 && SvTYPE(sstr) >= SVt_PVIV 4279 # else 4280 && !(SvFLAGS(dstr) & SVf_BREAK) 4281 && !(sflags & SVf_IsCOW) 4282 && GE_COW_THRESHOLD(cur) && cur+1 < len 4283 && (GE_COWBUF_THRESHOLD(cur) || SvLEN(dstr) < cur+1) 4284 # endif 4285 )) 4286 : 1) 4287 #endif 4288 ) { 4289 /* Failed the swipe test, and it's not a shared hash key either. 4290 Have to copy the string. */ 4291 SvGROW(dstr, cur + 1); /* inlined from sv_setpvn */ 4292 Move(SvPVX_const(sstr),SvPVX(dstr),cur,char); 4293 SvCUR_set(dstr, cur); 4294 *SvEND(dstr) = '\0'; 4295 } else { 4296 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always 4297 be true in here. */ 4298 /* Either it's a shared hash key, or it's suitable for 4299 copy-on-write or we can swipe the string. */ 4300 if (DEBUG_C_TEST) { 4301 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n"); 4302 sv_dump(sstr); 4303 sv_dump(dstr); 4304 } 4305 #ifdef PERL_ANY_COW 4306 if (!isSwipe) { 4307 if (!(sflags & SVf_IsCOW)) { 4308 SvIsCOW_on(sstr); 4309 # ifdef PERL_OLD_COPY_ON_WRITE 4310 /* Make the source SV into a loop of 1. 4311 (about to become 2) */ 4312 SV_COW_NEXT_SV_SET(sstr, sstr); 4313 # else 4314 CowREFCNT(sstr) = 0; 4315 # endif 4316 } 4317 } 4318 #endif 4319 /* Initial code is common. */ 4320 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */ 4321 SvPV_free(dstr); 4322 } 4323 4324 if (!isSwipe) { 4325 /* making another shared SV. */ 4326 #ifdef PERL_ANY_COW 4327 if (len) { 4328 # ifdef PERL_OLD_COPY_ON_WRITE 4329 assert (SvTYPE(dstr) >= SVt_PVIV); 4330 /* SvIsCOW_normal */ 4331 /* splice us in between source and next-after-source. */ 4332 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr)); 4333 SV_COW_NEXT_SV_SET(sstr, dstr); 4334 # else 4335 CowREFCNT(sstr)++; 4336 # endif 4337 SvPV_set(dstr, SvPVX_mutable(sstr)); 4338 } else 4339 #endif 4340 { 4341 /* SvIsCOW_shared_hash */ 4342 DEBUG_C(PerlIO_printf(Perl_debug_log, 4343 "Copy on write: Sharing hash\n")); 4344 4345 assert (SvTYPE(dstr) >= SVt_PV); 4346 SvPV_set(dstr, 4347 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))))); 4348 } 4349 SvLEN_set(dstr, len); 4350 SvCUR_set(dstr, cur); 4351 SvIsCOW_on(dstr); 4352 } 4353 else 4354 { /* Passes the swipe test. */ 4355 SvPV_set(dstr, SvPVX_mutable(sstr)); 4356 SvLEN_set(dstr, SvLEN(sstr)); 4357 SvCUR_set(dstr, SvCUR(sstr)); 4358 4359 SvTEMP_off(dstr); 4360 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */ 4361 SvPV_set(sstr, NULL); 4362 SvLEN_set(sstr, 0); 4363 SvCUR_set(sstr, 0); 4364 SvTEMP_off(sstr); 4365 } 4366 } 4367 if (sflags & SVp_NOK) { 4368 SvNV_set(dstr, SvNVX(sstr)); 4369 } 4370 if (sflags & SVp_IOK) { 4371 SvIV_set(dstr, SvIVX(sstr)); 4372 /* Must do this otherwise some other overloaded use of 0x80000000 4373 gets confused. I guess SVpbm_VALID */ 4374 if (sflags & SVf_IVisUV) 4375 SvIsUV_on(dstr); 4376 } 4377 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8); 4378 { 4379 const MAGIC * const smg = SvVSTRING_mg(sstr); 4380 if (smg) { 4381 sv_magic(dstr, NULL, PERL_MAGIC_vstring, 4382 smg->mg_ptr, smg->mg_len); 4383 SvRMAGICAL_on(dstr); 4384 } 4385 } 4386 } 4387 else if (sflags & (SVp_IOK|SVp_NOK)) { 4388 (void)SvOK_off(dstr); 4389 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK); 4390 if (sflags & SVp_IOK) { 4391 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */ 4392 SvIV_set(dstr, SvIVX(sstr)); 4393 } 4394 if (sflags & SVp_NOK) { 4395 SvNV_set(dstr, SvNVX(sstr)); 4396 } 4397 } 4398 else { 4399 if (isGV_with_GP(sstr)) { 4400 gv_efullname3(dstr, MUTABLE_GV(sstr), "*"); 4401 } 4402 else 4403 (void)SvOK_off(dstr); 4404 } 4405 if (SvTAINTED(sstr)) 4406 SvTAINT(dstr); 4407 } 4408 4409 /* 4410 =for apidoc sv_setsv_mg 4411 4412 Like C<sv_setsv>, but also handles 'set' magic. 4413 4414 =cut 4415 */ 4416 4417 void 4418 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr) 4419 { 4420 PERL_ARGS_ASSERT_SV_SETSV_MG; 4421 4422 sv_setsv(dstr,sstr); 4423 SvSETMAGIC(dstr); 4424 } 4425 4426 #ifdef PERL_ANY_COW 4427 # ifdef PERL_OLD_COPY_ON_WRITE 4428 # define SVt_COW SVt_PVIV 4429 # else 4430 # define SVt_COW SVt_PV 4431 # endif 4432 SV * 4433 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr) 4434 { 4435 STRLEN cur = SvCUR(sstr); 4436 STRLEN len = SvLEN(sstr); 4437 char *new_pv; 4438 4439 PERL_ARGS_ASSERT_SV_SETSV_COW; 4440 4441 if (DEBUG_C_TEST) { 4442 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n", 4443 (void*)sstr, (void*)dstr); 4444 sv_dump(sstr); 4445 if (dstr) 4446 sv_dump(dstr); 4447 } 4448 4449 if (dstr) { 4450 if (SvTHINKFIRST(dstr)) 4451 sv_force_normal_flags(dstr, SV_COW_DROP_PV); 4452 else if (SvPVX_const(dstr)) 4453 Safefree(SvPVX_mutable(dstr)); 4454 } 4455 else 4456 new_SV(dstr); 4457 SvUPGRADE(dstr, SVt_COW); 4458 4459 assert (SvPOK(sstr)); 4460 assert (SvPOKp(sstr)); 4461 # ifdef PERL_OLD_COPY_ON_WRITE 4462 assert (!SvIOK(sstr)); 4463 assert (!SvIOKp(sstr)); 4464 assert (!SvNOK(sstr)); 4465 assert (!SvNOKp(sstr)); 4466 # endif 4467 4468 if (SvIsCOW(sstr)) { 4469 4470 if (SvLEN(sstr) == 0) { 4471 /* source is a COW shared hash key. */ 4472 DEBUG_C(PerlIO_printf(Perl_debug_log, 4473 "Fast copy on write: Sharing hash\n")); 4474 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))); 4475 goto common_exit; 4476 } 4477 # ifdef PERL_OLD_COPY_ON_WRITE 4478 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr)); 4479 # else 4480 assert(SvCUR(sstr)+1 < SvLEN(sstr)); 4481 assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX); 4482 # endif 4483 } else { 4484 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS); 4485 SvUPGRADE(sstr, SVt_COW); 4486 SvIsCOW_on(sstr); 4487 DEBUG_C(PerlIO_printf(Perl_debug_log, 4488 "Fast copy on write: Converting sstr to COW\n")); 4489 # ifdef PERL_OLD_COPY_ON_WRITE 4490 SV_COW_NEXT_SV_SET(dstr, sstr); 4491 # else 4492 CowREFCNT(sstr) = 0; 4493 # endif 4494 } 4495 # ifdef PERL_OLD_COPY_ON_WRITE 4496 SV_COW_NEXT_SV_SET(sstr, dstr); 4497 # else 4498 CowREFCNT(sstr)++; 4499 # endif 4500 new_pv = SvPVX_mutable(sstr); 4501 4502 common_exit: 4503 SvPV_set(dstr, new_pv); 4504 SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW); 4505 if (SvUTF8(sstr)) 4506 SvUTF8_on(dstr); 4507 SvLEN_set(dstr, len); 4508 SvCUR_set(dstr, cur); 4509 if (DEBUG_C_TEST) { 4510 sv_dump(dstr); 4511 } 4512 return dstr; 4513 } 4514 #endif 4515 4516 /* 4517 =for apidoc sv_setpvn 4518 4519 Copies a string into an SV. The C<len> parameter indicates the number of 4520 bytes to be copied. If the C<ptr> argument is NULL the SV will become 4521 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>. 4522 4523 =cut 4524 */ 4525 4526 void 4527 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len) 4528 { 4529 dVAR; 4530 char *dptr; 4531 4532 PERL_ARGS_ASSERT_SV_SETPVN; 4533 4534 SV_CHECK_THINKFIRST_COW_DROP(sv); 4535 if (!ptr) { 4536 (void)SvOK_off(sv); 4537 return; 4538 } 4539 else { 4540 /* len is STRLEN which is unsigned, need to copy to signed */ 4541 const IV iv = len; 4542 if (iv < 0) 4543 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %" 4544 IVdf, iv); 4545 } 4546 SvUPGRADE(sv, SVt_PV); 4547 4548 dptr = SvGROW(sv, len + 1); 4549 Move(ptr,dptr,len,char); 4550 dptr[len] = '\0'; 4551 SvCUR_set(sv, len); 4552 (void)SvPOK_only_UTF8(sv); /* validate pointer */ 4553 SvTAINT(sv); 4554 if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv); 4555 } 4556 4557 /* 4558 =for apidoc sv_setpvn_mg 4559 4560 Like C<sv_setpvn>, but also handles 'set' magic. 4561 4562 =cut 4563 */ 4564 4565 void 4566 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len) 4567 { 4568 PERL_ARGS_ASSERT_SV_SETPVN_MG; 4569 4570 sv_setpvn(sv,ptr,len); 4571 SvSETMAGIC(sv); 4572 } 4573 4574 /* 4575 =for apidoc sv_setpv 4576 4577 Copies a string into an SV. The string must be null-terminated. Does not 4578 handle 'set' magic. See C<sv_setpv_mg>. 4579 4580 =cut 4581 */ 4582 4583 void 4584 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr) 4585 { 4586 dVAR; 4587 STRLEN len; 4588 4589 PERL_ARGS_ASSERT_SV_SETPV; 4590 4591 SV_CHECK_THINKFIRST_COW_DROP(sv); 4592 if (!ptr) { 4593 (void)SvOK_off(sv); 4594 return; 4595 } 4596 len = strlen(ptr); 4597 SvUPGRADE(sv, SVt_PV); 4598 4599 SvGROW(sv, len + 1); 4600 Move(ptr,SvPVX(sv),len+1,char); 4601 SvCUR_set(sv, len); 4602 (void)SvPOK_only_UTF8(sv); /* validate pointer */ 4603 SvTAINT(sv); 4604 if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv); 4605 } 4606 4607 /* 4608 =for apidoc sv_setpv_mg 4609 4610 Like C<sv_setpv>, but also handles 'set' magic. 4611 4612 =cut 4613 */ 4614 4615 void 4616 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr) 4617 { 4618 PERL_ARGS_ASSERT_SV_SETPV_MG; 4619 4620 sv_setpv(sv,ptr); 4621 SvSETMAGIC(sv); 4622 } 4623 4624 void 4625 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek) 4626 { 4627 dVAR; 4628 4629 PERL_ARGS_ASSERT_SV_SETHEK; 4630 4631 if (!hek) { 4632 return; 4633 } 4634 4635 if (HEK_LEN(hek) == HEf_SVKEY) { 4636 sv_setsv(sv, *(SV**)HEK_KEY(hek)); 4637 return; 4638 } else { 4639 const int flags = HEK_FLAGS(hek); 4640 if (flags & HVhek_WASUTF8) { 4641 STRLEN utf8_len = HEK_LEN(hek); 4642 char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len); 4643 sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL); 4644 SvUTF8_on(sv); 4645 return; 4646 } else if (flags & HVhek_UNSHARED) { 4647 sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek)); 4648 if (HEK_UTF8(hek)) 4649 SvUTF8_on(sv); 4650 else SvUTF8_off(sv); 4651 return; 4652 } 4653 { 4654 SV_CHECK_THINKFIRST_COW_DROP(sv); 4655 SvUPGRADE(sv, SVt_PV); 4656 Safefree(SvPVX(sv)); 4657 SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek))); 4658 SvCUR_set(sv, HEK_LEN(hek)); 4659 SvLEN_set(sv, 0); 4660 SvIsCOW_on(sv); 4661 SvPOK_on(sv); 4662 if (HEK_UTF8(hek)) 4663 SvUTF8_on(sv); 4664 else SvUTF8_off(sv); 4665 return; 4666 } 4667 } 4668 } 4669 4670 4671 /* 4672 =for apidoc sv_usepvn_flags 4673 4674 Tells an SV to use C<ptr> to find its string value. Normally the 4675 string is stored inside the SV but sv_usepvn allows the SV to use an 4676 outside string. The C<ptr> should point to memory that was allocated 4677 by C<malloc>. It must be the start of a mallocked block 4678 of memory, and not a pointer to the middle of it. The 4679 string length, C<len>, must be supplied. By default 4680 this function will realloc (i.e. move) the memory pointed to by C<ptr>, 4681 so that pointer should not be freed or used by the programmer after 4682 giving it to sv_usepvn, and neither should any pointers from "behind" 4683 that pointer (e.g. ptr + 1) be used. 4684 4685 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> & 4686 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc 4687 will be skipped (i.e. the buffer is actually at least 1 byte longer than 4688 C<len>, and already meets the requirements for storing in C<SvPVX>). 4689 4690 =cut 4691 */ 4692 4693 void 4694 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags) 4695 { 4696 dVAR; 4697 STRLEN allocate; 4698 4699 PERL_ARGS_ASSERT_SV_USEPVN_FLAGS; 4700 4701 SV_CHECK_THINKFIRST_COW_DROP(sv); 4702 SvUPGRADE(sv, SVt_PV); 4703 if (!ptr) { 4704 (void)SvOK_off(sv); 4705 if (flags & SV_SMAGIC) 4706 SvSETMAGIC(sv); 4707 return; 4708 } 4709 if (SvPVX_const(sv)) 4710 SvPV_free(sv); 4711 4712 #ifdef DEBUGGING 4713 if (flags & SV_HAS_TRAILING_NUL) 4714 assert(ptr[len] == '\0'); 4715 #endif 4716 4717 allocate = (flags & SV_HAS_TRAILING_NUL) 4718 ? len + 1 : 4719 #ifdef Perl_safesysmalloc_size 4720 len + 1; 4721 #else 4722 PERL_STRLEN_ROUNDUP(len + 1); 4723 #endif 4724 if (flags & SV_HAS_TRAILING_NUL) { 4725 /* It's long enough - do nothing. 4726 Specifically Perl_newCONSTSUB is relying on this. */ 4727 } else { 4728 #ifdef DEBUGGING 4729 /* Force a move to shake out bugs in callers. */ 4730 char *new_ptr = (char*)safemalloc(allocate); 4731 Copy(ptr, new_ptr, len, char); 4732 PoisonFree(ptr,len,char); 4733 Safefree(ptr); 4734 ptr = new_ptr; 4735 #else 4736 ptr = (char*) saferealloc (ptr, allocate); 4737 #endif 4738 } 4739 #ifdef Perl_safesysmalloc_size 4740 SvLEN_set(sv, Perl_safesysmalloc_size(ptr)); 4741 #else 4742 SvLEN_set(sv, allocate); 4743 #endif 4744 SvCUR_set(sv, len); 4745 SvPV_set(sv, ptr); 4746 if (!(flags & SV_HAS_TRAILING_NUL)) { 4747 ptr[len] = '\0'; 4748 } 4749 (void)SvPOK_only_UTF8(sv); /* validate pointer */ 4750 SvTAINT(sv); 4751 if (flags & SV_SMAGIC) 4752 SvSETMAGIC(sv); 4753 } 4754 4755 #ifdef PERL_OLD_COPY_ON_WRITE 4756 /* Need to do this *after* making the SV normal, as we need the buffer 4757 pointer to remain valid until after we've copied it. If we let go too early, 4758 another thread could invalidate it by unsharing last of the same hash key 4759 (which it can do by means other than releasing copy-on-write Svs) 4760 or by changing the other copy-on-write SVs in the loop. */ 4761 STATIC void 4762 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after) 4763 { 4764 PERL_ARGS_ASSERT_SV_RELEASE_COW; 4765 4766 { /* this SV was SvIsCOW_normal(sv) */ 4767 /* we need to find the SV pointing to us. */ 4768 SV *current = SV_COW_NEXT_SV(after); 4769 4770 if (current == sv) { 4771 /* The SV we point to points back to us (there were only two of us 4772 in the loop.) 4773 Hence other SV is no longer copy on write either. */ 4774 SvIsCOW_off(after); 4775 } else { 4776 /* We need to follow the pointers around the loop. */ 4777 SV *next; 4778 while ((next = SV_COW_NEXT_SV(current)) != sv) { 4779 assert (next); 4780 current = next; 4781 /* don't loop forever if the structure is bust, and we have 4782 a pointer into a closed loop. */ 4783 assert (current != after); 4784 assert (SvPVX_const(current) == pvx); 4785 } 4786 /* Make the SV before us point to the SV after us. */ 4787 SV_COW_NEXT_SV_SET(current, after); 4788 } 4789 } 4790 } 4791 #endif 4792 /* 4793 =for apidoc sv_force_normal_flags 4794 4795 Undo various types of fakery on an SV, where fakery means 4796 "more than" a string: if the PV is a shared string, make 4797 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to 4798 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when 4799 we do the copy, and is also used locally; if this is a 4800 vstring, drop the vstring magic. If C<SV_COW_DROP_PV> is set 4801 then a copy-on-write scalar drops its PV buffer (if any) and becomes 4802 SvPOK_off rather than making a copy. (Used where this 4803 scalar is about to be set to some other value.) In addition, 4804 the C<flags> parameter gets passed to C<sv_unref_flags()> 4805 when unreffing. C<sv_force_normal> calls this function 4806 with flags set to 0. 4807 4808 =cut 4809 */ 4810 4811 void 4812 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags) 4813 { 4814 dVAR; 4815 4816 PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS; 4817 4818 #ifdef PERL_ANY_COW 4819 if (SvREADONLY(sv)) { 4820 if (IN_PERL_RUNTIME) 4821 Perl_croak_no_modify(); 4822 } 4823 else if (SvIsCOW(sv)) { 4824 const char * const pvx = SvPVX_const(sv); 4825 const STRLEN len = SvLEN(sv); 4826 const STRLEN cur = SvCUR(sv); 4827 # ifdef PERL_OLD_COPY_ON_WRITE 4828 /* next COW sv in the loop. If len is 0 then this is a shared-hash 4829 key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as 4830 we'll fail an assertion. */ 4831 SV * const next = len ? SV_COW_NEXT_SV(sv) : 0; 4832 # endif 4833 4834 if (DEBUG_C_TEST) { 4835 PerlIO_printf(Perl_debug_log, 4836 "Copy on write: Force normal %ld\n", 4837 (long) flags); 4838 sv_dump(sv); 4839 } 4840 SvIsCOW_off(sv); 4841 # ifdef PERL_NEW_COPY_ON_WRITE 4842 if (len && CowREFCNT(sv) == 0) 4843 /* We own the buffer ourselves. */ 4844 NOOP; 4845 else 4846 # endif 4847 { 4848 4849 /* This SV doesn't own the buffer, so need to Newx() a new one: */ 4850 # ifdef PERL_NEW_COPY_ON_WRITE 4851 /* Must do this first, since the macro uses SvPVX. */ 4852 if (len) CowREFCNT(sv)--; 4853 # endif 4854 SvPV_set(sv, NULL); 4855 SvLEN_set(sv, 0); 4856 if (flags & SV_COW_DROP_PV) { 4857 /* OK, so we don't need to copy our buffer. */ 4858 SvPOK_off(sv); 4859 } else { 4860 SvGROW(sv, cur + 1); 4861 Move(pvx,SvPVX(sv),cur,char); 4862 SvCUR_set(sv, cur); 4863 *SvEND(sv) = '\0'; 4864 } 4865 if (len) { 4866 # ifdef PERL_OLD_COPY_ON_WRITE 4867 sv_release_COW(sv, pvx, next); 4868 # endif 4869 } else { 4870 unshare_hek(SvSHARED_HEK_FROM_PV(pvx)); 4871 } 4872 if (DEBUG_C_TEST) { 4873 sv_dump(sv); 4874 } 4875 } 4876 } 4877 #else 4878 if (SvREADONLY(sv)) { 4879 if (IN_PERL_RUNTIME) 4880 Perl_croak_no_modify(); 4881 } 4882 else 4883 if (SvIsCOW(sv)) { 4884 const char * const pvx = SvPVX_const(sv); 4885 const STRLEN len = SvCUR(sv); 4886 SvIsCOW_off(sv); 4887 SvPV_set(sv, NULL); 4888 SvLEN_set(sv, 0); 4889 if (flags & SV_COW_DROP_PV) { 4890 /* OK, so we don't need to copy our buffer. */ 4891 SvPOK_off(sv); 4892 } else { 4893 SvGROW(sv, len + 1); 4894 Move(pvx,SvPVX(sv),len,char); 4895 *SvEND(sv) = '\0'; 4896 } 4897 unshare_hek(SvSHARED_HEK_FROM_PV(pvx)); 4898 } 4899 #endif 4900 if (SvROK(sv)) 4901 sv_unref_flags(sv, flags); 4902 else if (SvFAKE(sv) && isGV_with_GP(sv)) 4903 sv_unglob(sv, flags); 4904 else if (SvFAKE(sv) && isREGEXP(sv)) { 4905 /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous 4906 to sv_unglob. We only need it here, so inline it. */ 4907 const bool islv = SvTYPE(sv) == SVt_PVLV; 4908 const svtype new_type = 4909 islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV; 4910 SV *const temp = newSV_type(new_type); 4911 regexp *const temp_p = ReANY((REGEXP *)sv); 4912 4913 if (new_type == SVt_PVMG) { 4914 SvMAGIC_set(temp, SvMAGIC(sv)); 4915 SvMAGIC_set(sv, NULL); 4916 SvSTASH_set(temp, SvSTASH(sv)); 4917 SvSTASH_set(sv, NULL); 4918 } 4919 if (!islv) SvCUR_set(temp, SvCUR(sv)); 4920 /* Remember that SvPVX is in the head, not the body. But 4921 RX_WRAPPED is in the body. */ 4922 assert(ReANY((REGEXP *)sv)->mother_re); 4923 /* Their buffer is already owned by someone else. */ 4924 if (flags & SV_COW_DROP_PV) { 4925 /* SvLEN is already 0. For SVt_REGEXP, we have a brand new 4926 zeroed body. For SVt_PVLV, it should have been set to 0 4927 before turning into a regexp. */ 4928 assert(!SvLEN(islv ? sv : temp)); 4929 sv->sv_u.svu_pv = 0; 4930 } 4931 else { 4932 sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv)); 4933 SvLEN_set(islv ? sv : temp, SvCUR(sv)+1); 4934 SvPOK_on(sv); 4935 } 4936 4937 /* Now swap the rest of the bodies. */ 4938 4939 SvFAKE_off(sv); 4940 if (!islv) { 4941 SvFLAGS(sv) &= ~SVTYPEMASK; 4942 SvFLAGS(sv) |= new_type; 4943 SvANY(sv) = SvANY(temp); 4944 } 4945 4946 SvFLAGS(temp) &= ~(SVTYPEMASK); 4947 SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE; 4948 SvANY(temp) = temp_p; 4949 temp->sv_u.svu_rx = (regexp *)temp_p; 4950 4951 SvREFCNT_dec_NN(temp); 4952 } 4953 else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring); 4954 } 4955 4956 /* 4957 =for apidoc sv_chop 4958 4959 Efficient removal of characters from the beginning of the string buffer. 4960 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a 4961 pointer to somewhere inside the string buffer. The C<ptr> becomes the first 4962 character of the adjusted string. Uses the "OOK hack". On return, only 4963 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true. 4964 4965 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer 4966 refer to the same chunk of data. 4967 4968 The unfortunate similarity of this function's name to that of Perl's C<chop> 4969 operator is strictly coincidental. This function works from the left; 4970 C<chop> works from the right. 4971 4972 =cut 4973 */ 4974 4975 void 4976 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr) 4977 { 4978 STRLEN delta; 4979 STRLEN old_delta; 4980 U8 *p; 4981 #ifdef DEBUGGING 4982 const U8 *evacp; 4983 STRLEN evacn; 4984 #endif 4985 STRLEN max_delta; 4986 4987 PERL_ARGS_ASSERT_SV_CHOP; 4988 4989 if (!ptr || !SvPOKp(sv)) 4990 return; 4991 delta = ptr - SvPVX_const(sv); 4992 if (!delta) { 4993 /* Nothing to do. */ 4994 return; 4995 } 4996 max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv); 4997 if (delta > max_delta) 4998 Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p", 4999 ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta); 5000 /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */ 5001 SV_CHECK_THINKFIRST(sv); 5002 SvPOK_only_UTF8(sv); 5003 5004 if (!SvOOK(sv)) { 5005 if (!SvLEN(sv)) { /* make copy of shared string */ 5006 const char *pvx = SvPVX_const(sv); 5007 const STRLEN len = SvCUR(sv); 5008 SvGROW(sv, len + 1); 5009 Move(pvx,SvPVX(sv),len,char); 5010 *SvEND(sv) = '\0'; 5011 } 5012 SvOOK_on(sv); 5013 old_delta = 0; 5014 } else { 5015 SvOOK_offset(sv, old_delta); 5016 } 5017 SvLEN_set(sv, SvLEN(sv) - delta); 5018 SvCUR_set(sv, SvCUR(sv) - delta); 5019 SvPV_set(sv, SvPVX(sv) + delta); 5020 5021 p = (U8 *)SvPVX_const(sv); 5022 5023 #ifdef DEBUGGING 5024 /* how many bytes were evacuated? we will fill them with sentinel 5025 bytes, except for the part holding the new offset of course. */ 5026 evacn = delta; 5027 if (old_delta) 5028 evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN)); 5029 assert(evacn); 5030 assert(evacn <= delta + old_delta); 5031 evacp = p - evacn; 5032 #endif 5033 5034 delta += old_delta; 5035 assert(delta); 5036 if (delta < 0x100) { 5037 *--p = (U8) delta; 5038 } else { 5039 *--p = 0; 5040 p -= sizeof(STRLEN); 5041 Copy((U8*)&delta, p, sizeof(STRLEN), U8); 5042 } 5043 5044 #ifdef DEBUGGING 5045 /* Fill the preceding buffer with sentinals to verify that no-one is 5046 using it. */ 5047 while (p > evacp) { 5048 --p; 5049 *p = (U8)PTR2UV(p); 5050 } 5051 #endif 5052 } 5053 5054 /* 5055 =for apidoc sv_catpvn 5056 5057 Concatenates the string onto the end of the string which is in the SV. The 5058 C<len> indicates number of bytes to copy. If the SV has the UTF-8 5059 status set, then the bytes appended should be valid UTF-8. 5060 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>. 5061 5062 =for apidoc sv_catpvn_flags 5063 5064 Concatenates the string onto the end of the string which is in the SV. The 5065 C<len> indicates number of bytes to copy. If the SV has the UTF-8 5066 status set, then the bytes appended should be valid UTF-8. 5067 If C<flags> has the C<SV_SMAGIC> bit set, will 5068 C<mg_set> on C<dsv> afterwards if appropriate. 5069 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented 5070 in terms of this function. 5071 5072 =cut 5073 */ 5074 5075 void 5076 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags) 5077 { 5078 dVAR; 5079 STRLEN dlen; 5080 const char * const dstr = SvPV_force_flags(dsv, dlen, flags); 5081 5082 PERL_ARGS_ASSERT_SV_CATPVN_FLAGS; 5083 assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8)); 5084 5085 if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) { 5086 if (flags & SV_CATUTF8 && !SvUTF8(dsv)) { 5087 sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1); 5088 dlen = SvCUR(dsv); 5089 } 5090 else SvGROW(dsv, dlen + slen + 1); 5091 if (sstr == dstr) 5092 sstr = SvPVX_const(dsv); 5093 Move(sstr, SvPVX(dsv) + dlen, slen, char); 5094 SvCUR_set(dsv, SvCUR(dsv) + slen); 5095 } 5096 else { 5097 /* We inline bytes_to_utf8, to avoid an extra malloc. */ 5098 const char * const send = sstr + slen; 5099 U8 *d; 5100 5101 /* Something this code does not account for, which I think is 5102 impossible; it would require the same pv to be treated as 5103 bytes *and* utf8, which would indicate a bug elsewhere. */ 5104 assert(sstr != dstr); 5105 5106 SvGROW(dsv, dlen + slen * 2 + 1); 5107 d = (U8 *)SvPVX(dsv) + dlen; 5108 5109 while (sstr < send) { 5110 const UV uv = NATIVE_TO_ASCII((U8)*sstr++); 5111 if (UNI_IS_INVARIANT(uv)) 5112 *d++ = (U8)UTF_TO_NATIVE(uv); 5113 else { 5114 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv); 5115 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv); 5116 } 5117 } 5118 SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv)); 5119 } 5120 *SvEND(dsv) = '\0'; 5121 (void)SvPOK_only_UTF8(dsv); /* validate pointer */ 5122 SvTAINT(dsv); 5123 if (flags & SV_SMAGIC) 5124 SvSETMAGIC(dsv); 5125 } 5126 5127 /* 5128 =for apidoc sv_catsv 5129 5130 Concatenates the string from SV C<ssv> onto the end of the string in SV 5131 C<dsv>. If C<ssv> is null, does nothing; otherwise modifies only C<dsv>. 5132 Handles 'get' magic on both SVs, but no 'set' magic. See C<sv_catsv_mg> and 5133 C<sv_catsv_nomg>. 5134 5135 =for apidoc sv_catsv_flags 5136 5137 Concatenates the string from SV C<ssv> onto the end of the string in SV 5138 C<dsv>. If C<ssv> is null, does nothing; otherwise modifies only C<dsv>. 5139 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if 5140 appropriate. If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on 5141 the modified SV afterward, if appropriate. C<sv_catsv>, C<sv_catsv_nomg>, 5142 and C<sv_catsv_mg> are implemented in terms of this function. 5143 5144 =cut */ 5145 5146 void 5147 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags) 5148 { 5149 dVAR; 5150 5151 PERL_ARGS_ASSERT_SV_CATSV_FLAGS; 5152 5153 if (ssv) { 5154 STRLEN slen; 5155 const char *spv = SvPV_flags_const(ssv, slen, flags); 5156 if (spv) { 5157 if (flags & SV_GMAGIC) 5158 SvGETMAGIC(dsv); 5159 sv_catpvn_flags(dsv, spv, slen, 5160 DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES); 5161 if (flags & SV_SMAGIC) 5162 SvSETMAGIC(dsv); 5163 } 5164 } 5165 } 5166 5167 /* 5168 =for apidoc sv_catpv 5169 5170 Concatenates the string onto the end of the string which is in the SV. 5171 If the SV has the UTF-8 status set, then the bytes appended should be 5172 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>. 5173 5174 =cut */ 5175 5176 void 5177 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr) 5178 { 5179 dVAR; 5180 STRLEN len; 5181 STRLEN tlen; 5182 char *junk; 5183 5184 PERL_ARGS_ASSERT_SV_CATPV; 5185 5186 if (!ptr) 5187 return; 5188 junk = SvPV_force(sv, tlen); 5189 len = strlen(ptr); 5190 SvGROW(sv, tlen + len + 1); 5191 if (ptr == junk) 5192 ptr = SvPVX_const(sv); 5193 Move(ptr,SvPVX(sv)+tlen,len+1,char); 5194 SvCUR_set(sv, SvCUR(sv) + len); 5195 (void)SvPOK_only_UTF8(sv); /* validate pointer */ 5196 SvTAINT(sv); 5197 } 5198 5199 /* 5200 =for apidoc sv_catpv_flags 5201 5202 Concatenates the string onto the end of the string which is in the SV. 5203 If the SV has the UTF-8 status set, then the bytes appended should 5204 be valid UTF-8. If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set> 5205 on the modified SV if appropriate. 5206 5207 =cut 5208 */ 5209 5210 void 5211 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags) 5212 { 5213 PERL_ARGS_ASSERT_SV_CATPV_FLAGS; 5214 sv_catpvn_flags(dstr, sstr, strlen(sstr), flags); 5215 } 5216 5217 /* 5218 =for apidoc sv_catpv_mg 5219 5220 Like C<sv_catpv>, but also handles 'set' magic. 5221 5222 =cut 5223 */ 5224 5225 void 5226 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr) 5227 { 5228 PERL_ARGS_ASSERT_SV_CATPV_MG; 5229 5230 sv_catpv(sv,ptr); 5231 SvSETMAGIC(sv); 5232 } 5233 5234 /* 5235 =for apidoc newSV 5236 5237 Creates a new SV. A non-zero C<len> parameter indicates the number of 5238 bytes of preallocated string space the SV should have. An extra byte for a 5239 trailing NUL is also reserved. (SvPOK is not set for the SV even if string 5240 space is allocated.) The reference count for the new SV is set to 1. 5241 5242 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first 5243 parameter, I<x>, a debug aid which allowed callers to identify themselves. 5244 This aid has been superseded by a new build option, PERL_MEM_LOG (see 5245 L<perlhacktips/PERL_MEM_LOG>). The older API is still there for use in XS 5246 modules supporting older perls. 5247 5248 =cut 5249 */ 5250 5251 SV * 5252 Perl_newSV(pTHX_ const STRLEN len) 5253 { 5254 dVAR; 5255 SV *sv; 5256 5257 new_SV(sv); 5258 if (len) { 5259 sv_upgrade(sv, SVt_PV); 5260 SvGROW(sv, len + 1); 5261 } 5262 return sv; 5263 } 5264 /* 5265 =for apidoc sv_magicext 5266 5267 Adds magic to an SV, upgrading it if necessary. Applies the 5268 supplied vtable and returns a pointer to the magic added. 5269 5270 Note that C<sv_magicext> will allow things that C<sv_magic> will not. 5271 In particular, you can add magic to SvREADONLY SVs, and add more than 5272 one instance of the same 'how'. 5273 5274 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is 5275 stored, if C<namlen> is zero then C<name> is stored as-is and - as another 5276 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed 5277 to contain an C<SV*> and is stored as-is with its REFCNT incremented. 5278 5279 (This is now used as a subroutine by C<sv_magic>.) 5280 5281 =cut 5282 */ 5283 MAGIC * 5284 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 5285 const MGVTBL *const vtable, const char *const name, const I32 namlen) 5286 { 5287 dVAR; 5288 MAGIC* mg; 5289 5290 PERL_ARGS_ASSERT_SV_MAGICEXT; 5291 5292 SvUPGRADE(sv, SVt_PVMG); 5293 Newxz(mg, 1, MAGIC); 5294 mg->mg_moremagic = SvMAGIC(sv); 5295 SvMAGIC_set(sv, mg); 5296 5297 /* Sometimes a magic contains a reference loop, where the sv and 5298 object refer to each other. To prevent a reference loop that 5299 would prevent such objects being freed, we look for such loops 5300 and if we find one we avoid incrementing the object refcount. 5301 5302 Note we cannot do this to avoid self-tie loops as intervening RV must 5303 have its REFCNT incremented to keep it in existence. 5304 5305 */ 5306 if (!obj || obj == sv || 5307 how == PERL_MAGIC_arylen || 5308 how == PERL_MAGIC_symtab || 5309 (SvTYPE(obj) == SVt_PVGV && 5310 (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv 5311 || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv 5312 || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv))) 5313 { 5314 mg->mg_obj = obj; 5315 } 5316 else { 5317 mg->mg_obj = SvREFCNT_inc_simple(obj); 5318 mg->mg_flags |= MGf_REFCOUNTED; 5319 } 5320 5321 /* Normal self-ties simply pass a null object, and instead of 5322 using mg_obj directly, use the SvTIED_obj macro to produce a 5323 new RV as needed. For glob "self-ties", we are tieing the PVIO 5324 with an RV obj pointing to the glob containing the PVIO. In 5325 this case, to avoid a reference loop, we need to weaken the 5326 reference. 5327 */ 5328 5329 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO && 5330 obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv) 5331 { 5332 sv_rvweaken(obj); 5333 } 5334 5335 mg->mg_type = how; 5336 mg->mg_len = namlen; 5337 if (name) { 5338 if (namlen > 0) 5339 mg->mg_ptr = savepvn(name, namlen); 5340 else if (namlen == HEf_SVKEY) { 5341 /* Yes, this is casting away const. This is only for the case of 5342 HEf_SVKEY. I think we need to document this aberation of the 5343 constness of the API, rather than making name non-const, as 5344 that change propagating outwards a long way. */ 5345 mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name); 5346 } else 5347 mg->mg_ptr = (char *) name; 5348 } 5349 mg->mg_virtual = (MGVTBL *) vtable; 5350 5351 mg_magical(sv); 5352 return mg; 5353 } 5354 5355 /* 5356 =for apidoc sv_magic 5357 5358 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if 5359 necessary, then adds a new magic item of type C<how> to the head of the 5360 magic list. 5361 5362 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the 5363 handling of the C<name> and C<namlen> arguments. 5364 5365 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also 5366 to add more than one instance of the same 'how'. 5367 5368 =cut 5369 */ 5370 5371 void 5372 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how, 5373 const char *const name, const I32 namlen) 5374 { 5375 dVAR; 5376 const MGVTBL *vtable; 5377 MAGIC* mg; 5378 unsigned int flags; 5379 unsigned int vtable_index; 5380 5381 PERL_ARGS_ASSERT_SV_MAGIC; 5382 5383 if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data) 5384 || ((flags = PL_magic_data[how]), 5385 (vtable_index = flags & PERL_MAGIC_VTABLE_MASK) 5386 > magic_vtable_max)) 5387 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how); 5388 5389 /* PERL_MAGIC_ext is reserved for use by extensions not perl internals. 5390 Useful for attaching extension internal data to perl vars. 5391 Note that multiple extensions may clash if magical scalars 5392 etc holding private data from one are passed to another. */ 5393 5394 vtable = (vtable_index == magic_vtable_max) 5395 ? NULL : PL_magic_vtables + vtable_index; 5396 5397 #ifdef PERL_ANY_COW 5398 if (SvIsCOW(sv)) 5399 sv_force_normal_flags(sv, 0); 5400 #endif 5401 if (SvREADONLY(sv)) { 5402 if ( 5403 /* its okay to attach magic to shared strings */ 5404 !SvIsCOW(sv) 5405 5406 && IN_PERL_RUNTIME 5407 && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how) 5408 ) 5409 { 5410 Perl_croak_no_modify(); 5411 } 5412 } 5413 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) { 5414 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) { 5415 /* sv_magic() refuses to add a magic of the same 'how' as an 5416 existing one 5417 */ 5418 if (how == PERL_MAGIC_taint) 5419 mg->mg_len |= 1; 5420 return; 5421 } 5422 } 5423 5424 /* Rest of work is done else where */ 5425 mg = sv_magicext(sv,obj,how,vtable,name,namlen); 5426 5427 switch (how) { 5428 case PERL_MAGIC_taint: 5429 mg->mg_len = 1; 5430 break; 5431 case PERL_MAGIC_ext: 5432 case PERL_MAGIC_dbfile: 5433 SvRMAGICAL_on(sv); 5434 break; 5435 } 5436 } 5437 5438 static int 5439 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags) 5440 { 5441 MAGIC* mg; 5442 MAGIC** mgp; 5443 5444 assert(flags <= 1); 5445 5446 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv)) 5447 return 0; 5448 mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic); 5449 for (mg = *mgp; mg; mg = *mgp) { 5450 const MGVTBL* const virt = mg->mg_virtual; 5451 if (mg->mg_type == type && (!flags || virt == vtbl)) { 5452 *mgp = mg->mg_moremagic; 5453 if (virt && virt->svt_free) 5454 virt->svt_free(aTHX_ sv, mg); 5455 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) { 5456 if (mg->mg_len > 0) 5457 Safefree(mg->mg_ptr); 5458 else if (mg->mg_len == HEf_SVKEY) 5459 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr)); 5460 else if (mg->mg_type == PERL_MAGIC_utf8) 5461 Safefree(mg->mg_ptr); 5462 } 5463 if (mg->mg_flags & MGf_REFCOUNTED) 5464 SvREFCNT_dec(mg->mg_obj); 5465 Safefree(mg); 5466 } 5467 else 5468 mgp = &mg->mg_moremagic; 5469 } 5470 if (SvMAGIC(sv)) { 5471 if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */ 5472 mg_magical(sv); /* else fix the flags now */ 5473 } 5474 else { 5475 SvMAGICAL_off(sv); 5476 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; 5477 } 5478 return 0; 5479 } 5480 5481 /* 5482 =for apidoc sv_unmagic 5483 5484 Removes all magic of type C<type> from an SV. 5485 5486 =cut 5487 */ 5488 5489 int 5490 Perl_sv_unmagic(pTHX_ SV *const sv, const int type) 5491 { 5492 PERL_ARGS_ASSERT_SV_UNMAGIC; 5493 return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0); 5494 } 5495 5496 /* 5497 =for apidoc sv_unmagicext 5498 5499 Removes all magic of type C<type> with the specified C<vtbl> from an SV. 5500 5501 =cut 5502 */ 5503 5504 int 5505 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl) 5506 { 5507 PERL_ARGS_ASSERT_SV_UNMAGICEXT; 5508 return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1); 5509 } 5510 5511 /* 5512 =for apidoc sv_rvweaken 5513 5514 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the 5515 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and 5516 push a back-reference to this RV onto the array of backreferences 5517 associated with that magic. If the RV is magical, set magic will be 5518 called after the RV is cleared. 5519 5520 =cut 5521 */ 5522 5523 SV * 5524 Perl_sv_rvweaken(pTHX_ SV *const sv) 5525 { 5526 SV *tsv; 5527 5528 PERL_ARGS_ASSERT_SV_RVWEAKEN; 5529 5530 if (!SvOK(sv)) /* let undefs pass */ 5531 return sv; 5532 if (!SvROK(sv)) 5533 Perl_croak(aTHX_ "Can't weaken a nonreference"); 5534 else if (SvWEAKREF(sv)) { 5535 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak"); 5536 return sv; 5537 } 5538 else if (SvREADONLY(sv)) croak_no_modify(); 5539 tsv = SvRV(sv); 5540 Perl_sv_add_backref(aTHX_ tsv, sv); 5541 SvWEAKREF_on(sv); 5542 SvREFCNT_dec_NN(tsv); 5543 return sv; 5544 } 5545 5546 /* Give tsv backref magic if it hasn't already got it, then push a 5547 * back-reference to sv onto the array associated with the backref magic. 5548 * 5549 * As an optimisation, if there's only one backref and it's not an AV, 5550 * store it directly in the HvAUX or mg_obj slot, avoiding the need to 5551 * allocate an AV. (Whether the slot holds an AV tells us whether this is 5552 * active.) 5553 */ 5554 5555 /* A discussion about the backreferences array and its refcount: 5556 * 5557 * The AV holding the backreferences is pointed to either as the mg_obj of 5558 * PERL_MAGIC_backref, or in the specific case of a HV, from the 5559 * xhv_backreferences field. The array is created with a refcount 5560 * of 2. This means that if during global destruction the array gets 5561 * picked on before its parent to have its refcount decremented by the 5562 * random zapper, it won't actually be freed, meaning it's still there for 5563 * when its parent gets freed. 5564 * 5565 * When the parent SV is freed, the extra ref is killed by 5566 * Perl_sv_kill_backrefs. The other ref is killed, in the case of magic, 5567 * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs. 5568 * 5569 * When a single backref SV is stored directly, it is not reference 5570 * counted. 5571 */ 5572 5573 void 5574 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv) 5575 { 5576 dVAR; 5577 SV **svp; 5578 AV *av = NULL; 5579 MAGIC *mg = NULL; 5580 5581 PERL_ARGS_ASSERT_SV_ADD_BACKREF; 5582 5583 /* find slot to store array or singleton backref */ 5584 5585 if (SvTYPE(tsv) == SVt_PVHV) { 5586 svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv)); 5587 } else { 5588 if (! ((mg = 5589 (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL)))) 5590 { 5591 sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0); 5592 mg = mg_find(tsv, PERL_MAGIC_backref); 5593 } 5594 svp = &(mg->mg_obj); 5595 } 5596 5597 /* create or retrieve the array */ 5598 5599 if ( (!*svp && SvTYPE(sv) == SVt_PVAV) 5600 || (*svp && SvTYPE(*svp) != SVt_PVAV) 5601 ) { 5602 /* create array */ 5603 av = newAV(); 5604 AvREAL_off(av); 5605 SvREFCNT_inc_simple_void(av); 5606 /* av now has a refcnt of 2; see discussion above */ 5607 if (*svp) { 5608 /* move single existing backref to the array */ 5609 av_extend(av, 1); 5610 AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */ 5611 } 5612 *svp = (SV*)av; 5613 if (mg) 5614 mg->mg_flags |= MGf_REFCOUNTED; 5615 } 5616 else 5617 av = MUTABLE_AV(*svp); 5618 5619 if (!av) { 5620 /* optimisation: store single backref directly in HvAUX or mg_obj */ 5621 *svp = sv; 5622 return; 5623 } 5624 /* push new backref */ 5625 assert(SvTYPE(av) == SVt_PVAV); 5626 if (AvFILLp(av) >= AvMAX(av)) { 5627 av_extend(av, AvFILLp(av)+1); 5628 } 5629 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */ 5630 } 5631 5632 /* delete a back-reference to ourselves from the backref magic associated 5633 * with the SV we point to. 5634 */ 5635 5636 void 5637 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv) 5638 { 5639 dVAR; 5640 SV **svp = NULL; 5641 5642 PERL_ARGS_ASSERT_SV_DEL_BACKREF; 5643 5644 if (SvTYPE(tsv) == SVt_PVHV) { 5645 if (SvOOK(tsv)) 5646 svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv)); 5647 } 5648 else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) { 5649 /* It's possible for the the last (strong) reference to tsv to have 5650 become freed *before* the last thing holding a weak reference. 5651 If both survive longer than the backreferences array, then when 5652 the referent's reference count drops to 0 and it is freed, it's 5653 not able to chase the backreferences, so they aren't NULLed. 5654 5655 For example, a CV holds a weak reference to its stash. If both the 5656 CV and the stash survive longer than the backreferences array, 5657 and the CV gets picked for the SvBREAK() treatment first, 5658 *and* it turns out that the stash is only being kept alive because 5659 of an our variable in the pad of the CV, then midway during CV 5660 destruction the stash gets freed, but CvSTASH() isn't set to NULL. 5661 It ends up pointing to the freed HV. Hence it's chased in here, and 5662 if this block wasn't here, it would hit the !svp panic just below. 5663 5664 I don't believe that "better" destruction ordering is going to help 5665 here - during global destruction there's always going to be the 5666 chance that something goes out of order. We've tried to make it 5667 foolproof before, and it only resulted in evolutionary pressure on 5668 fools. Which made us look foolish for our hubris. :-( 5669 */ 5670 return; 5671 } 5672 else { 5673 MAGIC *const mg 5674 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL; 5675 svp = mg ? &(mg->mg_obj) : NULL; 5676 } 5677 5678 if (!svp) 5679 Perl_croak(aTHX_ "panic: del_backref, svp=0"); 5680 if (!*svp) { 5681 /* It's possible that sv is being freed recursively part way through the 5682 freeing of tsv. If this happens, the backreferences array of tsv has 5683 already been freed, and so svp will be NULL. If this is the case, 5684 we should not panic. Instead, nothing needs doing, so return. */ 5685 if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0) 5686 return; 5687 Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf, 5688 *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv)); 5689 } 5690 5691 if (SvTYPE(*svp) == SVt_PVAV) { 5692 #ifdef DEBUGGING 5693 int count = 1; 5694 #endif 5695 AV * const av = (AV*)*svp; 5696 SSize_t fill; 5697 assert(!SvIS_FREED(av)); 5698 fill = AvFILLp(av); 5699 assert(fill > -1); 5700 svp = AvARRAY(av); 5701 /* for an SV with N weak references to it, if all those 5702 * weak refs are deleted, then sv_del_backref will be called 5703 * N times and O(N^2) compares will be done within the backref 5704 * array. To ameliorate this potential slowness, we: 5705 * 1) make sure this code is as tight as possible; 5706 * 2) when looking for SV, look for it at both the head and tail of the 5707 * array first before searching the rest, since some create/destroy 5708 * patterns will cause the backrefs to be freed in order. 5709 */ 5710 if (*svp == sv) { 5711 AvARRAY(av)++; 5712 AvMAX(av)--; 5713 } 5714 else { 5715 SV **p = &svp[fill]; 5716 SV *const topsv = *p; 5717 if (topsv != sv) { 5718 #ifdef DEBUGGING 5719 count = 0; 5720 #endif 5721 while (--p > svp) { 5722 if (*p == sv) { 5723 /* We weren't the last entry. 5724 An unordered list has this property that you 5725 can take the last element off the end to fill 5726 the hole, and it's still an unordered list :-) 5727 */ 5728 *p = topsv; 5729 #ifdef DEBUGGING 5730 count++; 5731 #else 5732 break; /* should only be one */ 5733 #endif 5734 } 5735 } 5736 } 5737 } 5738 assert(count ==1); 5739 AvFILLp(av) = fill-1; 5740 } 5741 else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) { 5742 /* freed AV; skip */ 5743 } 5744 else { 5745 /* optimisation: only a single backref, stored directly */ 5746 if (*svp != sv) 5747 Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv); 5748 *svp = NULL; 5749 } 5750 5751 } 5752 5753 void 5754 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av) 5755 { 5756 SV **svp; 5757 SV **last; 5758 bool is_array; 5759 5760 PERL_ARGS_ASSERT_SV_KILL_BACKREFS; 5761 5762 if (!av) 5763 return; 5764 5765 /* after multiple passes through Perl_sv_clean_all() for a thingy 5766 * that has badly leaked, the backref array may have gotten freed, 5767 * since we only protect it against 1 round of cleanup */ 5768 if (SvIS_FREED(av)) { 5769 if (PL_in_clean_all) /* All is fair */ 5770 return; 5771 Perl_croak(aTHX_ 5772 "panic: magic_killbackrefs (freed backref AV/SV)"); 5773 } 5774 5775 5776 is_array = (SvTYPE(av) == SVt_PVAV); 5777 if (is_array) { 5778 assert(!SvIS_FREED(av)); 5779 svp = AvARRAY(av); 5780 if (svp) 5781 last = svp + AvFILLp(av); 5782 } 5783 else { 5784 /* optimisation: only a single backref, stored directly */ 5785 svp = (SV**)&av; 5786 last = svp; 5787 } 5788 5789 if (svp) { 5790 while (svp <= last) { 5791 if (*svp) { 5792 SV *const referrer = *svp; 5793 if (SvWEAKREF(referrer)) { 5794 /* XXX Should we check that it hasn't changed? */ 5795 assert(SvROK(referrer)); 5796 SvRV_set(referrer, 0); 5797 SvOK_off(referrer); 5798 SvWEAKREF_off(referrer); 5799 SvSETMAGIC(referrer); 5800 } else if (SvTYPE(referrer) == SVt_PVGV || 5801 SvTYPE(referrer) == SVt_PVLV) { 5802 assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */ 5803 /* You lookin' at me? */ 5804 assert(GvSTASH(referrer)); 5805 assert(GvSTASH(referrer) == (const HV *)sv); 5806 GvSTASH(referrer) = 0; 5807 } else if (SvTYPE(referrer) == SVt_PVCV || 5808 SvTYPE(referrer) == SVt_PVFM) { 5809 if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */ 5810 /* You lookin' at me? */ 5811 assert(CvSTASH(referrer)); 5812 assert(CvSTASH(referrer) == (const HV *)sv); 5813 SvANY(MUTABLE_CV(referrer))->xcv_stash = 0; 5814 } 5815 else { 5816 assert(SvTYPE(sv) == SVt_PVGV); 5817 /* You lookin' at me? */ 5818 assert(CvGV(referrer)); 5819 assert(CvGV(referrer) == (const GV *)sv); 5820 anonymise_cv_maybe(MUTABLE_GV(sv), 5821 MUTABLE_CV(referrer)); 5822 } 5823 5824 } else { 5825 Perl_croak(aTHX_ 5826 "panic: magic_killbackrefs (flags=%"UVxf")", 5827 (UV)SvFLAGS(referrer)); 5828 } 5829 5830 if (is_array) 5831 *svp = NULL; 5832 } 5833 svp++; 5834 } 5835 } 5836 if (is_array) { 5837 AvFILLp(av) = -1; 5838 SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */ 5839 } 5840 return; 5841 } 5842 5843 /* 5844 =for apidoc sv_insert 5845 5846 Inserts a string at the specified offset/length within the SV. Similar to 5847 the Perl substr() function. Handles get magic. 5848 5849 =for apidoc sv_insert_flags 5850 5851 Same as C<sv_insert>, but the extra C<flags> are passed to the 5852 C<SvPV_force_flags> that applies to C<bigstr>. 5853 5854 =cut 5855 */ 5856 5857 void 5858 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags) 5859 { 5860 dVAR; 5861 char *big; 5862 char *mid; 5863 char *midend; 5864 char *bigend; 5865 SSize_t i; /* better be sizeof(STRLEN) or bad things happen */ 5866 STRLEN curlen; 5867 5868 PERL_ARGS_ASSERT_SV_INSERT_FLAGS; 5869 5870 if (!bigstr) 5871 Perl_croak(aTHX_ "Can't modify nonexistent substring"); 5872 SvPV_force_flags(bigstr, curlen, flags); 5873 (void)SvPOK_only_UTF8(bigstr); 5874 if (offset + len > curlen) { 5875 SvGROW(bigstr, offset+len+1); 5876 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char); 5877 SvCUR_set(bigstr, offset+len); 5878 } 5879 5880 SvTAINT(bigstr); 5881 i = littlelen - len; 5882 if (i > 0) { /* string might grow */ 5883 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1); 5884 mid = big + offset + len; 5885 midend = bigend = big + SvCUR(bigstr); 5886 bigend += i; 5887 *bigend = '\0'; 5888 while (midend > mid) /* shove everything down */ 5889 *--bigend = *--midend; 5890 Move(little,big+offset,littlelen,char); 5891 SvCUR_set(bigstr, SvCUR(bigstr) + i); 5892 SvSETMAGIC(bigstr); 5893 return; 5894 } 5895 else if (i == 0) { 5896 Move(little,SvPVX(bigstr)+offset,len,char); 5897 SvSETMAGIC(bigstr); 5898 return; 5899 } 5900 5901 big = SvPVX(bigstr); 5902 mid = big + offset; 5903 midend = mid + len; 5904 bigend = big + SvCUR(bigstr); 5905 5906 if (midend > bigend) 5907 Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p", 5908 midend, bigend); 5909 5910 if (mid - big > bigend - midend) { /* faster to shorten from end */ 5911 if (littlelen) { 5912 Move(little, mid, littlelen,char); 5913 mid += littlelen; 5914 } 5915 i = bigend - midend; 5916 if (i > 0) { 5917 Move(midend, mid, i,char); 5918 mid += i; 5919 } 5920 *mid = '\0'; 5921 SvCUR_set(bigstr, mid - big); 5922 } 5923 else if ((i = mid - big)) { /* faster from front */ 5924 midend -= littlelen; 5925 mid = midend; 5926 Move(big, midend - i, i, char); 5927 sv_chop(bigstr,midend-i); 5928 if (littlelen) 5929 Move(little, mid, littlelen,char); 5930 } 5931 else if (littlelen) { 5932 midend -= littlelen; 5933 sv_chop(bigstr,midend); 5934 Move(little,midend,littlelen,char); 5935 } 5936 else { 5937 sv_chop(bigstr,midend); 5938 } 5939 SvSETMAGIC(bigstr); 5940 } 5941 5942 /* 5943 =for apidoc sv_replace 5944 5945 Make the first argument a copy of the second, then delete the original. 5946 The target SV physically takes over ownership of the body of the source SV 5947 and inherits its flags; however, the target keeps any magic it owns, 5948 and any magic in the source is discarded. 5949 Note that this is a rather specialist SV copying operation; most of the 5950 time you'll want to use C<sv_setsv> or one of its many macro front-ends. 5951 5952 =cut 5953 */ 5954 5955 void 5956 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv) 5957 { 5958 dVAR; 5959 const U32 refcnt = SvREFCNT(sv); 5960 5961 PERL_ARGS_ASSERT_SV_REPLACE; 5962 5963 SV_CHECK_THINKFIRST_COW_DROP(sv); 5964 if (SvREFCNT(nsv) != 1) { 5965 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()" 5966 " (%" UVuf " != 1)", (UV) SvREFCNT(nsv)); 5967 } 5968 if (SvMAGICAL(sv)) { 5969 if (SvMAGICAL(nsv)) 5970 mg_free(nsv); 5971 else 5972 sv_upgrade(nsv, SVt_PVMG); 5973 SvMAGIC_set(nsv, SvMAGIC(sv)); 5974 SvFLAGS(nsv) |= SvMAGICAL(sv); 5975 SvMAGICAL_off(sv); 5976 SvMAGIC_set(sv, NULL); 5977 } 5978 SvREFCNT(sv) = 0; 5979 sv_clear(sv); 5980 assert(!SvREFCNT(sv)); 5981 #ifdef DEBUG_LEAKING_SCALARS 5982 sv->sv_flags = nsv->sv_flags; 5983 sv->sv_any = nsv->sv_any; 5984 sv->sv_refcnt = nsv->sv_refcnt; 5985 sv->sv_u = nsv->sv_u; 5986 #else 5987 StructCopy(nsv,sv,SV); 5988 #endif 5989 if(SvTYPE(sv) == SVt_IV) { 5990 SvANY(sv) 5991 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv)); 5992 } 5993 5994 5995 #ifdef PERL_OLD_COPY_ON_WRITE 5996 if (SvIsCOW_normal(nsv)) { 5997 /* We need to follow the pointers around the loop to make the 5998 previous SV point to sv, rather than nsv. */ 5999 SV *next; 6000 SV *current = nsv; 6001 while ((next = SV_COW_NEXT_SV(current)) != nsv) { 6002 assert(next); 6003 current = next; 6004 assert(SvPVX_const(current) == SvPVX_const(nsv)); 6005 } 6006 /* Make the SV before us point to the SV after us. */ 6007 if (DEBUG_C_TEST) { 6008 PerlIO_printf(Perl_debug_log, "previous is\n"); 6009 sv_dump(current); 6010 PerlIO_printf(Perl_debug_log, 6011 "move it from 0x%"UVxf" to 0x%"UVxf"\n", 6012 (UV) SV_COW_NEXT_SV(current), (UV) sv); 6013 } 6014 SV_COW_NEXT_SV_SET(current, sv); 6015 } 6016 #endif 6017 SvREFCNT(sv) = refcnt; 6018 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */ 6019 SvREFCNT(nsv) = 0; 6020 del_SV(nsv); 6021 } 6022 6023 /* We're about to free a GV which has a CV that refers back to us. 6024 * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV 6025 * field) */ 6026 6027 STATIC void 6028 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv) 6029 { 6030 SV *gvname; 6031 GV *anongv; 6032 6033 PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE; 6034 6035 /* be assertive! */ 6036 assert(SvREFCNT(gv) == 0); 6037 assert(isGV(gv) && isGV_with_GP(gv)); 6038 assert(GvGP(gv)); 6039 assert(!CvANON(cv)); 6040 assert(CvGV(cv) == gv); 6041 assert(!CvNAMED(cv)); 6042 6043 /* will the CV shortly be freed by gp_free() ? */ 6044 if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) { 6045 SvANY(cv)->xcv_gv_u.xcv_gv = NULL; 6046 return; 6047 } 6048 6049 /* if not, anonymise: */ 6050 gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv))) 6051 ? newSVhek(HvENAME_HEK(GvSTASH(gv))) 6052 : newSVpvn_flags( "__ANON__", 8, 0 ); 6053 sv_catpvs(gvname, "::__ANON__"); 6054 anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV); 6055 SvREFCNT_dec_NN(gvname); 6056 6057 CvANON_on(cv); 6058 CvCVGV_RC_on(cv); 6059 SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv)); 6060 } 6061 6062 6063 /* 6064 =for apidoc sv_clear 6065 6066 Clear an SV: call any destructors, free up any memory used by the body, 6067 and free the body itself. The SV's head is I<not> freed, although 6068 its type is set to all 1's so that it won't inadvertently be assumed 6069 to be live during global destruction etc. 6070 This function should only be called when REFCNT is zero. Most of the time 6071 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>) 6072 instead. 6073 6074 =cut 6075 */ 6076 6077 void 6078 Perl_sv_clear(pTHX_ SV *const orig_sv) 6079 { 6080 dVAR; 6081 HV *stash; 6082 U32 type; 6083 const struct body_details *sv_type_details; 6084 SV* iter_sv = NULL; 6085 SV* next_sv = NULL; 6086 SV *sv = orig_sv; 6087 STRLEN hash_index; 6088 6089 PERL_ARGS_ASSERT_SV_CLEAR; 6090 6091 /* within this loop, sv is the SV currently being freed, and 6092 * iter_sv is the most recent AV or whatever that's being iterated 6093 * over to provide more SVs */ 6094 6095 while (sv) { 6096 6097 type = SvTYPE(sv); 6098 6099 assert(SvREFCNT(sv) == 0); 6100 assert(SvTYPE(sv) != (svtype)SVTYPEMASK); 6101 6102 if (type <= SVt_IV) { 6103 /* See the comment in sv.h about the collusion between this 6104 * early return and the overloading of the NULL slots in the 6105 * size table. */ 6106 if (SvROK(sv)) 6107 goto free_rv; 6108 SvFLAGS(sv) &= SVf_BREAK; 6109 SvFLAGS(sv) |= SVTYPEMASK; 6110 goto free_head; 6111 } 6112 6113 assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */ 6114 6115 if (type >= SVt_PVMG) { 6116 if (SvOBJECT(sv)) { 6117 if (!curse(sv, 1)) goto get_next_sv; 6118 type = SvTYPE(sv); /* destructor may have changed it */ 6119 } 6120 /* Free back-references before magic, in case the magic calls 6121 * Perl code that has weak references to sv. */ 6122 if (type == SVt_PVHV) { 6123 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv)); 6124 if (SvMAGIC(sv)) 6125 mg_free(sv); 6126 } 6127 else if (type == SVt_PVMG && SvPAD_OUR(sv)) { 6128 SvREFCNT_dec(SvOURSTASH(sv)); 6129 } else if (SvMAGIC(sv)) { 6130 /* Free back-references before other types of magic. */ 6131 sv_unmagic(sv, PERL_MAGIC_backref); 6132 mg_free(sv); 6133 } 6134 SvMAGICAL_off(sv); 6135 if (type == SVt_PVMG && SvPAD_TYPED(sv)) 6136 SvREFCNT_dec(SvSTASH(sv)); 6137 } 6138 switch (type) { 6139 /* case SVt_BIND: */ 6140 case SVt_PVIO: 6141 if (IoIFP(sv) && 6142 IoIFP(sv) != PerlIO_stdin() && 6143 IoIFP(sv) != PerlIO_stdout() && 6144 IoIFP(sv) != PerlIO_stderr() && 6145 !(IoFLAGS(sv) & IOf_FAKE_DIRP)) 6146 { 6147 io_close(MUTABLE_IO(sv), FALSE); 6148 } 6149 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP)) 6150 PerlDir_close(IoDIRP(sv)); 6151 IoDIRP(sv) = (DIR*)NULL; 6152 Safefree(IoTOP_NAME(sv)); 6153 Safefree(IoFMT_NAME(sv)); 6154 Safefree(IoBOTTOM_NAME(sv)); 6155 if ((const GV *)sv == PL_statgv) 6156 PL_statgv = NULL; 6157 goto freescalar; 6158 case SVt_REGEXP: 6159 /* FIXME for plugins */ 6160 freeregexp: 6161 pregfree2((REGEXP*) sv); 6162 goto freescalar; 6163 case SVt_PVCV: 6164 case SVt_PVFM: 6165 cv_undef(MUTABLE_CV(sv)); 6166 /* If we're in a stash, we don't own a reference to it. 6167 * However it does have a back reference to us, which needs to 6168 * be cleared. */ 6169 if ((stash = CvSTASH(sv))) 6170 sv_del_backref(MUTABLE_SV(stash), sv); 6171 goto freescalar; 6172 case SVt_PVHV: 6173 if (PL_last_swash_hv == (const HV *)sv) { 6174 PL_last_swash_hv = NULL; 6175 } 6176 if (HvTOTALKEYS((HV*)sv) > 0) { 6177 const char *name; 6178 /* this statement should match the one at the beginning of 6179 * hv_undef_flags() */ 6180 if ( PL_phase != PERL_PHASE_DESTRUCT 6181 && (name = HvNAME((HV*)sv))) 6182 { 6183 if (PL_stashcache) { 6184 DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n", 6185 sv)); 6186 (void)hv_delete(PL_stashcache, name, 6187 HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD); 6188 } 6189 hv_name_set((HV*)sv, NULL, 0, 0); 6190 } 6191 6192 /* save old iter_sv in unused SvSTASH field */ 6193 assert(!SvOBJECT(sv)); 6194 SvSTASH(sv) = (HV*)iter_sv; 6195 iter_sv = sv; 6196 6197 /* save old hash_index in unused SvMAGIC field */ 6198 assert(!SvMAGICAL(sv)); 6199 assert(!SvMAGIC(sv)); 6200 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index; 6201 hash_index = 0; 6202 6203 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index); 6204 goto get_next_sv; /* process this new sv */ 6205 } 6206 /* free empty hash */ 6207 Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL); 6208 assert(!HvARRAY((HV*)sv)); 6209 break; 6210 case SVt_PVAV: 6211 { 6212 AV* av = MUTABLE_AV(sv); 6213 if (PL_comppad == av) { 6214 PL_comppad = NULL; 6215 PL_curpad = NULL; 6216 } 6217 if (AvREAL(av) && AvFILLp(av) > -1) { 6218 next_sv = AvARRAY(av)[AvFILLp(av)--]; 6219 /* save old iter_sv in top-most slot of AV, 6220 * and pray that it doesn't get wiped in the meantime */ 6221 AvARRAY(av)[AvMAX(av)] = iter_sv; 6222 iter_sv = sv; 6223 goto get_next_sv; /* process this new sv */ 6224 } 6225 Safefree(AvALLOC(av)); 6226 } 6227 6228 break; 6229 case SVt_PVLV: 6230 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */ 6231 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv))); 6232 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh; 6233 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv); 6234 } 6235 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */ 6236 SvREFCNT_dec(LvTARG(sv)); 6237 if (isREGEXP(sv)) goto freeregexp; 6238 case SVt_PVGV: 6239 if (isGV_with_GP(sv)) { 6240 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv))) 6241 && HvENAME_get(stash)) 6242 mro_method_changed_in(stash); 6243 gp_free(MUTABLE_GV(sv)); 6244 if (GvNAME_HEK(sv)) 6245 unshare_hek(GvNAME_HEK(sv)); 6246 /* If we're in a stash, we don't own a reference to it. 6247 * However it does have a back reference to us, which 6248 * needs to be cleared. */ 6249 if (!SvVALID(sv) && (stash = GvSTASH(sv))) 6250 sv_del_backref(MUTABLE_SV(stash), sv); 6251 } 6252 /* FIXME. There are probably more unreferenced pointers to SVs 6253 * in the interpreter struct that we should check and tidy in 6254 * a similar fashion to this: */ 6255 /* See also S_sv_unglob, which does the same thing. */ 6256 if ((const GV *)sv == PL_last_in_gv) 6257 PL_last_in_gv = NULL; 6258 else if ((const GV *)sv == PL_statgv) 6259 PL_statgv = NULL; 6260 else if ((const GV *)sv == PL_stderrgv) 6261 PL_stderrgv = NULL; 6262 case SVt_PVMG: 6263 case SVt_PVNV: 6264 case SVt_PVIV: 6265 case SVt_PV: 6266 freescalar: 6267 /* Don't bother with SvOOK_off(sv); as we're only going to 6268 * free it. */ 6269 if (SvOOK(sv)) { 6270 STRLEN offset; 6271 SvOOK_offset(sv, offset); 6272 SvPV_set(sv, SvPVX_mutable(sv) - offset); 6273 /* Don't even bother with turning off the OOK flag. */ 6274 } 6275 if (SvROK(sv)) { 6276 free_rv: 6277 { 6278 SV * const target = SvRV(sv); 6279 if (SvWEAKREF(sv)) 6280 sv_del_backref(target, sv); 6281 else 6282 next_sv = target; 6283 } 6284 } 6285 #ifdef PERL_ANY_COW 6286 else if (SvPVX_const(sv) 6287 && !(SvTYPE(sv) == SVt_PVIO 6288 && !(IoFLAGS(sv) & IOf_FAKE_DIRP))) 6289 { 6290 if (SvIsCOW(sv)) { 6291 if (DEBUG_C_TEST) { 6292 PerlIO_printf(Perl_debug_log, "Copy on write: clear\n"); 6293 sv_dump(sv); 6294 } 6295 if (SvLEN(sv)) { 6296 # ifdef PERL_OLD_COPY_ON_WRITE 6297 sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv)); 6298 # else 6299 if (CowREFCNT(sv)) { 6300 CowREFCNT(sv)--; 6301 SvLEN_set(sv, 0); 6302 } 6303 # endif 6304 } else { 6305 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv))); 6306 } 6307 6308 } 6309 # ifdef PERL_OLD_COPY_ON_WRITE 6310 else 6311 # endif 6312 if (SvLEN(sv)) { 6313 Safefree(SvPVX_mutable(sv)); 6314 } 6315 } 6316 #else 6317 else if (SvPVX_const(sv) && SvLEN(sv) 6318 && !(SvTYPE(sv) == SVt_PVIO 6319 && !(IoFLAGS(sv) & IOf_FAKE_DIRP))) 6320 Safefree(SvPVX_mutable(sv)); 6321 else if (SvPVX_const(sv) && SvIsCOW(sv)) { 6322 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv))); 6323 } 6324 #endif 6325 break; 6326 case SVt_NV: 6327 break; 6328 } 6329 6330 free_body: 6331 6332 SvFLAGS(sv) &= SVf_BREAK; 6333 SvFLAGS(sv) |= SVTYPEMASK; 6334 6335 sv_type_details = bodies_by_type + type; 6336 if (sv_type_details->arena) { 6337 del_body(((char *)SvANY(sv) + sv_type_details->offset), 6338 &PL_body_roots[type]); 6339 } 6340 else if (sv_type_details->body_size) { 6341 safefree(SvANY(sv)); 6342 } 6343 6344 free_head: 6345 /* caller is responsible for freeing the head of the original sv */ 6346 if (sv != orig_sv && !SvREFCNT(sv)) 6347 del_SV(sv); 6348 6349 /* grab and free next sv, if any */ 6350 get_next_sv: 6351 while (1) { 6352 sv = NULL; 6353 if (next_sv) { 6354 sv = next_sv; 6355 next_sv = NULL; 6356 } 6357 else if (!iter_sv) { 6358 break; 6359 } else if (SvTYPE(iter_sv) == SVt_PVAV) { 6360 AV *const av = (AV*)iter_sv; 6361 if (AvFILLp(av) > -1) { 6362 sv = AvARRAY(av)[AvFILLp(av)--]; 6363 } 6364 else { /* no more elements of current AV to free */ 6365 sv = iter_sv; 6366 type = SvTYPE(sv); 6367 /* restore previous value, squirrelled away */ 6368 iter_sv = AvARRAY(av)[AvMAX(av)]; 6369 Safefree(AvALLOC(av)); 6370 goto free_body; 6371 } 6372 } else if (SvTYPE(iter_sv) == SVt_PVHV) { 6373 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index); 6374 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) { 6375 /* no more elements of current HV to free */ 6376 sv = iter_sv; 6377 type = SvTYPE(sv); 6378 /* Restore previous values of iter_sv and hash_index, 6379 * squirrelled away */ 6380 assert(!SvOBJECT(sv)); 6381 iter_sv = (SV*)SvSTASH(sv); 6382 assert(!SvMAGICAL(sv)); 6383 hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index; 6384 #ifdef DEBUGGING 6385 /* perl -DA does not like rubbish in SvMAGIC. */ 6386 SvMAGIC_set(sv, 0); 6387 #endif 6388 6389 /* free any remaining detritus from the hash struct */ 6390 Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL); 6391 assert(!HvARRAY((HV*)sv)); 6392 goto free_body; 6393 } 6394 } 6395 6396 /* unrolled SvREFCNT_dec and sv_free2 follows: */ 6397 6398 if (!sv) 6399 continue; 6400 if (!SvREFCNT(sv)) { 6401 sv_free(sv); 6402 continue; 6403 } 6404 if (--(SvREFCNT(sv))) 6405 continue; 6406 #ifdef DEBUGGING 6407 if (SvTEMP(sv)) { 6408 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), 6409 "Attempt to free temp prematurely: SV 0x%"UVxf 6410 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE); 6411 continue; 6412 } 6413 #endif 6414 if (SvIMMORTAL(sv)) { 6415 /* make sure SvREFCNT(sv)==0 happens very seldom */ 6416 SvREFCNT(sv) = SvREFCNT_IMMORTAL; 6417 continue; 6418 } 6419 break; 6420 } /* while 1 */ 6421 6422 } /* while sv */ 6423 } 6424 6425 /* This routine curses the sv itself, not the object referenced by sv. So 6426 sv does not have to be ROK. */ 6427 6428 static bool 6429 S_curse(pTHX_ SV * const sv, const bool check_refcnt) { 6430 dVAR; 6431 6432 PERL_ARGS_ASSERT_CURSE; 6433 assert(SvOBJECT(sv)); 6434 6435 if (PL_defstash && /* Still have a symbol table? */ 6436 SvDESTROYABLE(sv)) 6437 { 6438 dSP; 6439 HV* stash; 6440 do { 6441 stash = SvSTASH(sv); 6442 assert(SvTYPE(stash) == SVt_PVHV); 6443 if (HvNAME(stash)) { 6444 CV* destructor = NULL; 6445 assert (SvOOK(stash)); 6446 if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash); 6447 if (!destructor || HvMROMETA(stash)->destroy_gen 6448 != PL_sub_generation) 6449 { 6450 GV * const gv = 6451 gv_fetchmeth_autoload(stash, "DESTROY", 7, 0); 6452 if (gv) destructor = GvCV(gv); 6453 if (!SvOBJECT(stash)) 6454 { 6455 SvSTASH(stash) = 6456 destructor ? (HV *)destructor : ((HV *)0)+1; 6457 HvAUX(stash)->xhv_mro_meta->destroy_gen = 6458 PL_sub_generation; 6459 } 6460 } 6461 assert(!destructor || destructor == ((CV *)0)+1 6462 || SvTYPE(destructor) == SVt_PVCV); 6463 if (destructor && destructor != ((CV *)0)+1 6464 /* A constant subroutine can have no side effects, so 6465 don't bother calling it. */ 6466 && !CvCONST(destructor) 6467 /* Don't bother calling an empty destructor or one that 6468 returns immediately. */ 6469 && (CvISXSUB(destructor) 6470 || (CvSTART(destructor) 6471 && (CvSTART(destructor)->op_next->op_type 6472 != OP_LEAVESUB) 6473 && (CvSTART(destructor)->op_next->op_type 6474 != OP_PUSHMARK 6475 || CvSTART(destructor)->op_next->op_next->op_type 6476 != OP_RETURN 6477 ) 6478 )) 6479 ) 6480 { 6481 SV* const tmpref = newRV(sv); 6482 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */ 6483 ENTER; 6484 PUSHSTACKi(PERLSI_DESTROY); 6485 EXTEND(SP, 2); 6486 PUSHMARK(SP); 6487 PUSHs(tmpref); 6488 PUTBACK; 6489 call_sv(MUTABLE_SV(destructor), 6490 G_DISCARD|G_EVAL|G_KEEPERR|G_VOID); 6491 POPSTACK; 6492 SPAGAIN; 6493 LEAVE; 6494 if(SvREFCNT(tmpref) < 2) { 6495 /* tmpref is not kept alive! */ 6496 SvREFCNT(sv)--; 6497 SvRV_set(tmpref, NULL); 6498 SvROK_off(tmpref); 6499 } 6500 SvREFCNT_dec_NN(tmpref); 6501 } 6502 } 6503 } while (SvOBJECT(sv) && SvSTASH(sv) != stash); 6504 6505 6506 if (check_refcnt && SvREFCNT(sv)) { 6507 if (PL_in_clean_objs) 6508 Perl_croak(aTHX_ 6509 "DESTROY created new reference to dead object '%"HEKf"'", 6510 HEKfARG(HvNAME_HEK(stash))); 6511 /* DESTROY gave object new lease on life */ 6512 return FALSE; 6513 } 6514 } 6515 6516 if (SvOBJECT(sv)) { 6517 HV * const stash = SvSTASH(sv); 6518 /* Curse before freeing the stash, as freeing the stash could cause 6519 a recursive call into S_curse. */ 6520 SvOBJECT_off(sv); /* Curse the object. */ 6521 SvSTASH_set(sv,0); /* SvREFCNT_dec may try to read this */ 6522 SvREFCNT_dec(stash); /* possibly of changed persuasion */ 6523 } 6524 return TRUE; 6525 } 6526 6527 /* 6528 =for apidoc sv_newref 6529 6530 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper 6531 instead. 6532 6533 =cut 6534 */ 6535 6536 SV * 6537 Perl_sv_newref(pTHX_ SV *const sv) 6538 { 6539 PERL_UNUSED_CONTEXT; 6540 if (sv) 6541 (SvREFCNT(sv))++; 6542 return sv; 6543 } 6544 6545 /* 6546 =for apidoc sv_free 6547 6548 Decrement an SV's reference count, and if it drops to zero, call 6549 C<sv_clear> to invoke destructors and free up any memory used by 6550 the body; finally, deallocate the SV's head itself. 6551 Normally called via a wrapper macro C<SvREFCNT_dec>. 6552 6553 =cut 6554 */ 6555 6556 void 6557 Perl_sv_free(pTHX_ SV *const sv) 6558 { 6559 SvREFCNT_dec(sv); 6560 } 6561 6562 6563 /* Private helper function for SvREFCNT_dec(). 6564 * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */ 6565 6566 void 6567 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc) 6568 { 6569 dVAR; 6570 6571 PERL_ARGS_ASSERT_SV_FREE2; 6572 6573 if (rc == 1) { 6574 /* normal case */ 6575 SvREFCNT(sv) = 0; 6576 6577 #ifdef DEBUGGING 6578 if (SvTEMP(sv)) { 6579 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), 6580 "Attempt to free temp prematurely: SV 0x%"UVxf 6581 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE); 6582 return; 6583 } 6584 #endif 6585 if (SvIMMORTAL(sv)) { 6586 /* make sure SvREFCNT(sv)==0 happens very seldom */ 6587 SvREFCNT(sv) = SvREFCNT_IMMORTAL; 6588 return; 6589 } 6590 sv_clear(sv); 6591 if (! SvREFCNT(sv)) /* may have have been resurrected */ 6592 del_SV(sv); 6593 return; 6594 } 6595 6596 /* handle exceptional cases */ 6597 6598 assert(rc == 0); 6599 6600 if (SvFLAGS(sv) & SVf_BREAK) 6601 /* this SV's refcnt has been artificially decremented to 6602 * trigger cleanup */ 6603 return; 6604 if (PL_in_clean_all) /* All is fair */ 6605 return; 6606 if (SvIMMORTAL(sv)) { 6607 /* make sure SvREFCNT(sv)==0 happens very seldom */ 6608 SvREFCNT(sv) = SvREFCNT_IMMORTAL; 6609 return; 6610 } 6611 if (ckWARN_d(WARN_INTERNAL)) { 6612 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP 6613 Perl_dump_sv_child(aTHX_ sv); 6614 #else 6615 #ifdef DEBUG_LEAKING_SCALARS 6616 sv_dump(sv); 6617 #endif 6618 #ifdef DEBUG_LEAKING_SCALARS_ABORT 6619 if (PL_warnhook == PERL_WARNHOOK_FATAL 6620 || ckDEAD(packWARN(WARN_INTERNAL))) { 6621 /* Don't let Perl_warner cause us to escape our fate: */ 6622 abort(); 6623 } 6624 #endif 6625 /* This may not return: */ 6626 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), 6627 "Attempt to free unreferenced scalar: SV 0x%"UVxf 6628 pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE); 6629 #endif 6630 } 6631 #ifdef DEBUG_LEAKING_SCALARS_ABORT 6632 abort(); 6633 #endif 6634 6635 } 6636 6637 6638 /* 6639 =for apidoc sv_len 6640 6641 Returns the length of the string in the SV. Handles magic and type 6642 coercion and sets the UTF8 flag appropriately. See also C<SvCUR>, which 6643 gives raw access to the xpv_cur slot. 6644 6645 =cut 6646 */ 6647 6648 STRLEN 6649 Perl_sv_len(pTHX_ SV *const sv) 6650 { 6651 STRLEN len; 6652 6653 if (!sv) 6654 return 0; 6655 6656 (void)SvPV_const(sv, len); 6657 return len; 6658 } 6659 6660 /* 6661 =for apidoc sv_len_utf8 6662 6663 Returns the number of characters in the string in an SV, counting wide 6664 UTF-8 bytes as a single character. Handles magic and type coercion. 6665 6666 =cut 6667 */ 6668 6669 /* 6670 * The length is cached in PERL_MAGIC_utf8, in the mg_len field. Also the 6671 * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below. 6672 * (Note that the mg_len is not the length of the mg_ptr field. 6673 * This allows the cache to store the character length of the string without 6674 * needing to malloc() extra storage to attach to the mg_ptr.) 6675 * 6676 */ 6677 6678 STRLEN 6679 Perl_sv_len_utf8(pTHX_ SV *const sv) 6680 { 6681 if (!sv) 6682 return 0; 6683 6684 SvGETMAGIC(sv); 6685 return sv_len_utf8_nomg(sv); 6686 } 6687 6688 STRLEN 6689 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv) 6690 { 6691 dVAR; 6692 STRLEN len; 6693 const U8 *s = (U8*)SvPV_nomg_const(sv, len); 6694 6695 PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG; 6696 6697 if (PL_utf8cache && SvUTF8(sv)) { 6698 STRLEN ulen; 6699 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL; 6700 6701 if (mg && (mg->mg_len != -1 || mg->mg_ptr)) { 6702 if (mg->mg_len != -1) 6703 ulen = mg->mg_len; 6704 else { 6705 /* We can use the offset cache for a headstart. 6706 The longer value is stored in the first pair. */ 6707 STRLEN *cache = (STRLEN *) mg->mg_ptr; 6708 6709 ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1], 6710 s + len); 6711 } 6712 6713 if (PL_utf8cache < 0) { 6714 const STRLEN real = Perl_utf8_length(aTHX_ s, s + len); 6715 assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv); 6716 } 6717 } 6718 else { 6719 ulen = Perl_utf8_length(aTHX_ s, s + len); 6720 utf8_mg_len_cache_update(sv, &mg, ulen); 6721 } 6722 return ulen; 6723 } 6724 return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len; 6725 } 6726 6727 /* Walk forwards to find the byte corresponding to the passed in UTF-8 6728 offset. */ 6729 static STRLEN 6730 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send, 6731 STRLEN *const uoffset_p, bool *const at_end) 6732 { 6733 const U8 *s = start; 6734 STRLEN uoffset = *uoffset_p; 6735 6736 PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS; 6737 6738 while (s < send && uoffset) { 6739 --uoffset; 6740 s += UTF8SKIP(s); 6741 } 6742 if (s == send) { 6743 *at_end = TRUE; 6744 } 6745 else if (s > send) { 6746 *at_end = TRUE; 6747 /* This is the existing behaviour. Possibly it should be a croak, as 6748 it's actually a bounds error */ 6749 s = send; 6750 } 6751 *uoffset_p -= uoffset; 6752 return s - start; 6753 } 6754 6755 /* Given the length of the string in both bytes and UTF-8 characters, decide 6756 whether to walk forwards or backwards to find the byte corresponding to 6757 the passed in UTF-8 offset. */ 6758 static STRLEN 6759 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send, 6760 STRLEN uoffset, const STRLEN uend) 6761 { 6762 STRLEN backw = uend - uoffset; 6763 6764 PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY; 6765 6766 if (uoffset < 2 * backw) { 6767 /* The assumption is that going forwards is twice the speed of going 6768 forward (that's where the 2 * backw comes from). 6769 (The real figure of course depends on the UTF-8 data.) */ 6770 const U8 *s = start; 6771 6772 while (s < send && uoffset--) 6773 s += UTF8SKIP(s); 6774 assert (s <= send); 6775 if (s > send) 6776 s = send; 6777 return s - start; 6778 } 6779 6780 while (backw--) { 6781 send--; 6782 while (UTF8_IS_CONTINUATION(*send)) 6783 send--; 6784 } 6785 return send - start; 6786 } 6787 6788 /* For the string representation of the given scalar, find the byte 6789 corresponding to the passed in UTF-8 offset. uoffset0 and boffset0 6790 give another position in the string, *before* the sought offset, which 6791 (which is always true, as 0, 0 is a valid pair of positions), which should 6792 help reduce the amount of linear searching. 6793 If *mgp is non-NULL, it should point to the UTF-8 cache magic, which 6794 will be used to reduce the amount of linear searching. The cache will be 6795 created if necessary, and the found value offered to it for update. */ 6796 static STRLEN 6797 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start, 6798 const U8 *const send, STRLEN uoffset, 6799 STRLEN uoffset0, STRLEN boffset0) 6800 { 6801 STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy. */ 6802 bool found = FALSE; 6803 bool at_end = FALSE; 6804 6805 PERL_ARGS_ASSERT_SV_POS_U2B_CACHED; 6806 6807 assert (uoffset >= uoffset0); 6808 6809 if (!uoffset) 6810 return 0; 6811 6812 if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv) 6813 && PL_utf8cache 6814 && (*mgp || (SvTYPE(sv) >= SVt_PVMG && 6815 (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) { 6816 if ((*mgp)->mg_ptr) { 6817 STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr; 6818 if (cache[0] == uoffset) { 6819 /* An exact match. */ 6820 return cache[1]; 6821 } 6822 if (cache[2] == uoffset) { 6823 /* An exact match. */ 6824 return cache[3]; 6825 } 6826 6827 if (cache[0] < uoffset) { 6828 /* The cache already knows part of the way. */ 6829 if (cache[0] > uoffset0) { 6830 /* The cache knows more than the passed in pair */ 6831 uoffset0 = cache[0]; 6832 boffset0 = cache[1]; 6833 } 6834 if ((*mgp)->mg_len != -1) { 6835 /* And we know the end too. */ 6836 boffset = boffset0 6837 + sv_pos_u2b_midway(start + boffset0, send, 6838 uoffset - uoffset0, 6839 (*mgp)->mg_len - uoffset0); 6840 } else { 6841 uoffset -= uoffset0; 6842 boffset = boffset0 6843 + sv_pos_u2b_forwards(start + boffset0, 6844 send, &uoffset, &at_end); 6845 uoffset += uoffset0; 6846 } 6847 } 6848 else if (cache[2] < uoffset) { 6849 /* We're between the two cache entries. */ 6850 if (cache[2] > uoffset0) { 6851 /* and the cache knows more than the passed in pair */ 6852 uoffset0 = cache[2]; 6853 boffset0 = cache[3]; 6854 } 6855 6856 boffset = boffset0 6857 + sv_pos_u2b_midway(start + boffset0, 6858 start + cache[1], 6859 uoffset - uoffset0, 6860 cache[0] - uoffset0); 6861 } else { 6862 boffset = boffset0 6863 + sv_pos_u2b_midway(start + boffset0, 6864 start + cache[3], 6865 uoffset - uoffset0, 6866 cache[2] - uoffset0); 6867 } 6868 found = TRUE; 6869 } 6870 else if ((*mgp)->mg_len != -1) { 6871 /* If we can take advantage of a passed in offset, do so. */ 6872 /* In fact, offset0 is either 0, or less than offset, so don't 6873 need to worry about the other possibility. */ 6874 boffset = boffset0 6875 + sv_pos_u2b_midway(start + boffset0, send, 6876 uoffset - uoffset0, 6877 (*mgp)->mg_len - uoffset0); 6878 found = TRUE; 6879 } 6880 } 6881 6882 if (!found || PL_utf8cache < 0) { 6883 STRLEN real_boffset; 6884 uoffset -= uoffset0; 6885 real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0, 6886 send, &uoffset, &at_end); 6887 uoffset += uoffset0; 6888 6889 if (found && PL_utf8cache < 0) 6890 assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset, 6891 real_boffset, sv); 6892 boffset = real_boffset; 6893 } 6894 6895 if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) { 6896 if (at_end) 6897 utf8_mg_len_cache_update(sv, mgp, uoffset); 6898 else 6899 utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start); 6900 } 6901 return boffset; 6902 } 6903 6904 6905 /* 6906 =for apidoc sv_pos_u2b_flags 6907 6908 Converts the value pointed to by offsetp from a count of UTF-8 chars from 6909 the start of the string, to a count of the equivalent number of bytes; if 6910 lenp is non-zero, it does the same to lenp, but this time starting from 6911 the offset, rather than from the start 6912 of the string. Handles type coercion. 6913 I<flags> is passed to C<SvPV_flags>, and usually should be 6914 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic. 6915 6916 =cut 6917 */ 6918 6919 /* 6920 * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential 6921 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and 6922 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update(). 6923 * 6924 */ 6925 6926 STRLEN 6927 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp, 6928 U32 flags) 6929 { 6930 const U8 *start; 6931 STRLEN len; 6932 STRLEN boffset; 6933 6934 PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS; 6935 6936 start = (U8*)SvPV_flags(sv, len, flags); 6937 if (len) { 6938 const U8 * const send = start + len; 6939 MAGIC *mg = NULL; 6940 boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0); 6941 6942 if (lenp 6943 && *lenp /* don't bother doing work for 0, as its bytes equivalent 6944 is 0, and *lenp is already set to that. */) { 6945 /* Convert the relative offset to absolute. */ 6946 const STRLEN uoffset2 = uoffset + *lenp; 6947 const STRLEN boffset2 6948 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2, 6949 uoffset, boffset) - boffset; 6950 6951 *lenp = boffset2; 6952 } 6953 } else { 6954 if (lenp) 6955 *lenp = 0; 6956 boffset = 0; 6957 } 6958 6959 return boffset; 6960 } 6961 6962 /* 6963 =for apidoc sv_pos_u2b 6964 6965 Converts the value pointed to by offsetp from a count of UTF-8 chars from 6966 the start of the string, to a count of the equivalent number of bytes; if 6967 lenp is non-zero, it does the same to lenp, but this time starting from 6968 the offset, rather than from the start of the string. Handles magic and 6969 type coercion. 6970 6971 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer 6972 than 2Gb. 6973 6974 =cut 6975 */ 6976 6977 /* 6978 * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential 6979 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and 6980 * byte offsets. See also the comments of S_utf8_mg_pos_cache_update(). 6981 * 6982 */ 6983 6984 /* This function is subject to size and sign problems */ 6985 6986 void 6987 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp) 6988 { 6989 PERL_ARGS_ASSERT_SV_POS_U2B; 6990 6991 if (lenp) { 6992 STRLEN ulen = (STRLEN)*lenp; 6993 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen, 6994 SV_GMAGIC|SV_CONST_RETURN); 6995 *lenp = (I32)ulen; 6996 } else { 6997 *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL, 6998 SV_GMAGIC|SV_CONST_RETURN); 6999 } 7000 } 7001 7002 static void 7003 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, 7004 const STRLEN ulen) 7005 { 7006 PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE; 7007 if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv)) 7008 return; 7009 7010 if (!*mgp && (SvTYPE(sv) < SVt_PVMG || 7011 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) { 7012 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0); 7013 } 7014 assert(*mgp); 7015 7016 (*mgp)->mg_len = ulen; 7017 /* For now, treat "overflowed" as "still unknown". See RT #72924. */ 7018 if (ulen != (STRLEN) (*mgp)->mg_len) 7019 (*mgp)->mg_len = -1; 7020 } 7021 7022 /* Create and update the UTF8 magic offset cache, with the proffered utf8/ 7023 byte length pairing. The (byte) length of the total SV is passed in too, 7024 as blen, because for some (more esoteric) SVs, the call to SvPV_const() 7025 may not have updated SvCUR, so we can't rely on reading it directly. 7026 7027 The proffered utf8/byte length pairing isn't used if the cache already has 7028 two pairs, and swapping either for the proffered pair would increase the 7029 RMS of the intervals between known byte offsets. 7030 7031 The cache itself consists of 4 STRLEN values 7032 0: larger UTF-8 offset 7033 1: corresponding byte offset 7034 2: smaller UTF-8 offset 7035 3: corresponding byte offset 7036 7037 Unused cache pairs have the value 0, 0. 7038 Keeping the cache "backwards" means that the invariant of 7039 cache[0] >= cache[2] is maintained even with empty slots, which means that 7040 the code that uses it doesn't need to worry if only 1 entry has actually 7041 been set to non-zero. It also makes the "position beyond the end of the 7042 cache" logic much simpler, as the first slot is always the one to start 7043 from. 7044 */ 7045 static void 7046 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte, 7047 const STRLEN utf8, const STRLEN blen) 7048 { 7049 STRLEN *cache; 7050 7051 PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE; 7052 7053 if (SvREADONLY(sv)) 7054 return; 7055 7056 if (!*mgp && (SvTYPE(sv) < SVt_PVMG || 7057 !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) { 7058 *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0, 7059 0); 7060 (*mgp)->mg_len = -1; 7061 } 7062 assert(*mgp); 7063 7064 if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) { 7065 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN); 7066 (*mgp)->mg_ptr = (char *) cache; 7067 } 7068 assert(cache); 7069 7070 if (PL_utf8cache < 0 && SvPOKp(sv)) { 7071 /* SvPOKp() because it's possible that sv has string overloading, and 7072 therefore is a reference, hence SvPVX() is actually a pointer. 7073 This cures the (very real) symptoms of RT 69422, but I'm not actually 7074 sure whether we should even be caching the results of UTF-8 7075 operations on overloading, given that nothing stops overloading 7076 returning a different value every time it's called. */ 7077 const U8 *start = (const U8 *) SvPVX_const(sv); 7078 const STRLEN realutf8 = utf8_length(start, start + byte); 7079 7080 assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8, 7081 sv); 7082 } 7083 7084 /* Cache is held with the later position first, to simplify the code 7085 that deals with unbounded ends. */ 7086 7087 ASSERT_UTF8_CACHE(cache); 7088 if (cache[1] == 0) { 7089 /* Cache is totally empty */ 7090 cache[0] = utf8; 7091 cache[1] = byte; 7092 } else if (cache[3] == 0) { 7093 if (byte > cache[1]) { 7094 /* New one is larger, so goes first. */ 7095 cache[2] = cache[0]; 7096 cache[3] = cache[1]; 7097 cache[0] = utf8; 7098 cache[1] = byte; 7099 } else { 7100 cache[2] = utf8; 7101 cache[3] = byte; 7102 } 7103 } else { 7104 #define THREEWAY_SQUARE(a,b,c,d) \ 7105 ((float)((d) - (c))) * ((float)((d) - (c))) \ 7106 + ((float)((c) - (b))) * ((float)((c) - (b))) \ 7107 + ((float)((b) - (a))) * ((float)((b) - (a))) 7108 7109 /* Cache has 2 slots in use, and we know three potential pairs. 7110 Keep the two that give the lowest RMS distance. Do the 7111 calculation in bytes simply because we always know the byte 7112 length. squareroot has the same ordering as the positive value, 7113 so don't bother with the actual square root. */ 7114 if (byte > cache[1]) { 7115 /* New position is after the existing pair of pairs. */ 7116 const float keep_earlier 7117 = THREEWAY_SQUARE(0, cache[3], byte, blen); 7118 const float keep_later 7119 = THREEWAY_SQUARE(0, cache[1], byte, blen); 7120 7121 if (keep_later < keep_earlier) { 7122 cache[2] = cache[0]; 7123 cache[3] = cache[1]; 7124 cache[0] = utf8; 7125 cache[1] = byte; 7126 } 7127 else { 7128 cache[0] = utf8; 7129 cache[1] = byte; 7130 } 7131 } 7132 else if (byte > cache[3]) { 7133 /* New position is between the existing pair of pairs. */ 7134 const float keep_earlier 7135 = THREEWAY_SQUARE(0, cache[3], byte, blen); 7136 const float keep_later 7137 = THREEWAY_SQUARE(0, byte, cache[1], blen); 7138 7139 if (keep_later < keep_earlier) { 7140 cache[2] = utf8; 7141 cache[3] = byte; 7142 } 7143 else { 7144 cache[0] = utf8; 7145 cache[1] = byte; 7146 } 7147 } 7148 else { 7149 /* New position is before the existing pair of pairs. */ 7150 const float keep_earlier 7151 = THREEWAY_SQUARE(0, byte, cache[3], blen); 7152 const float keep_later 7153 = THREEWAY_SQUARE(0, byte, cache[1], blen); 7154 7155 if (keep_later < keep_earlier) { 7156 cache[2] = utf8; 7157 cache[3] = byte; 7158 } 7159 else { 7160 cache[0] = cache[2]; 7161 cache[1] = cache[3]; 7162 cache[2] = utf8; 7163 cache[3] = byte; 7164 } 7165 } 7166 } 7167 ASSERT_UTF8_CACHE(cache); 7168 } 7169 7170 /* We already know all of the way, now we may be able to walk back. The same 7171 assumption is made as in S_sv_pos_u2b_midway(), namely that walking 7172 backward is half the speed of walking forward. */ 7173 static STRLEN 7174 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target, 7175 const U8 *end, STRLEN endu) 7176 { 7177 const STRLEN forw = target - s; 7178 STRLEN backw = end - target; 7179 7180 PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY; 7181 7182 if (forw < 2 * backw) { 7183 return utf8_length(s, target); 7184 } 7185 7186 while (end > target) { 7187 end--; 7188 while (UTF8_IS_CONTINUATION(*end)) { 7189 end--; 7190 } 7191 endu--; 7192 } 7193 return endu; 7194 } 7195 7196 /* 7197 =for apidoc sv_pos_b2u 7198 7199 Converts the value pointed to by offsetp from a count of bytes from the 7200 start of the string, to a count of the equivalent number of UTF-8 chars. 7201 Handles magic and type coercion. 7202 7203 =cut 7204 */ 7205 7206 /* 7207 * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential 7208 * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and 7209 * byte offsets. 7210 * 7211 */ 7212 void 7213 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp) 7214 { 7215 const U8* s; 7216 const STRLEN byte = *offsetp; 7217 STRLEN len = 0; /* Actually always set, but let's keep gcc happy. */ 7218 STRLEN blen; 7219 MAGIC* mg = NULL; 7220 const U8* send; 7221 bool found = FALSE; 7222 7223 PERL_ARGS_ASSERT_SV_POS_B2U; 7224 7225 if (!sv) 7226 return; 7227 7228 s = (const U8*)SvPV_const(sv, blen); 7229 7230 if (blen < byte) 7231 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf 7232 ", byte=%"UVuf, (UV)blen, (UV)byte); 7233 7234 send = s + byte; 7235 7236 if (!SvREADONLY(sv) 7237 && PL_utf8cache 7238 && SvTYPE(sv) >= SVt_PVMG 7239 && (mg = mg_find(sv, PERL_MAGIC_utf8))) 7240 { 7241 if (mg->mg_ptr) { 7242 STRLEN * const cache = (STRLEN *) mg->mg_ptr; 7243 if (cache[1] == byte) { 7244 /* An exact match. */ 7245 *offsetp = cache[0]; 7246 return; 7247 } 7248 if (cache[3] == byte) { 7249 /* An exact match. */ 7250 *offsetp = cache[2]; 7251 return; 7252 } 7253 7254 if (cache[1] < byte) { 7255 /* We already know part of the way. */ 7256 if (mg->mg_len != -1) { 7257 /* Actually, we know the end too. */ 7258 len = cache[0] 7259 + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send, 7260 s + blen, mg->mg_len - cache[0]); 7261 } else { 7262 len = cache[0] + utf8_length(s + cache[1], send); 7263 } 7264 } 7265 else if (cache[3] < byte) { 7266 /* We're between the two cached pairs, so we do the calculation 7267 offset by the byte/utf-8 positions for the earlier pair, 7268 then add the utf-8 characters from the string start to 7269 there. */ 7270 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send, 7271 s + cache[1], cache[0] - cache[2]) 7272 + cache[2]; 7273 7274 } 7275 else { /* cache[3] > byte */ 7276 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3], 7277 cache[2]); 7278 7279 } 7280 ASSERT_UTF8_CACHE(cache); 7281 found = TRUE; 7282 } else if (mg->mg_len != -1) { 7283 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len); 7284 found = TRUE; 7285 } 7286 } 7287 if (!found || PL_utf8cache < 0) { 7288 const STRLEN real_len = utf8_length(s, send); 7289 7290 if (found && PL_utf8cache < 0) 7291 assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv); 7292 len = real_len; 7293 } 7294 *offsetp = len; 7295 7296 if (PL_utf8cache) { 7297 if (blen == byte) 7298 utf8_mg_len_cache_update(sv, &mg, len); 7299 else 7300 utf8_mg_pos_cache_update(sv, &mg, byte, len, blen); 7301 } 7302 } 7303 7304 static void 7305 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache, 7306 STRLEN real, SV *const sv) 7307 { 7308 PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT; 7309 7310 /* As this is debugging only code, save space by keeping this test here, 7311 rather than inlining it in all the callers. */ 7312 if (from_cache == real) 7313 return; 7314 7315 /* Need to turn the assertions off otherwise we may recurse infinitely 7316 while printing error messages. */ 7317 SAVEI8(PL_utf8cache); 7318 PL_utf8cache = 0; 7319 Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf, 7320 func, (UV) from_cache, (UV) real, SVfARG(sv)); 7321 } 7322 7323 /* 7324 =for apidoc sv_eq 7325 7326 Returns a boolean indicating whether the strings in the two SVs are 7327 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will 7328 coerce its args to strings if necessary. 7329 7330 =for apidoc sv_eq_flags 7331 7332 Returns a boolean indicating whether the strings in the two SVs are 7333 identical. Is UTF-8 and 'use bytes' aware and coerces its args to strings 7334 if necessary. If the flags include SV_GMAGIC, it handles get-magic, too. 7335 7336 =cut 7337 */ 7338 7339 I32 7340 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags) 7341 { 7342 dVAR; 7343 const char *pv1; 7344 STRLEN cur1; 7345 const char *pv2; 7346 STRLEN cur2; 7347 I32 eq = 0; 7348 SV* svrecode = NULL; 7349 7350 if (!sv1) { 7351 pv1 = ""; 7352 cur1 = 0; 7353 } 7354 else { 7355 /* if pv1 and pv2 are the same, second SvPV_const call may 7356 * invalidate pv1 (if we are handling magic), so we may need to 7357 * make a copy */ 7358 if (sv1 == sv2 && flags & SV_GMAGIC 7359 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) { 7360 pv1 = SvPV_const(sv1, cur1); 7361 sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2)); 7362 } 7363 pv1 = SvPV_flags_const(sv1, cur1, flags); 7364 } 7365 7366 if (!sv2){ 7367 pv2 = ""; 7368 cur2 = 0; 7369 } 7370 else 7371 pv2 = SvPV_flags_const(sv2, cur2, flags); 7372 7373 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) { 7374 /* Differing utf8ness. 7375 * Do not UTF8size the comparands as a side-effect. */ 7376 if (PL_encoding) { 7377 if (SvUTF8(sv1)) { 7378 svrecode = newSVpvn(pv2, cur2); 7379 sv_recode_to_utf8(svrecode, PL_encoding); 7380 pv2 = SvPV_const(svrecode, cur2); 7381 } 7382 else { 7383 svrecode = newSVpvn(pv1, cur1); 7384 sv_recode_to_utf8(svrecode, PL_encoding); 7385 pv1 = SvPV_const(svrecode, cur1); 7386 } 7387 /* Now both are in UTF-8. */ 7388 if (cur1 != cur2) { 7389 SvREFCNT_dec_NN(svrecode); 7390 return FALSE; 7391 } 7392 } 7393 else { 7394 if (SvUTF8(sv1)) { 7395 /* sv1 is the UTF-8 one */ 7396 return bytes_cmp_utf8((const U8*)pv2, cur2, 7397 (const U8*)pv1, cur1) == 0; 7398 } 7399 else { 7400 /* sv2 is the UTF-8 one */ 7401 return bytes_cmp_utf8((const U8*)pv1, cur1, 7402 (const U8*)pv2, cur2) == 0; 7403 } 7404 } 7405 } 7406 7407 if (cur1 == cur2) 7408 eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1); 7409 7410 SvREFCNT_dec(svrecode); 7411 7412 return eq; 7413 } 7414 7415 /* 7416 =for apidoc sv_cmp 7417 7418 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the 7419 string in C<sv1> is less than, equal to, or greater than the string in 7420 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will 7421 coerce its args to strings if necessary. See also C<sv_cmp_locale>. 7422 7423 =for apidoc sv_cmp_flags 7424 7425 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the 7426 string in C<sv1> is less than, equal to, or greater than the string in 7427 C<sv2>. Is UTF-8 and 'use bytes' aware and will coerce its args to strings 7428 if necessary. If the flags include SV_GMAGIC, it handles get magic. See 7429 also C<sv_cmp_locale_flags>. 7430 7431 =cut 7432 */ 7433 7434 I32 7435 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2) 7436 { 7437 return sv_cmp_flags(sv1, sv2, SV_GMAGIC); 7438 } 7439 7440 I32 7441 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2, 7442 const U32 flags) 7443 { 7444 dVAR; 7445 STRLEN cur1, cur2; 7446 const char *pv1, *pv2; 7447 I32 cmp; 7448 SV *svrecode = NULL; 7449 7450 if (!sv1) { 7451 pv1 = ""; 7452 cur1 = 0; 7453 } 7454 else 7455 pv1 = SvPV_flags_const(sv1, cur1, flags); 7456 7457 if (!sv2) { 7458 pv2 = ""; 7459 cur2 = 0; 7460 } 7461 else 7462 pv2 = SvPV_flags_const(sv2, cur2, flags); 7463 7464 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) { 7465 /* Differing utf8ness. 7466 * Do not UTF8size the comparands as a side-effect. */ 7467 if (SvUTF8(sv1)) { 7468 if (PL_encoding) { 7469 svrecode = newSVpvn(pv2, cur2); 7470 sv_recode_to_utf8(svrecode, PL_encoding); 7471 pv2 = SvPV_const(svrecode, cur2); 7472 } 7473 else { 7474 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2, 7475 (const U8*)pv1, cur1); 7476 return retval ? retval < 0 ? -1 : +1 : 0; 7477 } 7478 } 7479 else { 7480 if (PL_encoding) { 7481 svrecode = newSVpvn(pv1, cur1); 7482 sv_recode_to_utf8(svrecode, PL_encoding); 7483 pv1 = SvPV_const(svrecode, cur1); 7484 } 7485 else { 7486 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1, 7487 (const U8*)pv2, cur2); 7488 return retval ? retval < 0 ? -1 : +1 : 0; 7489 } 7490 } 7491 } 7492 7493 if (!cur1) { 7494 cmp = cur2 ? -1 : 0; 7495 } else if (!cur2) { 7496 cmp = 1; 7497 } else { 7498 const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2); 7499 7500 if (retval) { 7501 cmp = retval < 0 ? -1 : 1; 7502 } else if (cur1 == cur2) { 7503 cmp = 0; 7504 } else { 7505 cmp = cur1 < cur2 ? -1 : 1; 7506 } 7507 } 7508 7509 SvREFCNT_dec(svrecode); 7510 7511 return cmp; 7512 } 7513 7514 /* 7515 =for apidoc sv_cmp_locale 7516 7517 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and 7518 'use bytes' aware, handles get magic, and will coerce its args to strings 7519 if necessary. See also C<sv_cmp>. 7520 7521 =for apidoc sv_cmp_locale_flags 7522 7523 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and 7524 'use bytes' aware and will coerce its args to strings if necessary. If the 7525 flags contain SV_GMAGIC, it handles get magic. See also C<sv_cmp_flags>. 7526 7527 =cut 7528 */ 7529 7530 I32 7531 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2) 7532 { 7533 return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC); 7534 } 7535 7536 I32 7537 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2, 7538 const U32 flags) 7539 { 7540 dVAR; 7541 #ifdef USE_LOCALE_COLLATE 7542 7543 char *pv1, *pv2; 7544 STRLEN len1, len2; 7545 I32 retval; 7546 7547 if (PL_collation_standard) 7548 goto raw_compare; 7549 7550 len1 = 0; 7551 pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL; 7552 len2 = 0; 7553 pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL; 7554 7555 if (!pv1 || !len1) { 7556 if (pv2 && len2) 7557 return -1; 7558 else 7559 goto raw_compare; 7560 } 7561 else { 7562 if (!pv2 || !len2) 7563 return 1; 7564 } 7565 7566 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2); 7567 7568 if (retval) 7569 return retval < 0 ? -1 : 1; 7570 7571 /* 7572 * When the result of collation is equality, that doesn't mean 7573 * that there are no differences -- some locales exclude some 7574 * characters from consideration. So to avoid false equalities, 7575 * we use the raw string as a tiebreaker. 7576 */ 7577 7578 raw_compare: 7579 /*FALLTHROUGH*/ 7580 7581 #endif /* USE_LOCALE_COLLATE */ 7582 7583 return sv_cmp(sv1, sv2); 7584 } 7585 7586 7587 #ifdef USE_LOCALE_COLLATE 7588 7589 /* 7590 =for apidoc sv_collxfrm 7591 7592 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See 7593 C<sv_collxfrm_flags>. 7594 7595 =for apidoc sv_collxfrm_flags 7596 7597 Add Collate Transform magic to an SV if it doesn't already have it. If the 7598 flags contain SV_GMAGIC, it handles get-magic. 7599 7600 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the 7601 scalar data of the variable, but transformed to such a format that a normal 7602 memory comparison can be used to compare the data according to the locale 7603 settings. 7604 7605 =cut 7606 */ 7607 7608 char * 7609 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags) 7610 { 7611 dVAR; 7612 MAGIC *mg; 7613 7614 PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS; 7615 7616 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL; 7617 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) { 7618 const char *s; 7619 char *xf; 7620 STRLEN len, xlen; 7621 7622 if (mg) 7623 Safefree(mg->mg_ptr); 7624 s = SvPV_flags_const(sv, len, flags); 7625 if ((xf = mem_collxfrm(s, len, &xlen))) { 7626 if (! mg) { 7627 #ifdef PERL_OLD_COPY_ON_WRITE 7628 if (SvIsCOW(sv)) 7629 sv_force_normal_flags(sv, 0); 7630 #endif 7631 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm, 7632 0, 0); 7633 assert(mg); 7634 } 7635 mg->mg_ptr = xf; 7636 mg->mg_len = xlen; 7637 } 7638 else { 7639 if (mg) { 7640 mg->mg_ptr = NULL; 7641 mg->mg_len = -1; 7642 } 7643 } 7644 } 7645 if (mg && mg->mg_ptr) { 7646 *nxp = mg->mg_len; 7647 return mg->mg_ptr + sizeof(PL_collation_ix); 7648 } 7649 else { 7650 *nxp = 0; 7651 return NULL; 7652 } 7653 } 7654 7655 #endif /* USE_LOCALE_COLLATE */ 7656 7657 static char * 7658 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append) 7659 { 7660 SV * const tsv = newSV(0); 7661 ENTER; 7662 SAVEFREESV(tsv); 7663 sv_gets(tsv, fp, 0); 7664 sv_utf8_upgrade_nomg(tsv); 7665 SvCUR_set(sv,append); 7666 sv_catsv(sv,tsv); 7667 LEAVE; 7668 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL; 7669 } 7670 7671 static char * 7672 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append) 7673 { 7674 SSize_t bytesread; 7675 const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */ 7676 /* Grab the size of the record we're getting */ 7677 char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append; 7678 7679 /* Go yank in */ 7680 #ifdef VMS 7681 #include <rms.h> 7682 int fd; 7683 Stat_t st; 7684 7685 /* With a true, record-oriented file on VMS, we need to use read directly 7686 * to ensure that we respect RMS record boundaries. The user is responsible 7687 * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum 7688 * record size) field. N.B. This is likely to produce invalid results on 7689 * varying-width character data when a record ends mid-character. 7690 */ 7691 fd = PerlIO_fileno(fp); 7692 if (fd != -1 7693 && PerlLIO_fstat(fd, &st) == 0 7694 && (st.st_fab_rfm == FAB$C_VAR 7695 || st.st_fab_rfm == FAB$C_VFC 7696 || st.st_fab_rfm == FAB$C_FIX)) { 7697 7698 bytesread = PerlLIO_read(fd, buffer, recsize); 7699 } 7700 else /* in-memory file from PerlIO::Scalar 7701 * or not a record-oriented file 7702 */ 7703 #endif 7704 { 7705 bytesread = PerlIO_read(fp, buffer, recsize); 7706 7707 /* At this point, the logic in sv_get() means that sv will 7708 be treated as utf-8 if the handle is utf8. 7709 */ 7710 if (PerlIO_isutf8(fp) && bytesread > 0) { 7711 char *bend = buffer + bytesread; 7712 char *bufp = buffer; 7713 size_t charcount = 0; 7714 bool charstart = TRUE; 7715 STRLEN skip = 0; 7716 7717 while (charcount < recsize) { 7718 /* count accumulated characters */ 7719 while (bufp < bend) { 7720 if (charstart) { 7721 skip = UTF8SKIP(bufp); 7722 } 7723 if (bufp + skip > bend) { 7724 /* partial at the end */ 7725 charstart = FALSE; 7726 break; 7727 } 7728 else { 7729 ++charcount; 7730 bufp += skip; 7731 charstart = TRUE; 7732 } 7733 } 7734 7735 if (charcount < recsize) { 7736 STRLEN readsize; 7737 STRLEN bufp_offset = bufp - buffer; 7738 SSize_t morebytesread; 7739 7740 /* originally I read enough to fill any incomplete 7741 character and the first byte of the next 7742 character if needed, but if there's many 7743 multi-byte encoded characters we're going to be 7744 making a read call for every character beyond 7745 the original read size. 7746 7747 So instead, read the rest of the character if 7748 any, and enough bytes to match at least the 7749 start bytes for each character we're going to 7750 read. 7751 */ 7752 if (charstart) 7753 readsize = recsize - charcount; 7754 else 7755 readsize = skip - (bend - bufp) + recsize - charcount - 1; 7756 buffer = SvGROW(sv, append + bytesread + readsize + 1) + append; 7757 bend = buffer + bytesread; 7758 morebytesread = PerlIO_read(fp, bend, readsize); 7759 if (morebytesread <= 0) { 7760 /* we're done, if we still have incomplete 7761 characters the check code in sv_gets() will 7762 warn about them. 7763 7764 I'd originally considered doing 7765 PerlIO_ungetc() on all but the lead 7766 character of the incomplete character, but 7767 read() doesn't do that, so I don't. 7768 */ 7769 break; 7770 } 7771 7772 /* prepare to scan some more */ 7773 bytesread += morebytesread; 7774 bend = buffer + bytesread; 7775 bufp = buffer + bufp_offset; 7776 } 7777 } 7778 } 7779 } 7780 7781 if (bytesread < 0) 7782 bytesread = 0; 7783 SvCUR_set(sv, bytesread + append); 7784 buffer[bytesread] = '\0'; 7785 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL; 7786 } 7787 7788 /* 7789 =for apidoc sv_gets 7790 7791 Get a line from the filehandle and store it into the SV, optionally 7792 appending to the currently-stored string. If C<append> is not 0, the 7793 line is appended to the SV instead of overwriting it. C<append> should 7794 be set to the byte offset that the appended string should start at 7795 in the SV (typically, C<SvCUR(sv)> is a suitable choice). 7796 7797 =cut 7798 */ 7799 7800 char * 7801 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append) 7802 { 7803 dVAR; 7804 const char *rsptr; 7805 STRLEN rslen; 7806 STDCHAR rslast; 7807 STDCHAR *bp; 7808 I32 cnt; 7809 I32 i = 0; 7810 I32 rspara = 0; 7811 7812 PERL_ARGS_ASSERT_SV_GETS; 7813 7814 if (SvTHINKFIRST(sv)) 7815 sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV); 7816 /* XXX. If you make this PVIV, then copy on write can copy scalars read 7817 from <>. 7818 However, perlbench says it's slower, because the existing swipe code 7819 is faster than copy on write. 7820 Swings and roundabouts. */ 7821 SvUPGRADE(sv, SVt_PV); 7822 7823 if (append) { 7824 if (PerlIO_isutf8(fp)) { 7825 if (!SvUTF8(sv)) { 7826 sv_utf8_upgrade_nomg(sv); 7827 sv_pos_u2b(sv,&append,0); 7828 } 7829 } else if (SvUTF8(sv)) { 7830 return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append); 7831 } 7832 } 7833 7834 SvPOK_only(sv); 7835 if (!append) { 7836 SvCUR_set(sv,0); 7837 } 7838 if (PerlIO_isutf8(fp)) 7839 SvUTF8_on(sv); 7840 7841 if (IN_PERL_COMPILETIME) { 7842 /* we always read code in line mode */ 7843 rsptr = "\n"; 7844 rslen = 1; 7845 } 7846 else if (RsSNARF(PL_rs)) { 7847 /* If it is a regular disk file use size from stat() as estimate 7848 of amount we are going to read -- may result in mallocing 7849 more memory than we really need if the layers below reduce 7850 the size we read (e.g. CRLF or a gzip layer). 7851 */ 7852 Stat_t st; 7853 if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode)) { 7854 const Off_t offset = PerlIO_tell(fp); 7855 if (offset != (Off_t) -1 && st.st_size + append > offset) { 7856 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1)); 7857 } 7858 } 7859 rsptr = NULL; 7860 rslen = 0; 7861 } 7862 else if (RsRECORD(PL_rs)) { 7863 return S_sv_gets_read_record(aTHX_ sv, fp, append); 7864 } 7865 else if (RsPARA(PL_rs)) { 7866 rsptr = "\n\n"; 7867 rslen = 2; 7868 rspara = 1; 7869 } 7870 else { 7871 /* Get $/ i.e. PL_rs into same encoding as stream wants */ 7872 if (PerlIO_isutf8(fp)) { 7873 rsptr = SvPVutf8(PL_rs, rslen); 7874 } 7875 else { 7876 if (SvUTF8(PL_rs)) { 7877 if (!sv_utf8_downgrade(PL_rs, TRUE)) { 7878 Perl_croak(aTHX_ "Wide character in $/"); 7879 } 7880 } 7881 rsptr = SvPV_const(PL_rs, rslen); 7882 } 7883 } 7884 7885 rslast = rslen ? rsptr[rslen - 1] : '\0'; 7886 7887 if (rspara) { /* have to do this both before and after */ 7888 do { /* to make sure file boundaries work right */ 7889 if (PerlIO_eof(fp)) 7890 return 0; 7891 i = PerlIO_getc(fp); 7892 if (i != '\n') { 7893 if (i == -1) 7894 return 0; 7895 PerlIO_ungetc(fp,i); 7896 break; 7897 } 7898 } while (i != EOF); 7899 } 7900 7901 /* See if we know enough about I/O mechanism to cheat it ! */ 7902 7903 /* This used to be #ifdef test - it is made run-time test for ease 7904 of abstracting out stdio interface. One call should be cheap 7905 enough here - and may even be a macro allowing compile 7906 time optimization. 7907 */ 7908 7909 if (PerlIO_fast_gets(fp)) { 7910 7911 /* 7912 * We're going to steal some values from the stdio struct 7913 * and put EVERYTHING in the innermost loop into registers. 7914 */ 7915 STDCHAR *ptr; 7916 STRLEN bpx; 7917 I32 shortbuffered; 7918 7919 #if defined(VMS) && defined(PERLIO_IS_STDIO) 7920 /* An ungetc()d char is handled separately from the regular 7921 * buffer, so we getc() it back out and stuff it in the buffer. 7922 */ 7923 i = PerlIO_getc(fp); 7924 if (i == EOF) return 0; 7925 *(--((*fp)->_ptr)) = (unsigned char) i; 7926 (*fp)->_cnt++; 7927 #endif 7928 7929 /* Here is some breathtakingly efficient cheating */ 7930 7931 cnt = PerlIO_get_cnt(fp); /* get count into register */ 7932 /* make sure we have the room */ 7933 if ((I32)(SvLEN(sv) - append) <= cnt + 1) { 7934 /* Not room for all of it 7935 if we are looking for a separator and room for some 7936 */ 7937 if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) { 7938 /* just process what we have room for */ 7939 shortbuffered = cnt - SvLEN(sv) + append + 1; 7940 cnt -= shortbuffered; 7941 } 7942 else { 7943 shortbuffered = 0; 7944 /* remember that cnt can be negative */ 7945 SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1)))); 7946 } 7947 } 7948 else 7949 shortbuffered = 0; 7950 bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */ 7951 ptr = (STDCHAR*)PerlIO_get_ptr(fp); 7952 DEBUG_P(PerlIO_printf(Perl_debug_log, 7953 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt)); 7954 DEBUG_P(PerlIO_printf(Perl_debug_log, 7955 "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n", 7956 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp), 7957 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0))); 7958 for (;;) { 7959 screamer: 7960 if (cnt > 0) { 7961 if (rslen) { 7962 while (cnt > 0) { /* this | eat */ 7963 cnt--; 7964 if ((*bp++ = *ptr++) == rslast) /* really | dust */ 7965 goto thats_all_folks; /* screams | sed :-) */ 7966 } 7967 } 7968 else { 7969 Copy(ptr, bp, cnt, char); /* this | eat */ 7970 bp += cnt; /* screams | dust */ 7971 ptr += cnt; /* louder | sed :-) */ 7972 cnt = 0; 7973 assert (!shortbuffered); 7974 goto cannot_be_shortbuffered; 7975 } 7976 } 7977 7978 if (shortbuffered) { /* oh well, must extend */ 7979 cnt = shortbuffered; 7980 shortbuffered = 0; 7981 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */ 7982 SvCUR_set(sv, bpx); 7983 SvGROW(sv, SvLEN(sv) + append + cnt + 2); 7984 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */ 7985 continue; 7986 } 7987 7988 cannot_be_shortbuffered: 7989 DEBUG_P(PerlIO_printf(Perl_debug_log, 7990 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n", 7991 PTR2UV(ptr),(long)cnt)); 7992 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */ 7993 7994 DEBUG_Pv(PerlIO_printf(Perl_debug_log, 7995 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n", 7996 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp), 7997 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0))); 7998 7999 /* This used to call 'filbuf' in stdio form, but as that behaves like 8000 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing 8001 another abstraction. */ 8002 i = PerlIO_getc(fp); /* get more characters */ 8003 8004 DEBUG_Pv(PerlIO_printf(Perl_debug_log, 8005 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n", 8006 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp), 8007 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0))); 8008 8009 cnt = PerlIO_get_cnt(fp); 8010 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */ 8011 DEBUG_P(PerlIO_printf(Perl_debug_log, 8012 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt)); 8013 8014 if (i == EOF) /* all done for ever? */ 8015 goto thats_really_all_folks; 8016 8017 bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */ 8018 SvCUR_set(sv, bpx); 8019 SvGROW(sv, bpx + cnt + 2); 8020 bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */ 8021 8022 *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */ 8023 8024 if (rslen && (STDCHAR)i == rslast) /* all done for now? */ 8025 goto thats_all_folks; 8026 } 8027 8028 thats_all_folks: 8029 if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) || 8030 memNE((char*)bp - rslen, rsptr, rslen)) 8031 goto screamer; /* go back to the fray */ 8032 thats_really_all_folks: 8033 if (shortbuffered) 8034 cnt += shortbuffered; 8035 DEBUG_P(PerlIO_printf(Perl_debug_log, 8036 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt)); 8037 PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* put these back or we're in trouble */ 8038 DEBUG_P(PerlIO_printf(Perl_debug_log, 8039 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n", 8040 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp), 8041 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0))); 8042 *bp = '\0'; 8043 SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */ 8044 DEBUG_P(PerlIO_printf(Perl_debug_log, 8045 "Screamer: done, len=%ld, string=|%.*s|\n", 8046 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv))); 8047 } 8048 else 8049 { 8050 /*The big, slow, and stupid way. */ 8051 #ifdef USE_HEAP_INSTEAD_OF_STACK /* Even slower way. */ 8052 STDCHAR *buf = NULL; 8053 Newx(buf, 8192, STDCHAR); 8054 assert(buf); 8055 #else 8056 STDCHAR buf[8192]; 8057 #endif 8058 8059 screamer2: 8060 if (rslen) { 8061 const STDCHAR * const bpe = buf + sizeof(buf); 8062 bp = buf; 8063 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe) 8064 ; /* keep reading */ 8065 cnt = bp - buf; 8066 } 8067 else { 8068 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf)); 8069 /* Accommodate broken VAXC compiler, which applies U8 cast to 8070 * both args of ?: operator, causing EOF to change into 255 8071 */ 8072 if (cnt > 0) 8073 i = (U8)buf[cnt - 1]; 8074 else 8075 i = EOF; 8076 } 8077 8078 if (cnt < 0) 8079 cnt = 0; /* we do need to re-set the sv even when cnt <= 0 */ 8080 if (append) 8081 sv_catpvn_nomg(sv, (char *) buf, cnt); 8082 else 8083 sv_setpvn(sv, (char *) buf, cnt); /* "nomg" is implied */ 8084 8085 if (i != EOF && /* joy */ 8086 (!rslen || 8087 SvCUR(sv) < rslen || 8088 memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen))) 8089 { 8090 append = -1; 8091 /* 8092 * If we're reading from a TTY and we get a short read, 8093 * indicating that the user hit his EOF character, we need 8094 * to notice it now, because if we try to read from the TTY 8095 * again, the EOF condition will disappear. 8096 * 8097 * The comparison of cnt to sizeof(buf) is an optimization 8098 * that prevents unnecessary calls to feof(). 8099 * 8100 * - jik 9/25/96 8101 */ 8102 if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp))) 8103 goto screamer2; 8104 } 8105 8106 #ifdef USE_HEAP_INSTEAD_OF_STACK 8107 Safefree(buf); 8108 #endif 8109 } 8110 8111 if (rspara) { /* have to do this both before and after */ 8112 while (i != EOF) { /* to make sure file boundaries work right */ 8113 i = PerlIO_getc(fp); 8114 if (i != '\n') { 8115 PerlIO_ungetc(fp,i); 8116 break; 8117 } 8118 } 8119 } 8120 8121 return (SvCUR(sv) - append) ? SvPVX(sv) : NULL; 8122 } 8123 8124 /* 8125 =for apidoc sv_inc 8126 8127 Auto-increment of the value in the SV, doing string to numeric conversion 8128 if necessary. Handles 'get' magic and operator overloading. 8129 8130 =cut 8131 */ 8132 8133 void 8134 Perl_sv_inc(pTHX_ SV *const sv) 8135 { 8136 if (!sv) 8137 return; 8138 SvGETMAGIC(sv); 8139 sv_inc_nomg(sv); 8140 } 8141 8142 /* 8143 =for apidoc sv_inc_nomg 8144 8145 Auto-increment of the value in the SV, doing string to numeric conversion 8146 if necessary. Handles operator overloading. Skips handling 'get' magic. 8147 8148 =cut 8149 */ 8150 8151 void 8152 Perl_sv_inc_nomg(pTHX_ SV *const sv) 8153 { 8154 dVAR; 8155 char *d; 8156 int flags; 8157 8158 if (!sv) 8159 return; 8160 if (SvTHINKFIRST(sv)) { 8161 if (SvIsCOW(sv) || isGV_with_GP(sv)) 8162 sv_force_normal_flags(sv, 0); 8163 if (SvREADONLY(sv)) { 8164 if (IN_PERL_RUNTIME) 8165 Perl_croak_no_modify(); 8166 } 8167 if (SvROK(sv)) { 8168 IV i; 8169 if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg)) 8170 return; 8171 i = PTR2IV(SvRV(sv)); 8172 sv_unref(sv); 8173 sv_setiv(sv, i); 8174 } 8175 } 8176 flags = SvFLAGS(sv); 8177 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) { 8178 /* It's (privately or publicly) a float, but not tested as an 8179 integer, so test it to see. */ 8180 (void) SvIV(sv); 8181 flags = SvFLAGS(sv); 8182 } 8183 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) { 8184 /* It's publicly an integer, or privately an integer-not-float */ 8185 #ifdef PERL_PRESERVE_IVUV 8186 oops_its_int: 8187 #endif 8188 if (SvIsUV(sv)) { 8189 if (SvUVX(sv) == UV_MAX) 8190 sv_setnv(sv, UV_MAX_P1); 8191 else 8192 (void)SvIOK_only_UV(sv); 8193 SvUV_set(sv, SvUVX(sv) + 1); 8194 } else { 8195 if (SvIVX(sv) == IV_MAX) 8196 sv_setuv(sv, (UV)IV_MAX + 1); 8197 else { 8198 (void)SvIOK_only(sv); 8199 SvIV_set(sv, SvIVX(sv) + 1); 8200 } 8201 } 8202 return; 8203 } 8204 if (flags & SVp_NOK) { 8205 const NV was = SvNVX(sv); 8206 if (NV_OVERFLOWS_INTEGERS_AT && 8207 was >= NV_OVERFLOWS_INTEGERS_AT) { 8208 /* diag_listed_as: Lost precision when %s %f by 1 */ 8209 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION), 8210 "Lost precision when incrementing %" NVff " by 1", 8211 was); 8212 } 8213 (void)SvNOK_only(sv); 8214 SvNV_set(sv, was + 1.0); 8215 return; 8216 } 8217 8218 if (!(flags & SVp_POK) || !*SvPVX_const(sv)) { 8219 if ((flags & SVTYPEMASK) < SVt_PVIV) 8220 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV)); 8221 (void)SvIOK_only(sv); 8222 SvIV_set(sv, 1); 8223 return; 8224 } 8225 d = SvPVX(sv); 8226 while (isALPHA(*d)) d++; 8227 while (isDIGIT(*d)) d++; 8228 if (d < SvEND(sv)) { 8229 #ifdef PERL_PRESERVE_IVUV 8230 /* Got to punt this as an integer if needs be, but we don't issue 8231 warnings. Probably ought to make the sv_iv_please() that does 8232 the conversion if possible, and silently. */ 8233 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL); 8234 if (numtype && !(numtype & IS_NUMBER_INFINITY)) { 8235 /* Need to try really hard to see if it's an integer. 8236 9.22337203685478e+18 is an integer. 8237 but "9.22337203685478e+18" + 0 is UV=9223372036854779904 8238 so $a="9.22337203685478e+18"; $a+0; $a++ 8239 needs to be the same as $a="9.22337203685478e+18"; $a++ 8240 or we go insane. */ 8241 8242 (void) sv_2iv(sv); 8243 if (SvIOK(sv)) 8244 goto oops_its_int; 8245 8246 /* sv_2iv *should* have made this an NV */ 8247 if (flags & SVp_NOK) { 8248 (void)SvNOK_only(sv); 8249 SvNV_set(sv, SvNVX(sv) + 1.0); 8250 return; 8251 } 8252 /* I don't think we can get here. Maybe I should assert this 8253 And if we do get here I suspect that sv_setnv will croak. NWC 8254 Fall through. */ 8255 #if defined(USE_LONG_DOUBLE) 8256 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n", 8257 SvPVX_const(sv), SvIVX(sv), SvNVX(sv))); 8258 #else 8259 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n", 8260 SvPVX_const(sv), SvIVX(sv), SvNVX(sv))); 8261 #endif 8262 } 8263 #endif /* PERL_PRESERVE_IVUV */ 8264 sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0); 8265 return; 8266 } 8267 d--; 8268 while (d >= SvPVX_const(sv)) { 8269 if (isDIGIT(*d)) { 8270 if (++*d <= '9') 8271 return; 8272 *(d--) = '0'; 8273 } 8274 else { 8275 #ifdef EBCDIC 8276 /* MKS: The original code here died if letters weren't consecutive. 8277 * at least it didn't have to worry about non-C locales. The 8278 * new code assumes that ('z'-'a')==('Z'-'A'), letters are 8279 * arranged in order (although not consecutively) and that only 8280 * [A-Za-z] are accepted by isALPHA in the C locale. 8281 */ 8282 if (*d != 'z' && *d != 'Z') { 8283 do { ++*d; } while (!isALPHA(*d)); 8284 return; 8285 } 8286 *(d--) -= 'z' - 'a'; 8287 #else 8288 ++*d; 8289 if (isALPHA(*d)) 8290 return; 8291 *(d--) -= 'z' - 'a' + 1; 8292 #endif 8293 } 8294 } 8295 /* oh,oh, the number grew */ 8296 SvGROW(sv, SvCUR(sv) + 2); 8297 SvCUR_set(sv, SvCUR(sv) + 1); 8298 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--) 8299 *d = d[-1]; 8300 if (isDIGIT(d[1])) 8301 *d = '1'; 8302 else 8303 *d = d[1]; 8304 } 8305 8306 /* 8307 =for apidoc sv_dec 8308 8309 Auto-decrement of the value in the SV, doing string to numeric conversion 8310 if necessary. Handles 'get' magic and operator overloading. 8311 8312 =cut 8313 */ 8314 8315 void 8316 Perl_sv_dec(pTHX_ SV *const sv) 8317 { 8318 dVAR; 8319 if (!sv) 8320 return; 8321 SvGETMAGIC(sv); 8322 sv_dec_nomg(sv); 8323 } 8324 8325 /* 8326 =for apidoc sv_dec_nomg 8327 8328 Auto-decrement of the value in the SV, doing string to numeric conversion 8329 if necessary. Handles operator overloading. Skips handling 'get' magic. 8330 8331 =cut 8332 */ 8333 8334 void 8335 Perl_sv_dec_nomg(pTHX_ SV *const sv) 8336 { 8337 dVAR; 8338 int flags; 8339 8340 if (!sv) 8341 return; 8342 if (SvTHINKFIRST(sv)) { 8343 if (SvIsCOW(sv) || isGV_with_GP(sv)) 8344 sv_force_normal_flags(sv, 0); 8345 if (SvREADONLY(sv)) { 8346 if (IN_PERL_RUNTIME) 8347 Perl_croak_no_modify(); 8348 } 8349 if (SvROK(sv)) { 8350 IV i; 8351 if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg)) 8352 return; 8353 i = PTR2IV(SvRV(sv)); 8354 sv_unref(sv); 8355 sv_setiv(sv, i); 8356 } 8357 } 8358 /* Unlike sv_inc we don't have to worry about string-never-numbers 8359 and keeping them magic. But we mustn't warn on punting */ 8360 flags = SvFLAGS(sv); 8361 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) { 8362 /* It's publicly an integer, or privately an integer-not-float */ 8363 #ifdef PERL_PRESERVE_IVUV 8364 oops_its_int: 8365 #endif 8366 if (SvIsUV(sv)) { 8367 if (SvUVX(sv) == 0) { 8368 (void)SvIOK_only(sv); 8369 SvIV_set(sv, -1); 8370 } 8371 else { 8372 (void)SvIOK_only_UV(sv); 8373 SvUV_set(sv, SvUVX(sv) - 1); 8374 } 8375 } else { 8376 if (SvIVX(sv) == IV_MIN) { 8377 sv_setnv(sv, (NV)IV_MIN); 8378 goto oops_its_num; 8379 } 8380 else { 8381 (void)SvIOK_only(sv); 8382 SvIV_set(sv, SvIVX(sv) - 1); 8383 } 8384 } 8385 return; 8386 } 8387 if (flags & SVp_NOK) { 8388 oops_its_num: 8389 { 8390 const NV was = SvNVX(sv); 8391 if (NV_OVERFLOWS_INTEGERS_AT && 8392 was <= -NV_OVERFLOWS_INTEGERS_AT) { 8393 /* diag_listed_as: Lost precision when %s %f by 1 */ 8394 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION), 8395 "Lost precision when decrementing %" NVff " by 1", 8396 was); 8397 } 8398 (void)SvNOK_only(sv); 8399 SvNV_set(sv, was - 1.0); 8400 return; 8401 } 8402 } 8403 if (!(flags & SVp_POK)) { 8404 if ((flags & SVTYPEMASK) < SVt_PVIV) 8405 sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV); 8406 SvIV_set(sv, -1); 8407 (void)SvIOK_only(sv); 8408 return; 8409 } 8410 #ifdef PERL_PRESERVE_IVUV 8411 { 8412 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL); 8413 if (numtype && !(numtype & IS_NUMBER_INFINITY)) { 8414 /* Need to try really hard to see if it's an integer. 8415 9.22337203685478e+18 is an integer. 8416 but "9.22337203685478e+18" + 0 is UV=9223372036854779904 8417 so $a="9.22337203685478e+18"; $a+0; $a-- 8418 needs to be the same as $a="9.22337203685478e+18"; $a-- 8419 or we go insane. */ 8420 8421 (void) sv_2iv(sv); 8422 if (SvIOK(sv)) 8423 goto oops_its_int; 8424 8425 /* sv_2iv *should* have made this an NV */ 8426 if (flags & SVp_NOK) { 8427 (void)SvNOK_only(sv); 8428 SvNV_set(sv, SvNVX(sv) - 1.0); 8429 return; 8430 } 8431 /* I don't think we can get here. Maybe I should assert this 8432 And if we do get here I suspect that sv_setnv will croak. NWC 8433 Fall through. */ 8434 #if defined(USE_LONG_DOUBLE) 8435 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n", 8436 SvPVX_const(sv), SvIVX(sv), SvNVX(sv))); 8437 #else 8438 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n", 8439 SvPVX_const(sv), SvIVX(sv), SvNVX(sv))); 8440 #endif 8441 } 8442 } 8443 #endif /* PERL_PRESERVE_IVUV */ 8444 sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */ 8445 } 8446 8447 /* this define is used to eliminate a chunk of duplicated but shared logic 8448 * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be 8449 * used anywhere but here - yves 8450 */ 8451 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \ 8452 STMT_START { \ 8453 EXTEND_MORTAL(1); \ 8454 PL_tmps_stack[++PL_tmps_ix] = (AnSv); \ 8455 } STMT_END 8456 8457 /* 8458 =for apidoc sv_mortalcopy 8459 8460 Creates a new SV which is a copy of the original SV (using C<sv_setsv>). 8461 The new SV is marked as mortal. It will be destroyed "soon", either by an 8462 explicit call to FREETMPS, or by an implicit call at places such as 8463 statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>. 8464 8465 =cut 8466 */ 8467 8468 /* Make a string that will exist for the duration of the expression 8469 * evaluation. Actually, it may have to last longer than that, but 8470 * hopefully we won't free it until it has been assigned to a 8471 * permanent location. */ 8472 8473 SV * 8474 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags) 8475 { 8476 dVAR; 8477 SV *sv; 8478 8479 if (flags & SV_GMAGIC) 8480 SvGETMAGIC(oldstr); /* before new_SV, in case it dies */ 8481 new_SV(sv); 8482 sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC); 8483 PUSH_EXTEND_MORTAL__SV_C(sv); 8484 SvTEMP_on(sv); 8485 return sv; 8486 } 8487 8488 /* 8489 =for apidoc sv_newmortal 8490 8491 Creates a new null SV which is mortal. The reference count of the SV is 8492 set to 1. It will be destroyed "soon", either by an explicit call to 8493 FREETMPS, or by an implicit call at places such as statement boundaries. 8494 See also C<sv_mortalcopy> and C<sv_2mortal>. 8495 8496 =cut 8497 */ 8498 8499 SV * 8500 Perl_sv_newmortal(pTHX) 8501 { 8502 dVAR; 8503 SV *sv; 8504 8505 new_SV(sv); 8506 SvFLAGS(sv) = SVs_TEMP; 8507 PUSH_EXTEND_MORTAL__SV_C(sv); 8508 return sv; 8509 } 8510 8511 8512 /* 8513 =for apidoc newSVpvn_flags 8514 8515 Creates a new SV and copies a string into it. The reference count for the 8516 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length 8517 string. You are responsible for ensuring that the source string is at least 8518 C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined. 8519 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>. 8520 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before 8521 returning. If C<SVf_UTF8> is set, C<s> 8522 is considered to be in UTF-8 and the 8523 C<SVf_UTF8> flag will be set on the new SV. 8524 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as 8525 8526 #define newSVpvn_utf8(s, len, u) \ 8527 newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0) 8528 8529 =cut 8530 */ 8531 8532 SV * 8533 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags) 8534 { 8535 dVAR; 8536 SV *sv; 8537 8538 /* All the flags we don't support must be zero. 8539 And we're new code so I'm going to assert this from the start. */ 8540 assert(!(flags & ~(SVf_UTF8|SVs_TEMP))); 8541 new_SV(sv); 8542 sv_setpvn(sv,s,len); 8543 8544 /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal() 8545 * and do what it does ourselves here. 8546 * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags 8547 * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which 8548 * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we 8549 * eliminate quite a few steps than it looks - Yves (explaining patch by gfx) 8550 */ 8551 8552 SvFLAGS(sv) |= flags; 8553 8554 if(flags & SVs_TEMP){ 8555 PUSH_EXTEND_MORTAL__SV_C(sv); 8556 } 8557 8558 return sv; 8559 } 8560 8561 /* 8562 =for apidoc sv_2mortal 8563 8564 Marks an existing SV as mortal. The SV will be destroyed "soon", either 8565 by an explicit call to FREETMPS, or by an implicit call at places such as 8566 statement boundaries. SvTEMP() is turned on which means that the SV's 8567 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal> 8568 and C<sv_mortalcopy>. 8569 8570 =cut 8571 */ 8572 8573 SV * 8574 Perl_sv_2mortal(pTHX_ SV *const sv) 8575 { 8576 dVAR; 8577 if (!sv) 8578 return NULL; 8579 if (SvIMMORTAL(sv)) 8580 return sv; 8581 PUSH_EXTEND_MORTAL__SV_C(sv); 8582 SvTEMP_on(sv); 8583 return sv; 8584 } 8585 8586 /* 8587 =for apidoc newSVpv 8588 8589 Creates a new SV and copies a string into it. The reference count for the 8590 SV is set to 1. If C<len> is zero, Perl will compute the length using 8591 strlen(). For efficiency, consider using C<newSVpvn> instead. 8592 8593 =cut 8594 */ 8595 8596 SV * 8597 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len) 8598 { 8599 dVAR; 8600 SV *sv; 8601 8602 new_SV(sv); 8603 sv_setpvn(sv, s, len || s == NULL ? len : strlen(s)); 8604 return sv; 8605 } 8606 8607 /* 8608 =for apidoc newSVpvn 8609 8610 Creates a new SV and copies a buffer into it, which may contain NUL characters 8611 (C<\0>) and other binary data. The reference count for the SV is set to 1. 8612 Note that if C<len> is zero, Perl will create a zero length (Perl) string. You 8613 are responsible for ensuring that the source buffer is at least 8614 C<len> bytes long. If the C<buffer> argument is NULL the new SV will be 8615 undefined. 8616 8617 =cut 8618 */ 8619 8620 SV * 8621 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len) 8622 { 8623 dVAR; 8624 SV *sv; 8625 8626 new_SV(sv); 8627 sv_setpvn(sv,buffer,len); 8628 return sv; 8629 } 8630 8631 /* 8632 =for apidoc newSVhek 8633 8634 Creates a new SV from the hash key structure. It will generate scalars that 8635 point to the shared string table where possible. Returns a new (undefined) 8636 SV if the hek is NULL. 8637 8638 =cut 8639 */ 8640 8641 SV * 8642 Perl_newSVhek(pTHX_ const HEK *const hek) 8643 { 8644 dVAR; 8645 if (!hek) { 8646 SV *sv; 8647 8648 new_SV(sv); 8649 return sv; 8650 } 8651 8652 if (HEK_LEN(hek) == HEf_SVKEY) { 8653 return newSVsv(*(SV**)HEK_KEY(hek)); 8654 } else { 8655 const int flags = HEK_FLAGS(hek); 8656 if (flags & HVhek_WASUTF8) { 8657 /* Trouble :-) 8658 Andreas would like keys he put in as utf8 to come back as utf8 8659 */ 8660 STRLEN utf8_len = HEK_LEN(hek); 8661 SV * const sv = newSV_type(SVt_PV); 8662 char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len); 8663 /* bytes_to_utf8() allocates a new string, which we can repurpose: */ 8664 sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL); 8665 SvUTF8_on (sv); 8666 return sv; 8667 } else if (flags & HVhek_UNSHARED) { 8668 /* A hash that isn't using shared hash keys has to have 8669 the flag in every key so that we know not to try to call 8670 share_hek_hek on it. */ 8671 8672 SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek)); 8673 if (HEK_UTF8(hek)) 8674 SvUTF8_on (sv); 8675 return sv; 8676 } 8677 /* This will be overwhelminly the most common case. */ 8678 { 8679 /* Inline most of newSVpvn_share(), because share_hek_hek() is far 8680 more efficient than sharepvn(). */ 8681 SV *sv; 8682 8683 new_SV(sv); 8684 sv_upgrade(sv, SVt_PV); 8685 SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek))); 8686 SvCUR_set(sv, HEK_LEN(hek)); 8687 SvLEN_set(sv, 0); 8688 SvIsCOW_on(sv); 8689 SvPOK_on(sv); 8690 if (HEK_UTF8(hek)) 8691 SvUTF8_on(sv); 8692 return sv; 8693 } 8694 } 8695 } 8696 8697 /* 8698 =for apidoc newSVpvn_share 8699 8700 Creates a new SV with its SvPVX_const pointing to a shared string in the string 8701 table. If the string does not already exist in the table, it is 8702 created first. Turns on the SvIsCOW flag (or READONLY 8703 and FAKE in 5.16 and earlier). If the C<hash> parameter 8704 is non-zero, that value is used; otherwise the hash is computed. 8705 The string's hash can later be retrieved from the SV 8706 with the C<SvSHARED_HASH()> macro. The idea here is 8707 that as the string table is used for shared hash keys these strings will have 8708 SvPVX_const == HeKEY and hash lookup will avoid string compare. 8709 8710 =cut 8711 */ 8712 8713 SV * 8714 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash) 8715 { 8716 dVAR; 8717 SV *sv; 8718 bool is_utf8 = FALSE; 8719 const char *const orig_src = src; 8720 8721 if (len < 0) { 8722 STRLEN tmplen = -len; 8723 is_utf8 = TRUE; 8724 /* See the note in hv.c:hv_fetch() --jhi */ 8725 src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8); 8726 len = tmplen; 8727 } 8728 if (!hash) 8729 PERL_HASH(hash, src, len); 8730 new_SV(sv); 8731 /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it 8732 changes here, update it there too. */ 8733 sv_upgrade(sv, SVt_PV); 8734 SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash)); 8735 SvCUR_set(sv, len); 8736 SvLEN_set(sv, 0); 8737 SvIsCOW_on(sv); 8738 SvPOK_on(sv); 8739 if (is_utf8) 8740 SvUTF8_on(sv); 8741 if (src != orig_src) 8742 Safefree(src); 8743 return sv; 8744 } 8745 8746 /* 8747 =for apidoc newSVpv_share 8748 8749 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a 8750 string/length pair. 8751 8752 =cut 8753 */ 8754 8755 SV * 8756 Perl_newSVpv_share(pTHX_ const char *src, U32 hash) 8757 { 8758 return newSVpvn_share(src, strlen(src), hash); 8759 } 8760 8761 #if defined(PERL_IMPLICIT_CONTEXT) 8762 8763 /* pTHX_ magic can't cope with varargs, so this is a no-context 8764 * version of the main function, (which may itself be aliased to us). 8765 * Don't access this version directly. 8766 */ 8767 8768 SV * 8769 Perl_newSVpvf_nocontext(const char *const pat, ...) 8770 { 8771 dTHX; 8772 SV *sv; 8773 va_list args; 8774 8775 PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT; 8776 8777 va_start(args, pat); 8778 sv = vnewSVpvf(pat, &args); 8779 va_end(args); 8780 return sv; 8781 } 8782 #endif 8783 8784 /* 8785 =for apidoc newSVpvf 8786 8787 Creates a new SV and initializes it with the string formatted like 8788 C<sprintf>. 8789 8790 =cut 8791 */ 8792 8793 SV * 8794 Perl_newSVpvf(pTHX_ const char *const pat, ...) 8795 { 8796 SV *sv; 8797 va_list args; 8798 8799 PERL_ARGS_ASSERT_NEWSVPVF; 8800 8801 va_start(args, pat); 8802 sv = vnewSVpvf(pat, &args); 8803 va_end(args); 8804 return sv; 8805 } 8806 8807 /* backend for newSVpvf() and newSVpvf_nocontext() */ 8808 8809 SV * 8810 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args) 8811 { 8812 dVAR; 8813 SV *sv; 8814 8815 PERL_ARGS_ASSERT_VNEWSVPVF; 8816 8817 new_SV(sv); 8818 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL); 8819 return sv; 8820 } 8821 8822 /* 8823 =for apidoc newSVnv 8824 8825 Creates a new SV and copies a floating point value into it. 8826 The reference count for the SV is set to 1. 8827 8828 =cut 8829 */ 8830 8831 SV * 8832 Perl_newSVnv(pTHX_ const NV n) 8833 { 8834 dVAR; 8835 SV *sv; 8836 8837 new_SV(sv); 8838 sv_setnv(sv,n); 8839 return sv; 8840 } 8841 8842 /* 8843 =for apidoc newSViv 8844 8845 Creates a new SV and copies an integer into it. The reference count for the 8846 SV is set to 1. 8847 8848 =cut 8849 */ 8850 8851 SV * 8852 Perl_newSViv(pTHX_ const IV i) 8853 { 8854 dVAR; 8855 SV *sv; 8856 8857 new_SV(sv); 8858 sv_setiv(sv,i); 8859 return sv; 8860 } 8861 8862 /* 8863 =for apidoc newSVuv 8864 8865 Creates a new SV and copies an unsigned integer into it. 8866 The reference count for the SV is set to 1. 8867 8868 =cut 8869 */ 8870 8871 SV * 8872 Perl_newSVuv(pTHX_ const UV u) 8873 { 8874 dVAR; 8875 SV *sv; 8876 8877 new_SV(sv); 8878 sv_setuv(sv,u); 8879 return sv; 8880 } 8881 8882 /* 8883 =for apidoc newSV_type 8884 8885 Creates a new SV, of the type specified. The reference count for the new SV 8886 is set to 1. 8887 8888 =cut 8889 */ 8890 8891 SV * 8892 Perl_newSV_type(pTHX_ const svtype type) 8893 { 8894 SV *sv; 8895 8896 new_SV(sv); 8897 sv_upgrade(sv, type); 8898 return sv; 8899 } 8900 8901 /* 8902 =for apidoc newRV_noinc 8903 8904 Creates an RV wrapper for an SV. The reference count for the original 8905 SV is B<not> incremented. 8906 8907 =cut 8908 */ 8909 8910 SV * 8911 Perl_newRV_noinc(pTHX_ SV *const tmpRef) 8912 { 8913 dVAR; 8914 SV *sv = newSV_type(SVt_IV); 8915 8916 PERL_ARGS_ASSERT_NEWRV_NOINC; 8917 8918 SvTEMP_off(tmpRef); 8919 SvRV_set(sv, tmpRef); 8920 SvROK_on(sv); 8921 return sv; 8922 } 8923 8924 /* newRV_inc is the official function name to use now. 8925 * newRV_inc is in fact #defined to newRV in sv.h 8926 */ 8927 8928 SV * 8929 Perl_newRV(pTHX_ SV *const sv) 8930 { 8931 dVAR; 8932 8933 PERL_ARGS_ASSERT_NEWRV; 8934 8935 return newRV_noinc(SvREFCNT_inc_simple_NN(sv)); 8936 } 8937 8938 /* 8939 =for apidoc newSVsv 8940 8941 Creates a new SV which is an exact duplicate of the original SV. 8942 (Uses C<sv_setsv>.) 8943 8944 =cut 8945 */ 8946 8947 SV * 8948 Perl_newSVsv(pTHX_ SV *const old) 8949 { 8950 dVAR; 8951 SV *sv; 8952 8953 if (!old) 8954 return NULL; 8955 if (SvTYPE(old) == (svtype)SVTYPEMASK) { 8956 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string"); 8957 return NULL; 8958 } 8959 /* Do this here, otherwise we leak the new SV if this croaks. */ 8960 SvGETMAGIC(old); 8961 new_SV(sv); 8962 /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games 8963 with SvTEMP_off and SvTEMP_on round a call to sv_setsv. */ 8964 sv_setsv_flags(sv, old, SV_NOSTEAL); 8965 return sv; 8966 } 8967 8968 /* 8969 =for apidoc sv_reset 8970 8971 Underlying implementation for the C<reset> Perl function. 8972 Note that the perl-level function is vaguely deprecated. 8973 8974 =cut 8975 */ 8976 8977 void 8978 Perl_sv_reset(pTHX_ const char *s, HV *const stash) 8979 { 8980 PERL_ARGS_ASSERT_SV_RESET; 8981 8982 sv_resetpvn(*s ? s : NULL, strlen(s), stash); 8983 } 8984 8985 void 8986 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash) 8987 { 8988 dVAR; 8989 char todo[PERL_UCHAR_MAX+1]; 8990 const char *send; 8991 8992 if (!stash) 8993 return; 8994 8995 if (!s) { /* reset ?? searches */ 8996 MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab); 8997 if (mg) { 8998 const U32 count = mg->mg_len / sizeof(PMOP**); 8999 PMOP **pmp = (PMOP**) mg->mg_ptr; 9000 PMOP *const *const end = pmp + count; 9001 9002 while (pmp < end) { 9003 #ifdef USE_ITHREADS 9004 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]); 9005 #else 9006 (*pmp)->op_pmflags &= ~PMf_USED; 9007 #endif 9008 ++pmp; 9009 } 9010 } 9011 return; 9012 } 9013 9014 /* reset variables */ 9015 9016 if (!HvARRAY(stash)) 9017 return; 9018 9019 Zero(todo, 256, char); 9020 send = s + len; 9021 while (s < send) { 9022 I32 max; 9023 I32 i = (unsigned char)*s; 9024 if (s[1] == '-') { 9025 s += 2; 9026 } 9027 max = (unsigned char)*s++; 9028 for ( ; i <= max; i++) { 9029 todo[i] = 1; 9030 } 9031 for (i = 0; i <= (I32) HvMAX(stash); i++) { 9032 HE *entry; 9033 for (entry = HvARRAY(stash)[i]; 9034 entry; 9035 entry = HeNEXT(entry)) 9036 { 9037 GV *gv; 9038 SV *sv; 9039 9040 if (!todo[(U8)*HeKEY(entry)]) 9041 continue; 9042 gv = MUTABLE_GV(HeVAL(entry)); 9043 sv = GvSV(gv); 9044 if (sv) { 9045 if (SvTHINKFIRST(sv)) { 9046 if (!SvREADONLY(sv) && SvROK(sv)) 9047 sv_unref(sv); 9048 /* XXX Is this continue a bug? Why should THINKFIRST 9049 exempt us from resetting arrays and hashes? */ 9050 continue; 9051 } 9052 SvOK_off(sv); 9053 if (SvTYPE(sv) >= SVt_PV) { 9054 SvCUR_set(sv, 0); 9055 if (SvPVX_const(sv) != NULL) 9056 *SvPVX(sv) = '\0'; 9057 SvTAINT(sv); 9058 } 9059 } 9060 if (GvAV(gv)) { 9061 av_clear(GvAV(gv)); 9062 } 9063 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) { 9064 #if defined(VMS) 9065 Perl_die(aTHX_ "Can't reset %%ENV on this system"); 9066 #else /* ! VMS */ 9067 hv_clear(GvHV(gv)); 9068 # if defined(USE_ENVIRON_ARRAY) 9069 if (gv == PL_envgv) 9070 my_clearenv(); 9071 # endif /* USE_ENVIRON_ARRAY */ 9072 #endif /* VMS */ 9073 } 9074 } 9075 } 9076 } 9077 } 9078 9079 /* 9080 =for apidoc sv_2io 9081 9082 Using various gambits, try to get an IO from an SV: the IO slot if its a 9083 GV; or the recursive result if we're an RV; or the IO slot of the symbol 9084 named after the PV if we're a string. 9085 9086 'Get' magic is ignored on the sv passed in, but will be called on 9087 C<SvRV(sv)> if sv is an RV. 9088 9089 =cut 9090 */ 9091 9092 IO* 9093 Perl_sv_2io(pTHX_ SV *const sv) 9094 { 9095 IO* io; 9096 GV* gv; 9097 9098 PERL_ARGS_ASSERT_SV_2IO; 9099 9100 switch (SvTYPE(sv)) { 9101 case SVt_PVIO: 9102 io = MUTABLE_IO(sv); 9103 break; 9104 case SVt_PVGV: 9105 case SVt_PVLV: 9106 if (isGV_with_GP(sv)) { 9107 gv = MUTABLE_GV(sv); 9108 io = GvIO(gv); 9109 if (!io) 9110 Perl_croak(aTHX_ "Bad filehandle: %"HEKf, 9111 HEKfARG(GvNAME_HEK(gv))); 9112 break; 9113 } 9114 /* FALL THROUGH */ 9115 default: 9116 if (!SvOK(sv)) 9117 Perl_croak(aTHX_ PL_no_usym, "filehandle"); 9118 if (SvROK(sv)) { 9119 SvGETMAGIC(SvRV(sv)); 9120 return sv_2io(SvRV(sv)); 9121 } 9122 gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO); 9123 if (gv) 9124 io = GvIO(gv); 9125 else 9126 io = 0; 9127 if (!io) { 9128 SV *newsv = sv; 9129 if (SvGMAGICAL(sv)) { 9130 newsv = sv_newmortal(); 9131 sv_setsv_nomg(newsv, sv); 9132 } 9133 Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv)); 9134 } 9135 break; 9136 } 9137 return io; 9138 } 9139 9140 /* 9141 =for apidoc sv_2cv 9142 9143 Using various gambits, try to get a CV from an SV; in addition, try if 9144 possible to set C<*st> and C<*gvp> to the stash and GV associated with it. 9145 The flags in C<lref> are passed to gv_fetchsv. 9146 9147 =cut 9148 */ 9149 9150 CV * 9151 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref) 9152 { 9153 dVAR; 9154 GV *gv = NULL; 9155 CV *cv = NULL; 9156 9157 PERL_ARGS_ASSERT_SV_2CV; 9158 9159 if (!sv) { 9160 *st = NULL; 9161 *gvp = NULL; 9162 return NULL; 9163 } 9164 switch (SvTYPE(sv)) { 9165 case SVt_PVCV: 9166 *st = CvSTASH(sv); 9167 *gvp = NULL; 9168 return MUTABLE_CV(sv); 9169 case SVt_PVHV: 9170 case SVt_PVAV: 9171 *st = NULL; 9172 *gvp = NULL; 9173 return NULL; 9174 default: 9175 SvGETMAGIC(sv); 9176 if (SvROK(sv)) { 9177 if (SvAMAGIC(sv)) 9178 sv = amagic_deref_call(sv, to_cv_amg); 9179 9180 sv = SvRV(sv); 9181 if (SvTYPE(sv) == SVt_PVCV) { 9182 cv = MUTABLE_CV(sv); 9183 *gvp = NULL; 9184 *st = CvSTASH(cv); 9185 return cv; 9186 } 9187 else if(SvGETMAGIC(sv), isGV_with_GP(sv)) 9188 gv = MUTABLE_GV(sv); 9189 else 9190 Perl_croak(aTHX_ "Not a subroutine reference"); 9191 } 9192 else if (isGV_with_GP(sv)) { 9193 gv = MUTABLE_GV(sv); 9194 } 9195 else { 9196 gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV); 9197 } 9198 *gvp = gv; 9199 if (!gv) { 9200 *st = NULL; 9201 return NULL; 9202 } 9203 /* Some flags to gv_fetchsv mean don't really create the GV */ 9204 if (!isGV_with_GP(gv)) { 9205 *st = NULL; 9206 return NULL; 9207 } 9208 *st = GvESTASH(gv); 9209 if (lref & ~GV_ADDMG && !GvCVu(gv)) { 9210 /* XXX this is probably not what they think they're getting. 9211 * It has the same effect as "sub name;", i.e. just a forward 9212 * declaration! */ 9213 newSTUB(gv,0); 9214 } 9215 return GvCVu(gv); 9216 } 9217 } 9218 9219 /* 9220 =for apidoc sv_true 9221 9222 Returns true if the SV has a true value by Perl's rules. 9223 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may 9224 instead use an in-line version. 9225 9226 =cut 9227 */ 9228 9229 I32 9230 Perl_sv_true(pTHX_ SV *const sv) 9231 { 9232 if (!sv) 9233 return 0; 9234 if (SvPOK(sv)) { 9235 const XPV* const tXpv = (XPV*)SvANY(sv); 9236 if (tXpv && 9237 (tXpv->xpv_cur > 1 || 9238 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0'))) 9239 return 1; 9240 else 9241 return 0; 9242 } 9243 else { 9244 if (SvIOK(sv)) 9245 return SvIVX(sv) != 0; 9246 else { 9247 if (SvNOK(sv)) 9248 return SvNVX(sv) != 0.0; 9249 else 9250 return sv_2bool(sv); 9251 } 9252 } 9253 } 9254 9255 /* 9256 =for apidoc sv_pvn_force 9257 9258 Get a sensible string out of the SV somehow. 9259 A private implementation of the C<SvPV_force> macro for compilers which 9260 can't cope with complex macro expressions. Always use the macro instead. 9261 9262 =for apidoc sv_pvn_force_flags 9263 9264 Get a sensible string out of the SV somehow. 9265 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if 9266 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are 9267 implemented in terms of this function. 9268 You normally want to use the various wrapper macros instead: see 9269 C<SvPV_force> and C<SvPV_force_nomg> 9270 9271 =cut 9272 */ 9273 9274 char * 9275 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags) 9276 { 9277 dVAR; 9278 9279 PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS; 9280 9281 if (flags & SV_GMAGIC) SvGETMAGIC(sv); 9282 if (SvTHINKFIRST(sv) && !SvROK(sv)) 9283 sv_force_normal_flags(sv, 0); 9284 9285 if (SvPOK(sv)) { 9286 if (lp) 9287 *lp = SvCUR(sv); 9288 } 9289 else { 9290 char *s; 9291 STRLEN len; 9292 9293 if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) { 9294 const char * const ref = sv_reftype(sv,0); 9295 if (PL_op) 9296 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s", 9297 ref, OP_DESC(PL_op)); 9298 else 9299 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref); 9300 } 9301 if (SvTYPE(sv) > SVt_PVLV 9302 || isGV_with_GP(sv)) 9303 /* diag_listed_as: Can't coerce %s to %s in %s */ 9304 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0), 9305 OP_DESC(PL_op)); 9306 s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC); 9307 if (!s) { 9308 s = (char *)""; 9309 } 9310 if (lp) 9311 *lp = len; 9312 9313 if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */ 9314 if (SvROK(sv)) 9315 sv_unref(sv); 9316 SvUPGRADE(sv, SVt_PV); /* Never FALSE */ 9317 SvGROW(sv, len + 1); 9318 Move(s,SvPVX(sv),len,char); 9319 SvCUR_set(sv, len); 9320 SvPVX(sv)[len] = '\0'; 9321 } 9322 if (!SvPOK(sv)) { 9323 SvPOK_on(sv); /* validate pointer */ 9324 SvTAINT(sv); 9325 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n", 9326 PTR2UV(sv),SvPVX_const(sv))); 9327 } 9328 } 9329 (void)SvPOK_only_UTF8(sv); 9330 return SvPVX_mutable(sv); 9331 } 9332 9333 /* 9334 =for apidoc sv_pvbyten_force 9335 9336 The backend for the C<SvPVbytex_force> macro. Always use the macro 9337 instead. 9338 9339 =cut 9340 */ 9341 9342 char * 9343 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp) 9344 { 9345 PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE; 9346 9347 sv_pvn_force(sv,lp); 9348 sv_utf8_downgrade(sv,0); 9349 *lp = SvCUR(sv); 9350 return SvPVX(sv); 9351 } 9352 9353 /* 9354 =for apidoc sv_pvutf8n_force 9355 9356 The backend for the C<SvPVutf8x_force> macro. Always use the macro 9357 instead. 9358 9359 =cut 9360 */ 9361 9362 char * 9363 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp) 9364 { 9365 PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE; 9366 9367 sv_pvn_force(sv,0); 9368 sv_utf8_upgrade_nomg(sv); 9369 *lp = SvCUR(sv); 9370 return SvPVX(sv); 9371 } 9372 9373 /* 9374 =for apidoc sv_reftype 9375 9376 Returns a string describing what the SV is a reference to. 9377 9378 =cut 9379 */ 9380 9381 const char * 9382 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob) 9383 { 9384 PERL_ARGS_ASSERT_SV_REFTYPE; 9385 if (ob && SvOBJECT(sv)) { 9386 return SvPV_nolen_const(sv_ref(NULL, sv, ob)); 9387 } 9388 else { 9389 switch (SvTYPE(sv)) { 9390 case SVt_NULL: 9391 case SVt_IV: 9392 case SVt_NV: 9393 case SVt_PV: 9394 case SVt_PVIV: 9395 case SVt_PVNV: 9396 case SVt_PVMG: 9397 if (SvVOK(sv)) 9398 return "VSTRING"; 9399 if (SvROK(sv)) 9400 return "REF"; 9401 else 9402 return "SCALAR"; 9403 9404 case SVt_PVLV: return (char *) (SvROK(sv) ? "REF" 9405 /* tied lvalues should appear to be 9406 * scalars for backwards compatibility */ 9407 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T') 9408 ? "SCALAR" : "LVALUE"); 9409 case SVt_PVAV: return "ARRAY"; 9410 case SVt_PVHV: return "HASH"; 9411 case SVt_PVCV: return "CODE"; 9412 case SVt_PVGV: return (char *) (isGV_with_GP(sv) 9413 ? "GLOB" : "SCALAR"); 9414 case SVt_PVFM: return "FORMAT"; 9415 case SVt_PVIO: return "IO"; 9416 case SVt_BIND: return "BIND"; 9417 case SVt_REGEXP: return "REGEXP"; 9418 default: return "UNKNOWN"; 9419 } 9420 } 9421 } 9422 9423 /* 9424 =for apidoc sv_ref 9425 9426 Returns a SV describing what the SV passed in is a reference to. 9427 9428 =cut 9429 */ 9430 9431 SV * 9432 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob) 9433 { 9434 PERL_ARGS_ASSERT_SV_REF; 9435 9436 if (!dst) 9437 dst = sv_newmortal(); 9438 9439 if (ob && SvOBJECT(sv)) { 9440 HvNAME_get(SvSTASH(sv)) 9441 ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv))) 9442 : sv_setpvn(dst, "__ANON__", 8); 9443 } 9444 else { 9445 const char * reftype = sv_reftype(sv, 0); 9446 sv_setpv(dst, reftype); 9447 } 9448 return dst; 9449 } 9450 9451 /* 9452 =for apidoc sv_isobject 9453 9454 Returns a boolean indicating whether the SV is an RV pointing to a blessed 9455 object. If the SV is not an RV, or if the object is not blessed, then this 9456 will return false. 9457 9458 =cut 9459 */ 9460 9461 int 9462 Perl_sv_isobject(pTHX_ SV *sv) 9463 { 9464 if (!sv) 9465 return 0; 9466 SvGETMAGIC(sv); 9467 if (!SvROK(sv)) 9468 return 0; 9469 sv = SvRV(sv); 9470 if (!SvOBJECT(sv)) 9471 return 0; 9472 return 1; 9473 } 9474 9475 /* 9476 =for apidoc sv_isa 9477 9478 Returns a boolean indicating whether the SV is blessed into the specified 9479 class. This does not check for subtypes; use C<sv_derived_from> to verify 9480 an inheritance relationship. 9481 9482 =cut 9483 */ 9484 9485 int 9486 Perl_sv_isa(pTHX_ SV *sv, const char *const name) 9487 { 9488 const char *hvname; 9489 9490 PERL_ARGS_ASSERT_SV_ISA; 9491 9492 if (!sv) 9493 return 0; 9494 SvGETMAGIC(sv); 9495 if (!SvROK(sv)) 9496 return 0; 9497 sv = SvRV(sv); 9498 if (!SvOBJECT(sv)) 9499 return 0; 9500 hvname = HvNAME_get(SvSTASH(sv)); 9501 if (!hvname) 9502 return 0; 9503 9504 return strEQ(hvname, name); 9505 } 9506 9507 /* 9508 =for apidoc newSVrv 9509 9510 Creates a new SV for the existing RV, C<rv>, to point to. If C<rv> is not an 9511 RV then it will be upgraded to one. If C<classname> is non-null then the new 9512 SV will be blessed in the specified package. The new SV is returned and its 9513 reference count is 1. The reference count 1 is owned by C<rv>. 9514 9515 =cut 9516 */ 9517 9518 SV* 9519 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname) 9520 { 9521 dVAR; 9522 SV *sv; 9523 9524 PERL_ARGS_ASSERT_NEWSVRV; 9525 9526 new_SV(sv); 9527 9528 SV_CHECK_THINKFIRST_COW_DROP(rv); 9529 9530 if (SvTYPE(rv) >= SVt_PVMG) { 9531 const U32 refcnt = SvREFCNT(rv); 9532 SvREFCNT(rv) = 0; 9533 sv_clear(rv); 9534 SvFLAGS(rv) = 0; 9535 SvREFCNT(rv) = refcnt; 9536 9537 sv_upgrade(rv, SVt_IV); 9538 } else if (SvROK(rv)) { 9539 SvREFCNT_dec(SvRV(rv)); 9540 } else { 9541 prepare_SV_for_RV(rv); 9542 } 9543 9544 SvOK_off(rv); 9545 SvRV_set(rv, sv); 9546 SvROK_on(rv); 9547 9548 if (classname) { 9549 HV* const stash = gv_stashpv(classname, GV_ADD); 9550 (void)sv_bless(rv, stash); 9551 } 9552 return sv; 9553 } 9554 9555 /* 9556 =for apidoc sv_setref_pv 9557 9558 Copies a pointer into a new SV, optionally blessing the SV. The C<rv> 9559 argument will be upgraded to an RV. That RV will be modified to point to 9560 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed 9561 into the SV. The C<classname> argument indicates the package for the 9562 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV 9563 will have a reference count of 1, and the RV will be returned. 9564 9565 Do not use with other Perl types such as HV, AV, SV, CV, because those 9566 objects will become corrupted by the pointer copy process. 9567 9568 Note that C<sv_setref_pvn> copies the string while this copies the pointer. 9569 9570 =cut 9571 */ 9572 9573 SV* 9574 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv) 9575 { 9576 dVAR; 9577 9578 PERL_ARGS_ASSERT_SV_SETREF_PV; 9579 9580 if (!pv) { 9581 sv_setsv(rv, &PL_sv_undef); 9582 SvSETMAGIC(rv); 9583 } 9584 else 9585 sv_setiv(newSVrv(rv,classname), PTR2IV(pv)); 9586 return rv; 9587 } 9588 9589 /* 9590 =for apidoc sv_setref_iv 9591 9592 Copies an integer into a new SV, optionally blessing the SV. The C<rv> 9593 argument will be upgraded to an RV. That RV will be modified to point to 9594 the new SV. The C<classname> argument indicates the package for the 9595 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV 9596 will have a reference count of 1, and the RV will be returned. 9597 9598 =cut 9599 */ 9600 9601 SV* 9602 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv) 9603 { 9604 PERL_ARGS_ASSERT_SV_SETREF_IV; 9605 9606 sv_setiv(newSVrv(rv,classname), iv); 9607 return rv; 9608 } 9609 9610 /* 9611 =for apidoc sv_setref_uv 9612 9613 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv> 9614 argument will be upgraded to an RV. That RV will be modified to point to 9615 the new SV. The C<classname> argument indicates the package for the 9616 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV 9617 will have a reference count of 1, and the RV will be returned. 9618 9619 =cut 9620 */ 9621 9622 SV* 9623 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv) 9624 { 9625 PERL_ARGS_ASSERT_SV_SETREF_UV; 9626 9627 sv_setuv(newSVrv(rv,classname), uv); 9628 return rv; 9629 } 9630 9631 /* 9632 =for apidoc sv_setref_nv 9633 9634 Copies a double into a new SV, optionally blessing the SV. The C<rv> 9635 argument will be upgraded to an RV. That RV will be modified to point to 9636 the new SV. The C<classname> argument indicates the package for the 9637 blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV 9638 will have a reference count of 1, and the RV will be returned. 9639 9640 =cut 9641 */ 9642 9643 SV* 9644 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv) 9645 { 9646 PERL_ARGS_ASSERT_SV_SETREF_NV; 9647 9648 sv_setnv(newSVrv(rv,classname), nv); 9649 return rv; 9650 } 9651 9652 /* 9653 =for apidoc sv_setref_pvn 9654 9655 Copies a string into a new SV, optionally blessing the SV. The length of the 9656 string must be specified with C<n>. The C<rv> argument will be upgraded to 9657 an RV. That RV will be modified to point to the new SV. The C<classname> 9658 argument indicates the package for the blessing. Set C<classname> to 9659 C<NULL> to avoid the blessing. The new SV will have a reference count 9660 of 1, and the RV will be returned. 9661 9662 Note that C<sv_setref_pv> copies the pointer while this copies the string. 9663 9664 =cut 9665 */ 9666 9667 SV* 9668 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname, 9669 const char *const pv, const STRLEN n) 9670 { 9671 PERL_ARGS_ASSERT_SV_SETREF_PVN; 9672 9673 sv_setpvn(newSVrv(rv,classname), pv, n); 9674 return rv; 9675 } 9676 9677 /* 9678 =for apidoc sv_bless 9679 9680 Blesses an SV into a specified package. The SV must be an RV. The package 9681 must be designated by its stash (see C<gv_stashpv()>). The reference count 9682 of the SV is unaffected. 9683 9684 =cut 9685 */ 9686 9687 SV* 9688 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash) 9689 { 9690 dVAR; 9691 SV *tmpRef; 9692 9693 PERL_ARGS_ASSERT_SV_BLESS; 9694 9695 if (!SvROK(sv)) 9696 Perl_croak(aTHX_ "Can't bless non-reference value"); 9697 tmpRef = SvRV(sv); 9698 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) { 9699 if (SvREADONLY(tmpRef) && !SvIsCOW(tmpRef)) 9700 Perl_croak_no_modify(); 9701 if (SvOBJECT(tmpRef)) { 9702 SvREFCNT_dec(SvSTASH(tmpRef)); 9703 } 9704 } 9705 SvOBJECT_on(tmpRef); 9706 SvUPGRADE(tmpRef, SVt_PVMG); 9707 SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash))); 9708 9709 if(SvSMAGICAL(tmpRef)) 9710 if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar)) 9711 mg_set(tmpRef); 9712 9713 9714 9715 return sv; 9716 } 9717 9718 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type 9719 * as it is after unglobbing it. 9720 */ 9721 9722 PERL_STATIC_INLINE void 9723 S_sv_unglob(pTHX_ SV *const sv, U32 flags) 9724 { 9725 dVAR; 9726 void *xpvmg; 9727 HV *stash; 9728 SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal(); 9729 9730 PERL_ARGS_ASSERT_SV_UNGLOB; 9731 9732 assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV); 9733 SvFAKE_off(sv); 9734 if (!(flags & SV_COW_DROP_PV)) 9735 gv_efullname3(temp, MUTABLE_GV(sv), "*"); 9736 9737 if (GvGP(sv)) { 9738 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv))) 9739 && HvNAME_get(stash)) 9740 mro_method_changed_in(stash); 9741 gp_free(MUTABLE_GV(sv)); 9742 } 9743 if (GvSTASH(sv)) { 9744 sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv); 9745 GvSTASH(sv) = NULL; 9746 } 9747 GvMULTI_off(sv); 9748 if (GvNAME_HEK(sv)) { 9749 unshare_hek(GvNAME_HEK(sv)); 9750 } 9751 isGV_with_GP_off(sv); 9752 9753 if(SvTYPE(sv) == SVt_PVGV) { 9754 /* need to keep SvANY(sv) in the right arena */ 9755 xpvmg = new_XPVMG(); 9756 StructCopy(SvANY(sv), xpvmg, XPVMG); 9757 del_XPVGV(SvANY(sv)); 9758 SvANY(sv) = xpvmg; 9759 9760 SvFLAGS(sv) &= ~SVTYPEMASK; 9761 SvFLAGS(sv) |= SVt_PVMG; 9762 } 9763 9764 /* Intentionally not calling any local SET magic, as this isn't so much a 9765 set operation as merely an internal storage change. */ 9766 if (flags & SV_COW_DROP_PV) SvOK_off(sv); 9767 else sv_setsv_flags(sv, temp, 0); 9768 9769 if ((const GV *)sv == PL_last_in_gv) 9770 PL_last_in_gv = NULL; 9771 else if ((const GV *)sv == PL_statgv) 9772 PL_statgv = NULL; 9773 } 9774 9775 /* 9776 =for apidoc sv_unref_flags 9777 9778 Unsets the RV status of the SV, and decrements the reference count of 9779 whatever was being referenced by the RV. This can almost be thought of 9780 as a reversal of C<newSVrv>. The C<cflags> argument can contain 9781 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented 9782 (otherwise the decrementing is conditional on the reference count being 9783 different from one or the reference being a readonly SV). 9784 See C<SvROK_off>. 9785 9786 =cut 9787 */ 9788 9789 void 9790 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags) 9791 { 9792 SV* const target = SvRV(ref); 9793 9794 PERL_ARGS_ASSERT_SV_UNREF_FLAGS; 9795 9796 if (SvWEAKREF(ref)) { 9797 sv_del_backref(target, ref); 9798 SvWEAKREF_off(ref); 9799 SvRV_set(ref, NULL); 9800 return; 9801 } 9802 SvRV_set(ref, NULL); 9803 SvROK_off(ref); 9804 /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was 9805 assigned to as BEGIN {$a = \"Foo"} will fail. */ 9806 if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF)) 9807 SvREFCNT_dec_NN(target); 9808 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */ 9809 sv_2mortal(target); /* Schedule for freeing later */ 9810 } 9811 9812 /* 9813 =for apidoc sv_untaint 9814 9815 Untaint an SV. Use C<SvTAINTED_off> instead. 9816 9817 =cut 9818 */ 9819 9820 void 9821 Perl_sv_untaint(pTHX_ SV *const sv) 9822 { 9823 PERL_ARGS_ASSERT_SV_UNTAINT; 9824 9825 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) { 9826 MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint); 9827 if (mg) 9828 mg->mg_len &= ~1; 9829 } 9830 } 9831 9832 /* 9833 =for apidoc sv_tainted 9834 9835 Test an SV for taintedness. Use C<SvTAINTED> instead. 9836 9837 =cut 9838 */ 9839 9840 bool 9841 Perl_sv_tainted(pTHX_ SV *const sv) 9842 { 9843 PERL_ARGS_ASSERT_SV_TAINTED; 9844 9845 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) { 9846 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint); 9847 if (mg && (mg->mg_len & 1) ) 9848 return TRUE; 9849 } 9850 return FALSE; 9851 } 9852 9853 /* 9854 =for apidoc sv_setpviv 9855 9856 Copies an integer into the given SV, also updating its string value. 9857 Does not handle 'set' magic. See C<sv_setpviv_mg>. 9858 9859 =cut 9860 */ 9861 9862 void 9863 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv) 9864 { 9865 char buf[TYPE_CHARS(UV)]; 9866 char *ebuf; 9867 char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf); 9868 9869 PERL_ARGS_ASSERT_SV_SETPVIV; 9870 9871 sv_setpvn(sv, ptr, ebuf - ptr); 9872 } 9873 9874 /* 9875 =for apidoc sv_setpviv_mg 9876 9877 Like C<sv_setpviv>, but also handles 'set' magic. 9878 9879 =cut 9880 */ 9881 9882 void 9883 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv) 9884 { 9885 PERL_ARGS_ASSERT_SV_SETPVIV_MG; 9886 9887 sv_setpviv(sv, iv); 9888 SvSETMAGIC(sv); 9889 } 9890 9891 #if defined(PERL_IMPLICIT_CONTEXT) 9892 9893 /* pTHX_ magic can't cope with varargs, so this is a no-context 9894 * version of the main function, (which may itself be aliased to us). 9895 * Don't access this version directly. 9896 */ 9897 9898 void 9899 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...) 9900 { 9901 dTHX; 9902 va_list args; 9903 9904 PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT; 9905 9906 va_start(args, pat); 9907 sv_vsetpvf(sv, pat, &args); 9908 va_end(args); 9909 } 9910 9911 /* pTHX_ magic can't cope with varargs, so this is a no-context 9912 * version of the main function, (which may itself be aliased to us). 9913 * Don't access this version directly. 9914 */ 9915 9916 void 9917 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...) 9918 { 9919 dTHX; 9920 va_list args; 9921 9922 PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT; 9923 9924 va_start(args, pat); 9925 sv_vsetpvf_mg(sv, pat, &args); 9926 va_end(args); 9927 } 9928 #endif 9929 9930 /* 9931 =for apidoc sv_setpvf 9932 9933 Works like C<sv_catpvf> but copies the text into the SV instead of 9934 appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>. 9935 9936 =cut 9937 */ 9938 9939 void 9940 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...) 9941 { 9942 va_list args; 9943 9944 PERL_ARGS_ASSERT_SV_SETPVF; 9945 9946 va_start(args, pat); 9947 sv_vsetpvf(sv, pat, &args); 9948 va_end(args); 9949 } 9950 9951 /* 9952 =for apidoc sv_vsetpvf 9953 9954 Works like C<sv_vcatpvf> but copies the text into the SV instead of 9955 appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>. 9956 9957 Usually used via its frontend C<sv_setpvf>. 9958 9959 =cut 9960 */ 9961 9962 void 9963 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args) 9964 { 9965 PERL_ARGS_ASSERT_SV_VSETPVF; 9966 9967 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL); 9968 } 9969 9970 /* 9971 =for apidoc sv_setpvf_mg 9972 9973 Like C<sv_setpvf>, but also handles 'set' magic. 9974 9975 =cut 9976 */ 9977 9978 void 9979 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...) 9980 { 9981 va_list args; 9982 9983 PERL_ARGS_ASSERT_SV_SETPVF_MG; 9984 9985 va_start(args, pat); 9986 sv_vsetpvf_mg(sv, pat, &args); 9987 va_end(args); 9988 } 9989 9990 /* 9991 =for apidoc sv_vsetpvf_mg 9992 9993 Like C<sv_vsetpvf>, but also handles 'set' magic. 9994 9995 Usually used via its frontend C<sv_setpvf_mg>. 9996 9997 =cut 9998 */ 9999 10000 void 10001 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args) 10002 { 10003 PERL_ARGS_ASSERT_SV_VSETPVF_MG; 10004 10005 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL); 10006 SvSETMAGIC(sv); 10007 } 10008 10009 #if defined(PERL_IMPLICIT_CONTEXT) 10010 10011 /* pTHX_ magic can't cope with varargs, so this is a no-context 10012 * version of the main function, (which may itself be aliased to us). 10013 * Don't access this version directly. 10014 */ 10015 10016 void 10017 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...) 10018 { 10019 dTHX; 10020 va_list args; 10021 10022 PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT; 10023 10024 va_start(args, pat); 10025 sv_vcatpvf(sv, pat, &args); 10026 va_end(args); 10027 } 10028 10029 /* pTHX_ magic can't cope with varargs, so this is a no-context 10030 * version of the main function, (which may itself be aliased to us). 10031 * Don't access this version directly. 10032 */ 10033 10034 void 10035 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...) 10036 { 10037 dTHX; 10038 va_list args; 10039 10040 PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT; 10041 10042 va_start(args, pat); 10043 sv_vcatpvf_mg(sv, pat, &args); 10044 va_end(args); 10045 } 10046 #endif 10047 10048 /* 10049 =for apidoc sv_catpvf 10050 10051 Processes its arguments like C<sprintf> and appends the formatted 10052 output to an SV. If the appended data contains "wide" characters 10053 (including, but not limited to, SVs with a UTF-8 PV formatted with %s, 10054 and characters >255 formatted with %c), the original SV might get 10055 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See 10056 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be 10057 valid UTF-8; if the original SV was bytes, the pattern should be too. 10058 10059 =cut */ 10060 10061 void 10062 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...) 10063 { 10064 va_list args; 10065 10066 PERL_ARGS_ASSERT_SV_CATPVF; 10067 10068 va_start(args, pat); 10069 sv_vcatpvf(sv, pat, &args); 10070 va_end(args); 10071 } 10072 10073 /* 10074 =for apidoc sv_vcatpvf 10075 10076 Processes its arguments like C<vsprintf> and appends the formatted output 10077 to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>. 10078 10079 Usually used via its frontend C<sv_catpvf>. 10080 10081 =cut 10082 */ 10083 10084 void 10085 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args) 10086 { 10087 PERL_ARGS_ASSERT_SV_VCATPVF; 10088 10089 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL); 10090 } 10091 10092 /* 10093 =for apidoc sv_catpvf_mg 10094 10095 Like C<sv_catpvf>, but also handles 'set' magic. 10096 10097 =cut 10098 */ 10099 10100 void 10101 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...) 10102 { 10103 va_list args; 10104 10105 PERL_ARGS_ASSERT_SV_CATPVF_MG; 10106 10107 va_start(args, pat); 10108 sv_vcatpvf_mg(sv, pat, &args); 10109 va_end(args); 10110 } 10111 10112 /* 10113 =for apidoc sv_vcatpvf_mg 10114 10115 Like C<sv_vcatpvf>, but also handles 'set' magic. 10116 10117 Usually used via its frontend C<sv_catpvf_mg>. 10118 10119 =cut 10120 */ 10121 10122 void 10123 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args) 10124 { 10125 PERL_ARGS_ASSERT_SV_VCATPVF_MG; 10126 10127 sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL); 10128 SvSETMAGIC(sv); 10129 } 10130 10131 /* 10132 =for apidoc sv_vsetpvfn 10133 10134 Works like C<sv_vcatpvfn> but copies the text into the SV instead of 10135 appending it. 10136 10137 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>. 10138 10139 =cut 10140 */ 10141 10142 void 10143 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, 10144 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted) 10145 { 10146 PERL_ARGS_ASSERT_SV_VSETPVFN; 10147 10148 sv_setpvs(sv, ""); 10149 sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0); 10150 } 10151 10152 10153 /* 10154 * Warn of missing argument to sprintf, and then return a defined value 10155 * to avoid inappropriate "use of uninit" warnings [perl #71000]. 10156 */ 10157 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */ 10158 STATIC SV* 10159 S_vcatpvfn_missing_argument(pTHX) { 10160 if (ckWARN(WARN_MISSING)) { 10161 Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s", 10162 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()"); 10163 } 10164 return &PL_sv_no; 10165 } 10166 10167 10168 STATIC I32 10169 S_expect_number(pTHX_ char **const pattern) 10170 { 10171 dVAR; 10172 I32 var = 0; 10173 10174 PERL_ARGS_ASSERT_EXPECT_NUMBER; 10175 10176 switch (**pattern) { 10177 case '1': case '2': case '3': 10178 case '4': case '5': case '6': 10179 case '7': case '8': case '9': 10180 var = *(*pattern)++ - '0'; 10181 while (isDIGIT(**pattern)) { 10182 const I32 tmp = var * 10 + (*(*pattern)++ - '0'); 10183 if (tmp < var) 10184 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn")); 10185 var = tmp; 10186 } 10187 } 10188 return var; 10189 } 10190 10191 STATIC char * 10192 S_F0convert(NV nv, char *const endbuf, STRLEN *const len) 10193 { 10194 const int neg = nv < 0; 10195 UV uv; 10196 10197 PERL_ARGS_ASSERT_F0CONVERT; 10198 10199 if (neg) 10200 nv = -nv; 10201 if (nv < UV_MAX) { 10202 char *p = endbuf; 10203 nv += 0.5; 10204 uv = (UV)nv; 10205 if (uv & 1 && uv == nv) 10206 uv--; /* Round to even */ 10207 do { 10208 const unsigned dig = uv % 10; 10209 *--p = '0' + dig; 10210 } while (uv /= 10); 10211 if (neg) 10212 *--p = '-'; 10213 *len = endbuf - p; 10214 return p; 10215 } 10216 return NULL; 10217 } 10218 10219 10220 /* 10221 =for apidoc sv_vcatpvfn 10222 10223 =for apidoc sv_vcatpvfn_flags 10224 10225 Processes its arguments like C<vsprintf> and appends the formatted output 10226 to an SV. Uses an array of SVs if the C style variable argument list is 10227 missing (NULL). When running with taint checks enabled, indicates via 10228 C<maybe_tainted> if results are untrustworthy (often due to the use of 10229 locales). 10230 10231 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic. 10232 10233 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>. 10234 10235 =cut 10236 */ 10237 10238 #define VECTORIZE_ARGS vecsv = va_arg(*args, SV*);\ 10239 vecstr = (U8*)SvPV_const(vecsv,veclen);\ 10240 vec_utf8 = DO_UTF8(vecsv); 10241 10242 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */ 10243 10244 void 10245 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, 10246 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted) 10247 { 10248 PERL_ARGS_ASSERT_SV_VCATPVFN; 10249 10250 sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC); 10251 } 10252 10253 void 10254 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, 10255 va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted, 10256 const U32 flags) 10257 { 10258 dVAR; 10259 char *p; 10260 char *q; 10261 const char *patend; 10262 STRLEN origlen; 10263 I32 svix = 0; 10264 static const char nullstr[] = "(null)"; 10265 SV *argsv = NULL; 10266 bool has_utf8 = DO_UTF8(sv); /* has the result utf8? */ 10267 const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */ 10268 SV *nsv = NULL; 10269 /* Times 4: a decimal digit takes more than 3 binary digits. 10270 * NV_DIG: mantissa takes than many decimal digits. 10271 * Plus 32: Playing safe. */ 10272 char ebuf[IV_DIG * 4 + NV_DIG + 32]; 10273 /* large enough for "%#.#f" --chip */ 10274 /* what about long double NVs? --jhi */ 10275 10276 PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS; 10277 PERL_UNUSED_ARG(maybe_tainted); 10278 10279 if (flags & SV_GMAGIC) 10280 SvGETMAGIC(sv); 10281 10282 /* no matter what, this is a string now */ 10283 (void)SvPV_force_nomg(sv, origlen); 10284 10285 /* special-case "", "%s", and "%-p" (SVf - see below) */ 10286 if (patlen == 0) 10287 return; 10288 if (patlen == 2 && pat[0] == '%' && pat[1] == 's') { 10289 if (args) { 10290 const char * const s = va_arg(*args, char*); 10291 sv_catpv_nomg(sv, s ? s : nullstr); 10292 } 10293 else if (svix < svmax) { 10294 /* we want get magic on the source but not the target. sv_catsv can't do that, though */ 10295 SvGETMAGIC(*svargs); 10296 sv_catsv_nomg(sv, *svargs); 10297 } 10298 else 10299 S_vcatpvfn_missing_argument(aTHX); 10300 return; 10301 } 10302 if (args && patlen == 3 && pat[0] == '%' && 10303 pat[1] == '-' && pat[2] == 'p') { 10304 argsv = MUTABLE_SV(va_arg(*args, void*)); 10305 sv_catsv_nomg(sv, argsv); 10306 return; 10307 } 10308 10309 #ifndef USE_LONG_DOUBLE 10310 /* special-case "%.<number>[gf]" */ 10311 if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.' 10312 && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) { 10313 unsigned digits = 0; 10314 const char *pp; 10315 10316 pp = pat + 2; 10317 while (*pp >= '0' && *pp <= '9') 10318 digits = 10 * digits + (*pp++ - '0'); 10319 if (pp - pat == (int)patlen - 1 && svix < svmax) { 10320 const NV nv = SvNV(*svargs); 10321 if (*pp == 'g') { 10322 /* Add check for digits != 0 because it seems that some 10323 gconverts are buggy in this case, and we don't yet have 10324 a Configure test for this. */ 10325 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) { 10326 /* 0, point, slack */ 10327 Gconvert(nv, (int)digits, 0, ebuf); 10328 sv_catpv_nomg(sv, ebuf); 10329 if (*ebuf) /* May return an empty string for digits==0 */ 10330 return; 10331 } 10332 } else if (!digits) { 10333 STRLEN l; 10334 10335 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) { 10336 sv_catpvn_nomg(sv, p, l); 10337 return; 10338 } 10339 } 10340 } 10341 } 10342 #endif /* !USE_LONG_DOUBLE */ 10343 10344 if (!args && svix < svmax && DO_UTF8(*svargs)) 10345 has_utf8 = TRUE; 10346 10347 patend = (char*)pat + patlen; 10348 for (p = (char*)pat; p < patend; p = q) { 10349 bool alt = FALSE; 10350 bool left = FALSE; 10351 bool vectorize = FALSE; 10352 bool vectorarg = FALSE; 10353 bool vec_utf8 = FALSE; 10354 char fill = ' '; 10355 char plus = 0; 10356 char intsize = 0; 10357 STRLEN width = 0; 10358 STRLEN zeros = 0; 10359 bool has_precis = FALSE; 10360 STRLEN precis = 0; 10361 const I32 osvix = svix; 10362 bool is_utf8 = FALSE; /* is this item utf8? */ 10363 #ifdef HAS_LDBL_SPRINTF_BUG 10364 /* This is to try to fix a bug with irix/nonstop-ux/powerux and 10365 with sfio - Allen <allens@cpan.org> */ 10366 bool fix_ldbl_sprintf_bug = FALSE; 10367 #endif 10368 10369 char esignbuf[4]; 10370 U8 utf8buf[UTF8_MAXBYTES+1]; 10371 STRLEN esignlen = 0; 10372 10373 const char *eptr = NULL; 10374 const char *fmtstart; 10375 STRLEN elen = 0; 10376 SV *vecsv = NULL; 10377 const U8 *vecstr = NULL; 10378 STRLEN veclen = 0; 10379 char c = 0; 10380 int i; 10381 unsigned base = 0; 10382 IV iv = 0; 10383 UV uv = 0; 10384 /* we need a long double target in case HAS_LONG_DOUBLE but 10385 not USE_LONG_DOUBLE 10386 */ 10387 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE 10388 long double nv; 10389 #else 10390 NV nv; 10391 #endif 10392 STRLEN have; 10393 STRLEN need; 10394 STRLEN gap; 10395 const char *dotstr = "."; 10396 STRLEN dotstrlen = 1; 10397 I32 efix = 0; /* explicit format parameter index */ 10398 I32 ewix = 0; /* explicit width index */ 10399 I32 epix = 0; /* explicit precision index */ 10400 I32 evix = 0; /* explicit vector index */ 10401 bool asterisk = FALSE; 10402 10403 /* echo everything up to the next format specification */ 10404 for (q = p; q < patend && *q != '%'; ++q) ; 10405 if (q > p) { 10406 if (has_utf8 && !pat_utf8) 10407 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv); 10408 else 10409 sv_catpvn_nomg(sv, p, q - p); 10410 p = q; 10411 } 10412 if (q++ >= patend) 10413 break; 10414 10415 fmtstart = q; 10416 10417 /* 10418 We allow format specification elements in this order: 10419 \d+\$ explicit format parameter index 10420 [-+ 0#]+ flags 10421 v|\*(\d+\$)?v vector with optional (optionally specified) arg 10422 0 flag (as above): repeated to allow "v02" 10423 \d+|\*(\d+\$)? width using optional (optionally specified) arg 10424 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg 10425 [hlqLV] size 10426 [%bcdefginopsuxDFOUX] format (mandatory) 10427 */ 10428 10429 if (args) { 10430 /* 10431 As of perl5.9.3, printf format checking is on by default. 10432 Internally, perl uses %p formats to provide an escape to 10433 some extended formatting. This block deals with those 10434 extensions: if it does not match, (char*)q is reset and 10435 the normal format processing code is used. 10436 10437 Currently defined extensions are: 10438 %p include pointer address (standard) 10439 %-p (SVf) include an SV (previously %_) 10440 %-<num>p include an SV with precision <num> 10441 %2p include a HEK 10442 %3p include a HEK with precision of 256 10443 %<num>p (where num != 2 or 3) reserved for future 10444 extensions 10445 10446 Robin Barker 2005-07-14 (but modified since) 10447 10448 %1p (VDf) removed. RMB 2007-10-19 10449 */ 10450 char* r = q; 10451 bool sv = FALSE; 10452 STRLEN n = 0; 10453 if (*q == '-') 10454 sv = *q++; 10455 n = expect_number(&q); 10456 if (*q++ == 'p') { 10457 if (sv) { /* SVf */ 10458 if (n) { 10459 precis = n; 10460 has_precis = TRUE; 10461 } 10462 argsv = MUTABLE_SV(va_arg(*args, void*)); 10463 eptr = SvPV_const(argsv, elen); 10464 if (DO_UTF8(argsv)) 10465 is_utf8 = TRUE; 10466 goto string; 10467 } 10468 else if (n==2 || n==3) { /* HEKf */ 10469 HEK * const hek = va_arg(*args, HEK *); 10470 eptr = HEK_KEY(hek); 10471 elen = HEK_LEN(hek); 10472 if (HEK_UTF8(hek)) is_utf8 = TRUE; 10473 if (n==3) precis = 256, has_precis = TRUE; 10474 goto string; 10475 } 10476 else if (n) { 10477 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), 10478 "internal %%<num>p might conflict with future printf extensions"); 10479 } 10480 } 10481 q = r; 10482 } 10483 10484 if ( (width = expect_number(&q)) ) { 10485 if (*q == '$') { 10486 ++q; 10487 efix = width; 10488 } else { 10489 goto gotwidth; 10490 } 10491 } 10492 10493 /* FLAGS */ 10494 10495 while (*q) { 10496 switch (*q) { 10497 case ' ': 10498 case '+': 10499 if (plus == '+' && *q == ' ') /* '+' over ' ' */ 10500 q++; 10501 else 10502 plus = *q++; 10503 continue; 10504 10505 case '-': 10506 left = TRUE; 10507 q++; 10508 continue; 10509 10510 case '0': 10511 fill = *q++; 10512 continue; 10513 10514 case '#': 10515 alt = TRUE; 10516 q++; 10517 continue; 10518 10519 default: 10520 break; 10521 } 10522 break; 10523 } 10524 10525 tryasterisk: 10526 if (*q == '*') { 10527 q++; 10528 if ( (ewix = expect_number(&q)) ) 10529 if (*q++ != '$') 10530 goto unknown; 10531 asterisk = TRUE; 10532 } 10533 if (*q == 'v') { 10534 q++; 10535 if (vectorize) 10536 goto unknown; 10537 if ((vectorarg = asterisk)) { 10538 evix = ewix; 10539 ewix = 0; 10540 asterisk = FALSE; 10541 } 10542 vectorize = TRUE; 10543 goto tryasterisk; 10544 } 10545 10546 if (!asterisk) 10547 { 10548 if( *q == '0' ) 10549 fill = *q++; 10550 width = expect_number(&q); 10551 } 10552 10553 if (vectorize && vectorarg) { 10554 /* vectorizing, but not with the default "." */ 10555 if (args) 10556 vecsv = va_arg(*args, SV*); 10557 else if (evix) { 10558 vecsv = (evix > 0 && evix <= svmax) 10559 ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX); 10560 } else { 10561 vecsv = svix < svmax 10562 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX); 10563 } 10564 dotstr = SvPV_const(vecsv, dotstrlen); 10565 /* Keep the DO_UTF8 test *after* the SvPV call, else things go 10566 bad with tied or overloaded values that return UTF8. */ 10567 if (DO_UTF8(vecsv)) 10568 is_utf8 = TRUE; 10569 else if (has_utf8) { 10570 vecsv = sv_mortalcopy(vecsv); 10571 sv_utf8_upgrade(vecsv); 10572 dotstr = SvPV_const(vecsv, dotstrlen); 10573 is_utf8 = TRUE; 10574 } 10575 } 10576 10577 if (asterisk) { 10578 if (args) 10579 i = va_arg(*args, int); 10580 else 10581 i = (ewix ? ewix <= svmax : svix < svmax) ? 10582 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0; 10583 left |= (i < 0); 10584 width = (i < 0) ? -i : i; 10585 } 10586 gotwidth: 10587 10588 /* PRECISION */ 10589 10590 if (*q == '.') { 10591 q++; 10592 if (*q == '*') { 10593 q++; 10594 if ( ((epix = expect_number(&q))) && (*q++ != '$') ) 10595 goto unknown; 10596 /* XXX: todo, support specified precision parameter */ 10597 if (epix) 10598 goto unknown; 10599 if (args) 10600 i = va_arg(*args, int); 10601 else 10602 i = (ewix ? ewix <= svmax : svix < svmax) 10603 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0; 10604 precis = i; 10605 has_precis = !(i < 0); 10606 } 10607 else { 10608 precis = 0; 10609 while (isDIGIT(*q)) 10610 precis = precis * 10 + (*q++ - '0'); 10611 has_precis = TRUE; 10612 } 10613 } 10614 10615 if (vectorize) { 10616 if (args) { 10617 VECTORIZE_ARGS 10618 } 10619 else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) { 10620 vecsv = svargs[efix ? efix-1 : svix++]; 10621 vecstr = (U8*)SvPV_const(vecsv,veclen); 10622 vec_utf8 = DO_UTF8(vecsv); 10623 10624 /* if this is a version object, we need to convert 10625 * back into v-string notation and then let the 10626 * vectorize happen normally 10627 */ 10628 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) { 10629 if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) { 10630 Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF), 10631 "vector argument not supported with alpha versions"); 10632 goto vdblank; 10633 } 10634 vecsv = sv_newmortal(); 10635 scan_vstring((char *)vecstr, (char *)vecstr + veclen, 10636 vecsv); 10637 vecstr = (U8*)SvPV_const(vecsv, veclen); 10638 vec_utf8 = DO_UTF8(vecsv); 10639 } 10640 } 10641 else { 10642 vdblank: 10643 vecstr = (U8*)""; 10644 veclen = 0; 10645 } 10646 } 10647 10648 /* SIZE */ 10649 10650 switch (*q) { 10651 #ifdef WIN32 10652 case 'I': /* Ix, I32x, and I64x */ 10653 # ifdef USE_64_BIT_INT 10654 if (q[1] == '6' && q[2] == '4') { 10655 q += 3; 10656 intsize = 'q'; 10657 break; 10658 } 10659 # endif 10660 if (q[1] == '3' && q[2] == '2') { 10661 q += 3; 10662 break; 10663 } 10664 # ifdef USE_64_BIT_INT 10665 intsize = 'q'; 10666 # endif 10667 q++; 10668 break; 10669 #endif 10670 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE) 10671 case 'L': /* Ld */ 10672 /*FALLTHROUGH*/ 10673 #ifdef HAS_QUAD 10674 case 'q': /* qd */ 10675 #endif 10676 intsize = 'q'; 10677 q++; 10678 break; 10679 #endif 10680 case 'l': 10681 ++q; 10682 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE) 10683 if (*q == 'l') { /* lld, llf */ 10684 intsize = 'q'; 10685 ++q; 10686 } 10687 else 10688 #endif 10689 intsize = 'l'; 10690 break; 10691 case 'h': 10692 if (*++q == 'h') { /* hhd, hhu */ 10693 intsize = 'c'; 10694 ++q; 10695 } 10696 else 10697 intsize = 'h'; 10698 break; 10699 case 'V': 10700 case 'z': 10701 case 't': 10702 #if HAS_C99 10703 case 'j': 10704 #endif 10705 intsize = *q++; 10706 break; 10707 } 10708 10709 /* CONVERSION */ 10710 10711 if (*q == '%') { 10712 eptr = q++; 10713 elen = 1; 10714 if (vectorize) { 10715 c = '%'; 10716 goto unknown; 10717 } 10718 goto string; 10719 } 10720 10721 if (!vectorize && !args) { 10722 if (efix) { 10723 const I32 i = efix-1; 10724 argsv = (i >= 0 && i < svmax) 10725 ? svargs[i] : S_vcatpvfn_missing_argument(aTHX); 10726 } else { 10727 argsv = (svix >= 0 && svix < svmax) 10728 ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX); 10729 } 10730 } 10731 10732 switch (c = *q++) { 10733 10734 /* STRINGS */ 10735 10736 case 'c': 10737 if (vectorize) 10738 goto unknown; 10739 uv = (args) ? va_arg(*args, int) : SvIV(argsv); 10740 if ((uv > 255 || 10741 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv))) 10742 && !IN_BYTES) { 10743 eptr = (char*)utf8buf; 10744 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf; 10745 is_utf8 = TRUE; 10746 } 10747 else { 10748 c = (char)uv; 10749 eptr = &c; 10750 elen = 1; 10751 } 10752 goto string; 10753 10754 case 's': 10755 if (vectorize) 10756 goto unknown; 10757 if (args) { 10758 eptr = va_arg(*args, char*); 10759 if (eptr) 10760 elen = strlen(eptr); 10761 else { 10762 eptr = (char *)nullstr; 10763 elen = sizeof nullstr - 1; 10764 } 10765 } 10766 else { 10767 eptr = SvPV_const(argsv, elen); 10768 if (DO_UTF8(argsv)) { 10769 STRLEN old_precis = precis; 10770 if (has_precis && precis < elen) { 10771 STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen); 10772 STRLEN p = precis > ulen ? ulen : precis; 10773 precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0); 10774 /* sticks at end */ 10775 } 10776 if (width) { /* fudge width (can't fudge elen) */ 10777 if (has_precis && precis < elen) 10778 width += precis - old_precis; 10779 else 10780 width += 10781 elen - sv_or_pv_len_utf8(argsv,eptr,elen); 10782 } 10783 is_utf8 = TRUE; 10784 } 10785 } 10786 10787 string: 10788 if (has_precis && precis < elen) 10789 elen = precis; 10790 break; 10791 10792 /* INTEGERS */ 10793 10794 case 'p': 10795 if (alt || vectorize) 10796 goto unknown; 10797 uv = PTR2UV(args ? va_arg(*args, void*) : argsv); 10798 base = 16; 10799 goto integer; 10800 10801 case 'D': 10802 #ifdef IV_IS_QUAD 10803 intsize = 'q'; 10804 #else 10805 intsize = 'l'; 10806 #endif 10807 /*FALLTHROUGH*/ 10808 case 'd': 10809 case 'i': 10810 #if vdNUMBER 10811 format_vd: 10812 #endif 10813 if (vectorize) { 10814 STRLEN ulen; 10815 if (!veclen) 10816 continue; 10817 if (vec_utf8) 10818 uv = utf8n_to_uvchr(vecstr, veclen, &ulen, 10819 UTF8_ALLOW_ANYUV); 10820 else { 10821 uv = *vecstr; 10822 ulen = 1; 10823 } 10824 vecstr += ulen; 10825 veclen -= ulen; 10826 if (plus) 10827 esignbuf[esignlen++] = plus; 10828 } 10829 else if (args) { 10830 switch (intsize) { 10831 case 'c': iv = (char)va_arg(*args, int); break; 10832 case 'h': iv = (short)va_arg(*args, int); break; 10833 case 'l': iv = va_arg(*args, long); break; 10834 case 'V': iv = va_arg(*args, IV); break; 10835 case 'z': iv = va_arg(*args, SSize_t); break; 10836 case 't': iv = va_arg(*args, ptrdiff_t); break; 10837 default: iv = va_arg(*args, int); break; 10838 #if HAS_C99 10839 case 'j': iv = va_arg(*args, intmax_t); break; 10840 #endif 10841 case 'q': 10842 #ifdef HAS_QUAD 10843 iv = va_arg(*args, Quad_t); break; 10844 #else 10845 goto unknown; 10846 #endif 10847 } 10848 } 10849 else { 10850 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */ 10851 switch (intsize) { 10852 case 'c': iv = (char)tiv; break; 10853 case 'h': iv = (short)tiv; break; 10854 case 'l': iv = (long)tiv; break; 10855 case 'V': 10856 default: iv = tiv; break; 10857 case 'q': 10858 #ifdef HAS_QUAD 10859 iv = (Quad_t)tiv; break; 10860 #else 10861 goto unknown; 10862 #endif 10863 } 10864 } 10865 if ( !vectorize ) /* we already set uv above */ 10866 { 10867 if (iv >= 0) { 10868 uv = iv; 10869 if (plus) 10870 esignbuf[esignlen++] = plus; 10871 } 10872 else { 10873 uv = -iv; 10874 esignbuf[esignlen++] = '-'; 10875 } 10876 } 10877 base = 10; 10878 goto integer; 10879 10880 case 'U': 10881 #ifdef IV_IS_QUAD 10882 intsize = 'q'; 10883 #else 10884 intsize = 'l'; 10885 #endif 10886 /*FALLTHROUGH*/ 10887 case 'u': 10888 base = 10; 10889 goto uns_integer; 10890 10891 case 'B': 10892 case 'b': 10893 base = 2; 10894 goto uns_integer; 10895 10896 case 'O': 10897 #ifdef IV_IS_QUAD 10898 intsize = 'q'; 10899 #else 10900 intsize = 'l'; 10901 #endif 10902 /*FALLTHROUGH*/ 10903 case 'o': 10904 base = 8; 10905 goto uns_integer; 10906 10907 case 'X': 10908 case 'x': 10909 base = 16; 10910 10911 uns_integer: 10912 if (vectorize) { 10913 STRLEN ulen; 10914 vector: 10915 if (!veclen) 10916 continue; 10917 if (vec_utf8) 10918 uv = utf8n_to_uvchr(vecstr, veclen, &ulen, 10919 UTF8_ALLOW_ANYUV); 10920 else { 10921 uv = *vecstr; 10922 ulen = 1; 10923 } 10924 vecstr += ulen; 10925 veclen -= ulen; 10926 } 10927 else if (args) { 10928 switch (intsize) { 10929 case 'c': uv = (unsigned char)va_arg(*args, unsigned); break; 10930 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break; 10931 case 'l': uv = va_arg(*args, unsigned long); break; 10932 case 'V': uv = va_arg(*args, UV); break; 10933 case 'z': uv = va_arg(*args, Size_t); break; 10934 case 't': uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */ 10935 #if HAS_C99 10936 case 'j': uv = va_arg(*args, uintmax_t); break; 10937 #endif 10938 default: uv = va_arg(*args, unsigned); break; 10939 case 'q': 10940 #ifdef HAS_QUAD 10941 uv = va_arg(*args, Uquad_t); break; 10942 #else 10943 goto unknown; 10944 #endif 10945 } 10946 } 10947 else { 10948 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */ 10949 switch (intsize) { 10950 case 'c': uv = (unsigned char)tuv; break; 10951 case 'h': uv = (unsigned short)tuv; break; 10952 case 'l': uv = (unsigned long)tuv; break; 10953 case 'V': 10954 default: uv = tuv; break; 10955 case 'q': 10956 #ifdef HAS_QUAD 10957 uv = (Uquad_t)tuv; break; 10958 #else 10959 goto unknown; 10960 #endif 10961 } 10962 } 10963 10964 integer: 10965 { 10966 char *ptr = ebuf + sizeof ebuf; 10967 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */ 10968 zeros = 0; 10969 10970 switch (base) { 10971 unsigned dig; 10972 case 16: 10973 p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit); 10974 do { 10975 dig = uv & 15; 10976 *--ptr = p[dig]; 10977 } while (uv >>= 4); 10978 if (tempalt) { 10979 esignbuf[esignlen++] = '0'; 10980 esignbuf[esignlen++] = c; /* 'x' or 'X' */ 10981 } 10982 break; 10983 case 8: 10984 do { 10985 dig = uv & 7; 10986 *--ptr = '0' + dig; 10987 } while (uv >>= 3); 10988 if (alt && *ptr != '0') 10989 *--ptr = '0'; 10990 break; 10991 case 2: 10992 do { 10993 dig = uv & 1; 10994 *--ptr = '0' + dig; 10995 } while (uv >>= 1); 10996 if (tempalt) { 10997 esignbuf[esignlen++] = '0'; 10998 esignbuf[esignlen++] = c; 10999 } 11000 break; 11001 default: /* it had better be ten or less */ 11002 do { 11003 dig = uv % base; 11004 *--ptr = '0' + dig; 11005 } while (uv /= base); 11006 break; 11007 } 11008 elen = (ebuf + sizeof ebuf) - ptr; 11009 eptr = ptr; 11010 if (has_precis) { 11011 if (precis > elen) 11012 zeros = precis - elen; 11013 else if (precis == 0 && elen == 1 && *eptr == '0' 11014 && !(base == 8 && alt)) /* "%#.0o" prints "0" */ 11015 elen = 0; 11016 11017 /* a precision nullifies the 0 flag. */ 11018 if (fill == '0') 11019 fill = ' '; 11020 } 11021 } 11022 break; 11023 11024 /* FLOATING POINT */ 11025 11026 case 'F': 11027 c = 'f'; /* maybe %F isn't supported here */ 11028 /*FALLTHROUGH*/ 11029 case 'e': case 'E': 11030 case 'f': 11031 case 'g': case 'G': 11032 if (vectorize) 11033 goto unknown; 11034 11035 /* This is evil, but floating point is even more evil */ 11036 11037 /* for SV-style calling, we can only get NV 11038 for C-style calling, we assume %f is double; 11039 for simplicity we allow any of %Lf, %llf, %qf for long double 11040 */ 11041 switch (intsize) { 11042 case 'V': 11043 #if defined(USE_LONG_DOUBLE) 11044 intsize = 'q'; 11045 #endif 11046 break; 11047 /* [perl #20339] - we should accept and ignore %lf rather than die */ 11048 case 'l': 11049 /*FALLTHROUGH*/ 11050 default: 11051 #if defined(USE_LONG_DOUBLE) 11052 intsize = args ? 0 : 'q'; 11053 #endif 11054 break; 11055 case 'q': 11056 #if defined(HAS_LONG_DOUBLE) 11057 break; 11058 #else 11059 /*FALLTHROUGH*/ 11060 #endif 11061 case 'c': 11062 case 'h': 11063 case 'z': 11064 case 't': 11065 case 'j': 11066 goto unknown; 11067 } 11068 11069 /* now we need (long double) if intsize == 'q', else (double) */ 11070 nv = (args) ? 11071 #if LONG_DOUBLESIZE > DOUBLESIZE 11072 intsize == 'q' ? 11073 va_arg(*args, long double) : 11074 va_arg(*args, double) 11075 #else 11076 va_arg(*args, double) 11077 #endif 11078 : SvNV(argsv); 11079 11080 need = 0; 11081 /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything 11082 else. frexp() has some unspecified behaviour for those three */ 11083 if (c != 'e' && c != 'E' && (nv * 0) == 0) { 11084 i = PERL_INT_MIN; 11085 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this 11086 will cast our (long double) to (double) */ 11087 (void)Perl_frexp(nv, &i); 11088 if (i == PERL_INT_MIN) 11089 Perl_die(aTHX_ "panic: frexp"); 11090 if (i > 0) 11091 need = BIT_DIGITS(i); 11092 } 11093 need += has_precis ? precis : 6; /* known default */ 11094 11095 if (need < width) 11096 need = width; 11097 11098 #ifdef HAS_LDBL_SPRINTF_BUG 11099 /* This is to try to fix a bug with irix/nonstop-ux/powerux and 11100 with sfio - Allen <allens@cpan.org> */ 11101 11102 # ifdef DBL_MAX 11103 # define MY_DBL_MAX DBL_MAX 11104 # else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */ 11105 # if DOUBLESIZE >= 8 11106 # define MY_DBL_MAX 1.7976931348623157E+308L 11107 # else 11108 # define MY_DBL_MAX 3.40282347E+38L 11109 # endif 11110 # endif 11111 11112 # ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */ 11113 # define MY_DBL_MAX_BUG 1L 11114 # else 11115 # define MY_DBL_MAX_BUG MY_DBL_MAX 11116 # endif 11117 11118 # ifdef DBL_MIN 11119 # define MY_DBL_MIN DBL_MIN 11120 # else /* XXX guessing! -Allen */ 11121 # if DOUBLESIZE >= 8 11122 # define MY_DBL_MIN 2.2250738585072014E-308L 11123 # else 11124 # define MY_DBL_MIN 1.17549435E-38L 11125 # endif 11126 # endif 11127 11128 if ((intsize == 'q') && (c == 'f') && 11129 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) && 11130 (need < DBL_DIG)) { 11131 /* it's going to be short enough that 11132 * long double precision is not needed */ 11133 11134 if ((nv <= 0L) && (nv >= -0L)) 11135 fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */ 11136 else { 11137 /* would use Perl_fp_class as a double-check but not 11138 * functional on IRIX - see perl.h comments */ 11139 11140 if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) { 11141 /* It's within the range that a double can represent */ 11142 #if defined(DBL_MAX) && !defined(DBL_MIN) 11143 if ((nv >= ((long double)1/DBL_MAX)) || 11144 (nv <= (-(long double)1/DBL_MAX))) 11145 #endif 11146 fix_ldbl_sprintf_bug = TRUE; 11147 } 11148 } 11149 if (fix_ldbl_sprintf_bug == TRUE) { 11150 double temp; 11151 11152 intsize = 0; 11153 temp = (double)nv; 11154 nv = (NV)temp; 11155 } 11156 } 11157 11158 # undef MY_DBL_MAX 11159 # undef MY_DBL_MAX_BUG 11160 # undef MY_DBL_MIN 11161 11162 #endif /* HAS_LDBL_SPRINTF_BUG */ 11163 11164 need += 20; /* fudge factor */ 11165 if (PL_efloatsize < need) { 11166 Safefree(PL_efloatbuf); 11167 PL_efloatsize = need + 20; /* more fudge */ 11168 Newx(PL_efloatbuf, PL_efloatsize, char); 11169 PL_efloatbuf[0] = '\0'; 11170 } 11171 11172 if ( !(width || left || plus || alt) && fill != '0' 11173 && has_precis && intsize != 'q' ) { /* Shortcuts */ 11174 /* See earlier comment about buggy Gconvert when digits, 11175 aka precis is 0 */ 11176 if ( c == 'g' && precis) { 11177 Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf); 11178 /* May return an empty string for digits==0 */ 11179 if (*PL_efloatbuf) { 11180 elen = strlen(PL_efloatbuf); 11181 goto float_converted; 11182 } 11183 } else if ( c == 'f' && !precis) { 11184 if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen))) 11185 break; 11186 } 11187 } 11188 { 11189 char *ptr = ebuf + sizeof ebuf; 11190 *--ptr = '\0'; 11191 *--ptr = c; 11192 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */ 11193 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl) 11194 if (intsize == 'q') { 11195 /* Copy the one or more characters in a long double 11196 * format before the 'base' ([efgEFG]) character to 11197 * the format string. */ 11198 static char const prifldbl[] = PERL_PRIfldbl; 11199 char const *p = prifldbl + sizeof(prifldbl) - 3; 11200 while (p >= prifldbl) { *--ptr = *p--; } 11201 } 11202 #endif 11203 if (has_precis) { 11204 base = precis; 11205 do { *--ptr = '0' + (base % 10); } while (base /= 10); 11206 *--ptr = '.'; 11207 } 11208 if (width) { 11209 base = width; 11210 do { *--ptr = '0' + (base % 10); } while (base /= 10); 11211 } 11212 if (fill == '0') 11213 *--ptr = fill; 11214 if (left) 11215 *--ptr = '-'; 11216 if (plus) 11217 *--ptr = plus; 11218 if (alt) 11219 *--ptr = '#'; 11220 *--ptr = '%'; 11221 11222 /* No taint. Otherwise we are in the strange situation 11223 * where printf() taints but print($float) doesn't. 11224 * --jhi */ 11225 #if defined(HAS_LONG_DOUBLE) 11226 elen = ((intsize == 'q') 11227 ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv) 11228 : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv)); 11229 #else 11230 elen = my_sprintf(PL_efloatbuf, ptr, nv); 11231 #endif 11232 } 11233 float_converted: 11234 eptr = PL_efloatbuf; 11235 break; 11236 11237 /* SPECIAL */ 11238 11239 case 'n': 11240 if (vectorize) 11241 goto unknown; 11242 i = SvCUR(sv) - origlen; 11243 if (args) { 11244 switch (intsize) { 11245 case 'c': *(va_arg(*args, char*)) = i; break; 11246 case 'h': *(va_arg(*args, short*)) = i; break; 11247 default: *(va_arg(*args, int*)) = i; break; 11248 case 'l': *(va_arg(*args, long*)) = i; break; 11249 case 'V': *(va_arg(*args, IV*)) = i; break; 11250 case 'z': *(va_arg(*args, SSize_t*)) = i; break; 11251 case 't': *(va_arg(*args, ptrdiff_t*)) = i; break; 11252 #if HAS_C99 11253 case 'j': *(va_arg(*args, intmax_t*)) = i; break; 11254 #endif 11255 case 'q': 11256 #ifdef HAS_QUAD 11257 *(va_arg(*args, Quad_t*)) = i; break; 11258 #else 11259 goto unknown; 11260 #endif 11261 } 11262 } 11263 else 11264 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i); 11265 continue; /* not "break" */ 11266 11267 /* UNKNOWN */ 11268 11269 default: 11270 unknown: 11271 if (!args 11272 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF) 11273 && ckWARN(WARN_PRINTF)) 11274 { 11275 SV * const msg = sv_newmortal(); 11276 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ", 11277 (PL_op->op_type == OP_PRTF) ? "" : "s"); 11278 if (fmtstart < patend) { 11279 const char * const fmtend = q < patend ? q : patend; 11280 const char * f; 11281 sv_catpvs(msg, "\"%"); 11282 for (f = fmtstart; f < fmtend; f++) { 11283 if (isPRINT(*f)) { 11284 sv_catpvn_nomg(msg, f, 1); 11285 } else { 11286 Perl_sv_catpvf(aTHX_ msg, 11287 "\\%03"UVof, (UV)*f & 0xFF); 11288 } 11289 } 11290 sv_catpvs(msg, "\""); 11291 } else { 11292 sv_catpvs(msg, "end of string"); 11293 } 11294 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */ 11295 } 11296 11297 /* output mangled stuff ... */ 11298 if (c == '\0') 11299 --q; 11300 eptr = p; 11301 elen = q - p; 11302 11303 /* ... right here, because formatting flags should not apply */ 11304 SvGROW(sv, SvCUR(sv) + elen + 1); 11305 p = SvEND(sv); 11306 Copy(eptr, p, elen, char); 11307 p += elen; 11308 *p = '\0'; 11309 SvCUR_set(sv, p - SvPVX_const(sv)); 11310 svix = osvix; 11311 continue; /* not "break" */ 11312 } 11313 11314 if (is_utf8 != has_utf8) { 11315 if (is_utf8) { 11316 if (SvCUR(sv)) 11317 sv_utf8_upgrade(sv); 11318 } 11319 else { 11320 const STRLEN old_elen = elen; 11321 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP); 11322 sv_utf8_upgrade(nsv); 11323 eptr = SvPVX_const(nsv); 11324 elen = SvCUR(nsv); 11325 11326 if (width) { /* fudge width (can't fudge elen) */ 11327 width += elen - old_elen; 11328 } 11329 is_utf8 = TRUE; 11330 } 11331 } 11332 11333 have = esignlen + zeros + elen; 11334 if (have < zeros) 11335 Perl_croak_memory_wrap(); 11336 11337 need = (have > width ? have : width); 11338 gap = need - have; 11339 11340 if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1)) 11341 Perl_croak_memory_wrap(); 11342 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1); 11343 p = SvEND(sv); 11344 if (esignlen && fill == '0') { 11345 int i; 11346 for (i = 0; i < (int)esignlen; i++) 11347 *p++ = esignbuf[i]; 11348 } 11349 if (gap && !left) { 11350 memset(p, fill, gap); 11351 p += gap; 11352 } 11353 if (esignlen && fill != '0') { 11354 int i; 11355 for (i = 0; i < (int)esignlen; i++) 11356 *p++ = esignbuf[i]; 11357 } 11358 if (zeros) { 11359 int i; 11360 for (i = zeros; i; i--) 11361 *p++ = '0'; 11362 } 11363 if (elen) { 11364 Copy(eptr, p, elen, char); 11365 p += elen; 11366 } 11367 if (gap && left) { 11368 memset(p, ' ', gap); 11369 p += gap; 11370 } 11371 if (vectorize) { 11372 if (veclen) { 11373 Copy(dotstr, p, dotstrlen, char); 11374 p += dotstrlen; 11375 } 11376 else 11377 vectorize = FALSE; /* done iterating over vecstr */ 11378 } 11379 if (is_utf8) 11380 has_utf8 = TRUE; 11381 if (has_utf8) 11382 SvUTF8_on(sv); 11383 *p = '\0'; 11384 SvCUR_set(sv, p - SvPVX_const(sv)); 11385 if (vectorize) { 11386 esignlen = 0; 11387 goto vector; 11388 } 11389 } 11390 SvTAINT(sv); 11391 } 11392 11393 /* ========================================================================= 11394 11395 =head1 Cloning an interpreter 11396 11397 All the macros and functions in this section are for the private use of 11398 the main function, perl_clone(). 11399 11400 The foo_dup() functions make an exact copy of an existing foo thingy. 11401 During the course of a cloning, a hash table is used to map old addresses 11402 to new addresses. The table is created and manipulated with the 11403 ptr_table_* functions. 11404 11405 =cut 11406 11407 * =========================================================================*/ 11408 11409 11410 #if defined(USE_ITHREADS) 11411 11412 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */ 11413 #ifndef GpREFCNT_inc 11414 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL) 11415 #endif 11416 11417 11418 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact 11419 that currently av_dup, gv_dup and hv_dup are the same as sv_dup. 11420 If this changes, please unmerge ss_dup. 11421 Likewise, sv_dup_inc_multiple() relies on this fact. */ 11422 #define sv_dup_inc_NN(s,t) SvREFCNT_inc_NN(sv_dup_inc(s,t)) 11423 #define av_dup(s,t) MUTABLE_AV(sv_dup((const SV *)s,t)) 11424 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t)) 11425 #define hv_dup(s,t) MUTABLE_HV(sv_dup((const SV *)s,t)) 11426 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t)) 11427 #define cv_dup(s,t) MUTABLE_CV(sv_dup((const SV *)s,t)) 11428 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t)) 11429 #define io_dup(s,t) MUTABLE_IO(sv_dup((const SV *)s,t)) 11430 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t)) 11431 #define gv_dup(s,t) MUTABLE_GV(sv_dup((const SV *)s,t)) 11432 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t)) 11433 #define SAVEPV(p) ((p) ? savepv(p) : NULL) 11434 #define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL) 11435 11436 /* clone a parser */ 11437 11438 yy_parser * 11439 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param) 11440 { 11441 yy_parser *parser; 11442 11443 PERL_ARGS_ASSERT_PARSER_DUP; 11444 11445 if (!proto) 11446 return NULL; 11447 11448 /* look for it in the table first */ 11449 parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto); 11450 if (parser) 11451 return parser; 11452 11453 /* create anew and remember what it is */ 11454 Newxz(parser, 1, yy_parser); 11455 ptr_table_store(PL_ptr_table, proto, parser); 11456 11457 /* XXX these not yet duped */ 11458 parser->old_parser = NULL; 11459 parser->stack = NULL; 11460 parser->ps = NULL; 11461 parser->stack_size = 0; 11462 /* XXX parser->stack->state = 0; */ 11463 11464 /* XXX eventually, just Copy() most of the parser struct ? */ 11465 11466 parser->lex_brackets = proto->lex_brackets; 11467 parser->lex_casemods = proto->lex_casemods; 11468 parser->lex_brackstack = savepvn(proto->lex_brackstack, 11469 (proto->lex_brackets < 120 ? 120 : proto->lex_brackets)); 11470 parser->lex_casestack = savepvn(proto->lex_casestack, 11471 (proto->lex_casemods < 12 ? 12 : proto->lex_casemods)); 11472 parser->lex_defer = proto->lex_defer; 11473 parser->lex_dojoin = proto->lex_dojoin; 11474 parser->lex_expect = proto->lex_expect; 11475 parser->lex_formbrack = proto->lex_formbrack; 11476 parser->lex_inpat = proto->lex_inpat; 11477 parser->lex_inwhat = proto->lex_inwhat; 11478 parser->lex_op = proto->lex_op; 11479 parser->lex_repl = sv_dup_inc(proto->lex_repl, param); 11480 parser->lex_starts = proto->lex_starts; 11481 parser->lex_stuff = sv_dup_inc(proto->lex_stuff, param); 11482 parser->multi_close = proto->multi_close; 11483 parser->multi_open = proto->multi_open; 11484 parser->multi_start = proto->multi_start; 11485 parser->multi_end = proto->multi_end; 11486 parser->preambled = proto->preambled; 11487 parser->sublex_info = proto->sublex_info; /* XXX not quite right */ 11488 parser->linestr = sv_dup_inc(proto->linestr, param); 11489 parser->expect = proto->expect; 11490 parser->copline = proto->copline; 11491 parser->last_lop_op = proto->last_lop_op; 11492 parser->lex_state = proto->lex_state; 11493 parser->rsfp = fp_dup(proto->rsfp, '<', param); 11494 /* rsfp_filters entries have fake IoDIRP() */ 11495 parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param); 11496 parser->in_my = proto->in_my; 11497 parser->in_my_stash = hv_dup(proto->in_my_stash, param); 11498 parser->error_count = proto->error_count; 11499 11500 11501 parser->linestr = sv_dup_inc(proto->linestr, param); 11502 11503 { 11504 char * const ols = SvPVX(proto->linestr); 11505 char * const ls = SvPVX(parser->linestr); 11506 11507 parser->bufptr = ls + (proto->bufptr >= ols ? 11508 proto->bufptr - ols : 0); 11509 parser->oldbufptr = ls + (proto->oldbufptr >= ols ? 11510 proto->oldbufptr - ols : 0); 11511 parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ? 11512 proto->oldoldbufptr - ols : 0); 11513 parser->linestart = ls + (proto->linestart >= ols ? 11514 proto->linestart - ols : 0); 11515 parser->last_uni = ls + (proto->last_uni >= ols ? 11516 proto->last_uni - ols : 0); 11517 parser->last_lop = ls + (proto->last_lop >= ols ? 11518 proto->last_lop - ols : 0); 11519 11520 parser->bufend = ls + SvCUR(parser->linestr); 11521 } 11522 11523 Copy(proto->tokenbuf, parser->tokenbuf, 256, char); 11524 11525 11526 #ifdef PERL_MAD 11527 parser->endwhite = proto->endwhite; 11528 parser->faketokens = proto->faketokens; 11529 parser->lasttoke = proto->lasttoke; 11530 parser->nextwhite = proto->nextwhite; 11531 parser->realtokenstart = proto->realtokenstart; 11532 parser->skipwhite = proto->skipwhite; 11533 parser->thisclose = proto->thisclose; 11534 parser->thismad = proto->thismad; 11535 parser->thisopen = proto->thisopen; 11536 parser->thisstuff = proto->thisstuff; 11537 parser->thistoken = proto->thistoken; 11538 parser->thiswhite = proto->thiswhite; 11539 11540 Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE); 11541 parser->curforce = proto->curforce; 11542 #else 11543 Copy(proto->nextval, parser->nextval, 5, YYSTYPE); 11544 Copy(proto->nexttype, parser->nexttype, 5, I32); 11545 parser->nexttoke = proto->nexttoke; 11546 #endif 11547 11548 /* XXX should clone saved_curcop here, but we aren't passed 11549 * proto_perl; so do it in perl_clone_using instead */ 11550 11551 return parser; 11552 } 11553 11554 11555 /* duplicate a file handle */ 11556 11557 PerlIO * 11558 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param) 11559 { 11560 PerlIO *ret; 11561 11562 PERL_ARGS_ASSERT_FP_DUP; 11563 PERL_UNUSED_ARG(type); 11564 11565 if (!fp) 11566 return (PerlIO*)NULL; 11567 11568 /* look for it in the table first */ 11569 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp); 11570 if (ret) 11571 return ret; 11572 11573 /* create anew and remember what it is */ 11574 ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE); 11575 ptr_table_store(PL_ptr_table, fp, ret); 11576 return ret; 11577 } 11578 11579 /* duplicate a directory handle */ 11580 11581 DIR * 11582 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param) 11583 { 11584 DIR *ret; 11585 11586 #ifdef HAS_FCHDIR 11587 DIR *pwd; 11588 const Direntry_t *dirent; 11589 char smallbuf[256]; 11590 char *name = NULL; 11591 STRLEN len = 0; 11592 long pos; 11593 #endif 11594 11595 PERL_UNUSED_CONTEXT; 11596 PERL_ARGS_ASSERT_DIRP_DUP; 11597 11598 if (!dp) 11599 return (DIR*)NULL; 11600 11601 /* look for it in the table first */ 11602 ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp); 11603 if (ret) 11604 return ret; 11605 11606 #ifdef HAS_FCHDIR 11607 11608 PERL_UNUSED_ARG(param); 11609 11610 /* create anew */ 11611 11612 /* open the current directory (so we can switch back) */ 11613 if (!(pwd = PerlDir_open("."))) return (DIR *)NULL; 11614 11615 /* chdir to our dir handle and open the present working directory */ 11616 if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) { 11617 PerlDir_close(pwd); 11618 return (DIR *)NULL; 11619 } 11620 /* Now we should have two dir handles pointing to the same dir. */ 11621 11622 /* Be nice to the calling code and chdir back to where we were. */ 11623 fchdir(my_dirfd(pwd)); /* If this fails, then what? */ 11624 11625 /* We have no need of the pwd handle any more. */ 11626 PerlDir_close(pwd); 11627 11628 #ifdef DIRNAMLEN 11629 # define d_namlen(d) (d)->d_namlen 11630 #else 11631 # define d_namlen(d) strlen((d)->d_name) 11632 #endif 11633 /* Iterate once through dp, to get the file name at the current posi- 11634 tion. Then step back. */ 11635 pos = PerlDir_tell(dp); 11636 if ((dirent = PerlDir_read(dp))) { 11637 len = d_namlen(dirent); 11638 if (len <= sizeof smallbuf) name = smallbuf; 11639 else Newx(name, len, char); 11640 Move(dirent->d_name, name, len, char); 11641 } 11642 PerlDir_seek(dp, pos); 11643 11644 /* Iterate through the new dir handle, till we find a file with the 11645 right name. */ 11646 if (!dirent) /* just before the end */ 11647 for(;;) { 11648 pos = PerlDir_tell(ret); 11649 if (PerlDir_read(ret)) continue; /* not there yet */ 11650 PerlDir_seek(ret, pos); /* step back */ 11651 break; 11652 } 11653 else { 11654 const long pos0 = PerlDir_tell(ret); 11655 for(;;) { 11656 pos = PerlDir_tell(ret); 11657 if ((dirent = PerlDir_read(ret))) { 11658 if (len == d_namlen(dirent) 11659 && memEQ(name, dirent->d_name, len)) { 11660 /* found it */ 11661 PerlDir_seek(ret, pos); /* step back */ 11662 break; 11663 } 11664 /* else we are not there yet; keep iterating */ 11665 } 11666 else { /* This is not meant to happen. The best we can do is 11667 reset the iterator to the beginning. */ 11668 PerlDir_seek(ret, pos0); 11669 break; 11670 } 11671 } 11672 } 11673 #undef d_namlen 11674 11675 if (name && name != smallbuf) 11676 Safefree(name); 11677 #endif 11678 11679 #ifdef WIN32 11680 ret = win32_dirp_dup(dp, param); 11681 #endif 11682 11683 /* pop it in the pointer table */ 11684 if (ret) 11685 ptr_table_store(PL_ptr_table, dp, ret); 11686 11687 return ret; 11688 } 11689 11690 /* duplicate a typeglob */ 11691 11692 GP * 11693 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param) 11694 { 11695 GP *ret; 11696 11697 PERL_ARGS_ASSERT_GP_DUP; 11698 11699 if (!gp) 11700 return (GP*)NULL; 11701 /* look for it in the table first */ 11702 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp); 11703 if (ret) 11704 return ret; 11705 11706 /* create anew and remember what it is */ 11707 Newxz(ret, 1, GP); 11708 ptr_table_store(PL_ptr_table, gp, ret); 11709 11710 /* clone */ 11711 /* ret->gp_refcnt must be 0 before any other dups are called. We're relying 11712 on Newxz() to do this for us. */ 11713 ret->gp_sv = sv_dup_inc(gp->gp_sv, param); 11714 ret->gp_io = io_dup_inc(gp->gp_io, param); 11715 ret->gp_form = cv_dup_inc(gp->gp_form, param); 11716 ret->gp_av = av_dup_inc(gp->gp_av, param); 11717 ret->gp_hv = hv_dup_inc(gp->gp_hv, param); 11718 ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */ 11719 ret->gp_cv = cv_dup_inc(gp->gp_cv, param); 11720 ret->gp_cvgen = gp->gp_cvgen; 11721 ret->gp_line = gp->gp_line; 11722 ret->gp_file_hek = hek_dup(gp->gp_file_hek, param); 11723 return ret; 11724 } 11725 11726 /* duplicate a chain of magic */ 11727 11728 MAGIC * 11729 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param) 11730 { 11731 MAGIC *mgret = NULL; 11732 MAGIC **mgprev_p = &mgret; 11733 11734 PERL_ARGS_ASSERT_MG_DUP; 11735 11736 for (; mg; mg = mg->mg_moremagic) { 11737 MAGIC *nmg; 11738 11739 if ((param->flags & CLONEf_JOIN_IN) 11740 && mg->mg_type == PERL_MAGIC_backref) 11741 /* when joining, we let the individual SVs add themselves to 11742 * backref as needed. */ 11743 continue; 11744 11745 Newx(nmg, 1, MAGIC); 11746 *mgprev_p = nmg; 11747 mgprev_p = &(nmg->mg_moremagic); 11748 11749 /* There was a comment "XXX copy dynamic vtable?" but as we don't have 11750 dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates 11751 from the original commit adding Perl_mg_dup() - revision 4538. 11752 Similarly there is the annotation "XXX random ptr?" next to the 11753 assignment to nmg->mg_ptr. */ 11754 *nmg = *mg; 11755 11756 /* FIXME for plugins 11757 if (nmg->mg_type == PERL_MAGIC_qr) { 11758 nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param)); 11759 } 11760 else 11761 */ 11762 nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED) 11763 ? nmg->mg_type == PERL_MAGIC_backref 11764 /* The backref AV has its reference 11765 * count deliberately bumped by 1 */ 11766 ? SvREFCNT_inc(av_dup_inc((const AV *) 11767 nmg->mg_obj, param)) 11768 : sv_dup_inc(nmg->mg_obj, param) 11769 : sv_dup(nmg->mg_obj, param); 11770 11771 if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) { 11772 if (nmg->mg_len > 0) { 11773 nmg->mg_ptr = SAVEPVN(nmg->mg_ptr, nmg->mg_len); 11774 if (nmg->mg_type == PERL_MAGIC_overload_table && 11775 AMT_AMAGIC((AMT*)nmg->mg_ptr)) 11776 { 11777 AMT * const namtp = (AMT*)nmg->mg_ptr; 11778 sv_dup_inc_multiple((SV**)(namtp->table), 11779 (SV**)(namtp->table), NofAMmeth, param); 11780 } 11781 } 11782 else if (nmg->mg_len == HEf_SVKEY) 11783 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param); 11784 } 11785 if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) { 11786 nmg->mg_virtual->svt_dup(aTHX_ nmg, param); 11787 } 11788 } 11789 return mgret; 11790 } 11791 11792 #endif /* USE_ITHREADS */ 11793 11794 struct ptr_tbl_arena { 11795 struct ptr_tbl_arena *next; 11796 struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers. */ 11797 }; 11798 11799 /* create a new pointer-mapping table */ 11800 11801 PTR_TBL_t * 11802 Perl_ptr_table_new(pTHX) 11803 { 11804 PTR_TBL_t *tbl; 11805 PERL_UNUSED_CONTEXT; 11806 11807 Newx(tbl, 1, PTR_TBL_t); 11808 tbl->tbl_max = 511; 11809 tbl->tbl_items = 0; 11810 tbl->tbl_arena = NULL; 11811 tbl->tbl_arena_next = NULL; 11812 tbl->tbl_arena_end = NULL; 11813 Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*); 11814 return tbl; 11815 } 11816 11817 #define PTR_TABLE_HASH(ptr) \ 11818 ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17))) 11819 11820 /* map an existing pointer using a table */ 11821 11822 STATIC PTR_TBL_ENT_t * 11823 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv) 11824 { 11825 PTR_TBL_ENT_t *tblent; 11826 const UV hash = PTR_TABLE_HASH(sv); 11827 11828 PERL_ARGS_ASSERT_PTR_TABLE_FIND; 11829 11830 tblent = tbl->tbl_ary[hash & tbl->tbl_max]; 11831 for (; tblent; tblent = tblent->next) { 11832 if (tblent->oldval == sv) 11833 return tblent; 11834 } 11835 return NULL; 11836 } 11837 11838 void * 11839 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv) 11840 { 11841 PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv); 11842 11843 PERL_ARGS_ASSERT_PTR_TABLE_FETCH; 11844 PERL_UNUSED_CONTEXT; 11845 11846 return tblent ? tblent->newval : NULL; 11847 } 11848 11849 /* add a new entry to a pointer-mapping table */ 11850 11851 void 11852 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv) 11853 { 11854 PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv); 11855 11856 PERL_ARGS_ASSERT_PTR_TABLE_STORE; 11857 PERL_UNUSED_CONTEXT; 11858 11859 if (tblent) { 11860 tblent->newval = newsv; 11861 } else { 11862 const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max; 11863 11864 if (tbl->tbl_arena_next == tbl->tbl_arena_end) { 11865 struct ptr_tbl_arena *new_arena; 11866 11867 Newx(new_arena, 1, struct ptr_tbl_arena); 11868 new_arena->next = tbl->tbl_arena; 11869 tbl->tbl_arena = new_arena; 11870 tbl->tbl_arena_next = new_arena->array; 11871 tbl->tbl_arena_end = new_arena->array 11872 + sizeof(new_arena->array) / sizeof(new_arena->array[0]); 11873 } 11874 11875 tblent = tbl->tbl_arena_next++; 11876 11877 tblent->oldval = oldsv; 11878 tblent->newval = newsv; 11879 tblent->next = tbl->tbl_ary[entry]; 11880 tbl->tbl_ary[entry] = tblent; 11881 tbl->tbl_items++; 11882 if (tblent->next && tbl->tbl_items > tbl->tbl_max) 11883 ptr_table_split(tbl); 11884 } 11885 } 11886 11887 /* double the hash bucket size of an existing ptr table */ 11888 11889 void 11890 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl) 11891 { 11892 PTR_TBL_ENT_t **ary = tbl->tbl_ary; 11893 const UV oldsize = tbl->tbl_max + 1; 11894 UV newsize = oldsize * 2; 11895 UV i; 11896 11897 PERL_ARGS_ASSERT_PTR_TABLE_SPLIT; 11898 PERL_UNUSED_CONTEXT; 11899 11900 Renew(ary, newsize, PTR_TBL_ENT_t*); 11901 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*); 11902 tbl->tbl_max = --newsize; 11903 tbl->tbl_ary = ary; 11904 for (i=0; i < oldsize; i++, ary++) { 11905 PTR_TBL_ENT_t **entp = ary; 11906 PTR_TBL_ENT_t *ent = *ary; 11907 PTR_TBL_ENT_t **curentp; 11908 if (!ent) 11909 continue; 11910 curentp = ary + oldsize; 11911 do { 11912 if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) { 11913 *entp = ent->next; 11914 ent->next = *curentp; 11915 *curentp = ent; 11916 } 11917 else 11918 entp = &ent->next; 11919 ent = *entp; 11920 } while (ent); 11921 } 11922 } 11923 11924 /* remove all the entries from a ptr table */ 11925 /* Deprecated - will be removed post 5.14 */ 11926 11927 void 11928 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl) 11929 { 11930 if (tbl && tbl->tbl_items) { 11931 struct ptr_tbl_arena *arena = tbl->tbl_arena; 11932 11933 Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **); 11934 11935 while (arena) { 11936 struct ptr_tbl_arena *next = arena->next; 11937 11938 Safefree(arena); 11939 arena = next; 11940 }; 11941 11942 tbl->tbl_items = 0; 11943 tbl->tbl_arena = NULL; 11944 tbl->tbl_arena_next = NULL; 11945 tbl->tbl_arena_end = NULL; 11946 } 11947 } 11948 11949 /* clear and free a ptr table */ 11950 11951 void 11952 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl) 11953 { 11954 struct ptr_tbl_arena *arena; 11955 11956 if (!tbl) { 11957 return; 11958 } 11959 11960 arena = tbl->tbl_arena; 11961 11962 while (arena) { 11963 struct ptr_tbl_arena *next = arena->next; 11964 11965 Safefree(arena); 11966 arena = next; 11967 } 11968 11969 Safefree(tbl->tbl_ary); 11970 Safefree(tbl); 11971 } 11972 11973 #if defined(USE_ITHREADS) 11974 11975 void 11976 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param) 11977 { 11978 PERL_ARGS_ASSERT_RVPV_DUP; 11979 11980 assert(!isREGEXP(sstr)); 11981 if (SvROK(sstr)) { 11982 if (SvWEAKREF(sstr)) { 11983 SvRV_set(dstr, sv_dup(SvRV_const(sstr), param)); 11984 if (param->flags & CLONEf_JOIN_IN) { 11985 /* if joining, we add any back references individually rather 11986 * than copying the whole backref array */ 11987 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr); 11988 } 11989 } 11990 else 11991 SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param)); 11992 } 11993 else if (SvPVX_const(sstr)) { 11994 /* Has something there */ 11995 if (SvLEN(sstr)) { 11996 /* Normal PV - clone whole allocated space */ 11997 SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1)); 11998 /* sstr may not be that normal, but actually copy on write. 11999 But we are a true, independent SV, so: */ 12000 SvIsCOW_off(dstr); 12001 } 12002 else { 12003 /* Special case - not normally malloced for some reason */ 12004 if (isGV_with_GP(sstr)) { 12005 /* Don't need to do anything here. */ 12006 } 12007 else if ((SvIsCOW(sstr))) { 12008 /* A "shared" PV - clone it as "shared" PV */ 12009 SvPV_set(dstr, 12010 HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)), 12011 param))); 12012 } 12013 else { 12014 /* Some other special case - random pointer */ 12015 SvPV_set(dstr, (char *) SvPVX_const(sstr)); 12016 } 12017 } 12018 } 12019 else { 12020 /* Copy the NULL */ 12021 SvPV_set(dstr, NULL); 12022 } 12023 } 12024 12025 /* duplicate a list of SVs. source and dest may point to the same memory. */ 12026 static SV ** 12027 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest, 12028 SSize_t items, CLONE_PARAMS *const param) 12029 { 12030 PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE; 12031 12032 while (items-- > 0) { 12033 *dest++ = sv_dup_inc(*source++, param); 12034 } 12035 12036 return dest; 12037 } 12038 12039 /* duplicate an SV of any type (including AV, HV etc) */ 12040 12041 static SV * 12042 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param) 12043 { 12044 dVAR; 12045 SV *dstr; 12046 12047 PERL_ARGS_ASSERT_SV_DUP_COMMON; 12048 12049 if (SvTYPE(sstr) == (svtype)SVTYPEMASK) { 12050 #ifdef DEBUG_LEAKING_SCALARS_ABORT 12051 abort(); 12052 #endif 12053 return NULL; 12054 } 12055 /* look for it in the table first */ 12056 dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr)); 12057 if (dstr) 12058 return dstr; 12059 12060 if(param->flags & CLONEf_JOIN_IN) { 12061 /** We are joining here so we don't want do clone 12062 something that is bad **/ 12063 if (SvTYPE(sstr) == SVt_PVHV) { 12064 const HEK * const hvname = HvNAME_HEK(sstr); 12065 if (hvname) { 12066 /** don't clone stashes if they already exist **/ 12067 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 12068 HEK_UTF8(hvname) ? SVf_UTF8 : 0)); 12069 ptr_table_store(PL_ptr_table, sstr, dstr); 12070 return dstr; 12071 } 12072 } 12073 else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) { 12074 HV *stash = GvSTASH(sstr); 12075 const HEK * hvname; 12076 if (stash && (hvname = HvNAME_HEK(stash))) { 12077 /** don't clone GVs if they already exist **/ 12078 SV **svp; 12079 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 12080 HEK_UTF8(hvname) ? SVf_UTF8 : 0); 12081 svp = hv_fetch( 12082 stash, GvNAME(sstr), 12083 GvNAMEUTF8(sstr) 12084 ? -GvNAMELEN(sstr) 12085 : GvNAMELEN(sstr), 12086 0 12087 ); 12088 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) { 12089 ptr_table_store(PL_ptr_table, sstr, *svp); 12090 return *svp; 12091 } 12092 } 12093 } 12094 } 12095 12096 /* create anew and remember what it is */ 12097 new_SV(dstr); 12098 12099 #ifdef DEBUG_LEAKING_SCALARS 12100 dstr->sv_debug_optype = sstr->sv_debug_optype; 12101 dstr->sv_debug_line = sstr->sv_debug_line; 12102 dstr->sv_debug_inpad = sstr->sv_debug_inpad; 12103 dstr->sv_debug_parent = (SV*)sstr; 12104 FREE_SV_DEBUG_FILE(dstr); 12105 dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file); 12106 #endif 12107 12108 ptr_table_store(PL_ptr_table, sstr, dstr); 12109 12110 /* clone */ 12111 SvFLAGS(dstr) = SvFLAGS(sstr); 12112 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */ 12113 SvREFCNT(dstr) = 0; /* must be before any other dups! */ 12114 12115 #ifdef DEBUGGING 12116 if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx) 12117 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n", 12118 (void*)PL_watch_pvx, SvPVX_const(sstr)); 12119 #endif 12120 12121 /* don't clone objects whose class has asked us not to */ 12122 if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) { 12123 SvFLAGS(dstr) = 0; 12124 return dstr; 12125 } 12126 12127 switch (SvTYPE(sstr)) { 12128 case SVt_NULL: 12129 SvANY(dstr) = NULL; 12130 break; 12131 case SVt_IV: 12132 SvANY(dstr) = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv)); 12133 if(SvROK(sstr)) { 12134 Perl_rvpv_dup(aTHX_ dstr, sstr, param); 12135 } else { 12136 SvIV_set(dstr, SvIVX(sstr)); 12137 } 12138 break; 12139 case SVt_NV: 12140 SvANY(dstr) = new_XNV(); 12141 SvNV_set(dstr, SvNVX(sstr)); 12142 break; 12143 /* case SVt_BIND: */ 12144 default: 12145 { 12146 /* These are all the types that need complex bodies allocating. */ 12147 void *new_body; 12148 const svtype sv_type = SvTYPE(sstr); 12149 const struct body_details *const sv_type_details 12150 = bodies_by_type + sv_type; 12151 12152 switch (sv_type) { 12153 default: 12154 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr)); 12155 break; 12156 12157 case SVt_PVGV: 12158 case SVt_PVIO: 12159 case SVt_PVFM: 12160 case SVt_PVHV: 12161 case SVt_PVAV: 12162 case SVt_PVCV: 12163 case SVt_PVLV: 12164 case SVt_REGEXP: 12165 case SVt_PVMG: 12166 case SVt_PVNV: 12167 case SVt_PVIV: 12168 case SVt_PV: 12169 assert(sv_type_details->body_size); 12170 if (sv_type_details->arena) { 12171 new_body_inline(new_body, sv_type); 12172 new_body 12173 = (void*)((char*)new_body - sv_type_details->offset); 12174 } else { 12175 new_body = new_NOARENA(sv_type_details); 12176 } 12177 } 12178 assert(new_body); 12179 SvANY(dstr) = new_body; 12180 12181 #ifndef PURIFY 12182 Copy(((char*)SvANY(sstr)) + sv_type_details->offset, 12183 ((char*)SvANY(dstr)) + sv_type_details->offset, 12184 sv_type_details->copy, char); 12185 #else 12186 Copy(((char*)SvANY(sstr)), 12187 ((char*)SvANY(dstr)), 12188 sv_type_details->body_size + sv_type_details->offset, char); 12189 #endif 12190 12191 if (sv_type != SVt_PVAV && sv_type != SVt_PVHV 12192 && !isGV_with_GP(dstr) 12193 && !isREGEXP(dstr) 12194 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP))) 12195 Perl_rvpv_dup(aTHX_ dstr, sstr, param); 12196 12197 /* The Copy above means that all the source (unduplicated) pointers 12198 are now in the destination. We can check the flags and the 12199 pointers in either, but it's possible that there's less cache 12200 missing by always going for the destination. 12201 FIXME - instrument and check that assumption */ 12202 if (sv_type >= SVt_PVMG) { 12203 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) { 12204 SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param)); 12205 } else if (SvMAGIC(dstr)) 12206 SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param)); 12207 if (SvOBJECT(dstr) && SvSTASH(dstr)) 12208 SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param)); 12209 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */ 12210 } 12211 12212 /* The cast silences a GCC warning about unhandled types. */ 12213 switch ((int)sv_type) { 12214 case SVt_PV: 12215 break; 12216 case SVt_PVIV: 12217 break; 12218 case SVt_PVNV: 12219 break; 12220 case SVt_PVMG: 12221 break; 12222 case SVt_REGEXP: 12223 duprex: 12224 /* FIXME for plugins */ 12225 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any; 12226 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param); 12227 break; 12228 case SVt_PVLV: 12229 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */ 12230 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */ 12231 LvTARG(dstr) = dstr; 12232 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */ 12233 LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param)); 12234 else 12235 LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param); 12236 if (isREGEXP(sstr)) goto duprex; 12237 case SVt_PVGV: 12238 /* non-GP case already handled above */ 12239 if(isGV_with_GP(sstr)) { 12240 GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param); 12241 /* Don't call sv_add_backref here as it's going to be 12242 created as part of the magic cloning of the symbol 12243 table--unless this is during a join and the stash 12244 is not actually being cloned. */ 12245 /* Danger Will Robinson - GvGP(dstr) isn't initialised 12246 at the point of this comment. */ 12247 GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param); 12248 if (param->flags & CLONEf_JOIN_IN) 12249 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr); 12250 GvGP_set(dstr, gp_dup(GvGP(sstr), param)); 12251 (void)GpREFCNT_inc(GvGP(dstr)); 12252 } 12253 break; 12254 case SVt_PVIO: 12255 /* PL_parser->rsfp_filters entries have fake IoDIRP() */ 12256 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) { 12257 /* I have no idea why fake dirp (rsfps) 12258 should be treated differently but otherwise 12259 we end up with leaks -- sky*/ 12260 IoTOP_GV(dstr) = gv_dup_inc(IoTOP_GV(dstr), param); 12261 IoFMT_GV(dstr) = gv_dup_inc(IoFMT_GV(dstr), param); 12262 IoBOTTOM_GV(dstr) = gv_dup_inc(IoBOTTOM_GV(dstr), param); 12263 } else { 12264 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(dstr), param); 12265 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(dstr), param); 12266 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(dstr), param); 12267 if (IoDIRP(dstr)) { 12268 IoDIRP(dstr) = dirp_dup(IoDIRP(dstr), param); 12269 } else { 12270 NOOP; 12271 /* IoDIRP(dstr) is already a copy of IoDIRP(sstr) */ 12272 } 12273 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param); 12274 } 12275 if (IoOFP(dstr) == IoIFP(sstr)) 12276 IoOFP(dstr) = IoIFP(dstr); 12277 else 12278 IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param); 12279 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(dstr)); 12280 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(dstr)); 12281 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr)); 12282 break; 12283 case SVt_PVAV: 12284 /* avoid cloning an empty array */ 12285 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) { 12286 SV **dst_ary, **src_ary; 12287 SSize_t items = AvFILLp((const AV *)sstr) + 1; 12288 12289 src_ary = AvARRAY((const AV *)sstr); 12290 Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*); 12291 ptr_table_store(PL_ptr_table, src_ary, dst_ary); 12292 AvARRAY(MUTABLE_AV(dstr)) = dst_ary; 12293 AvALLOC((const AV *)dstr) = dst_ary; 12294 if (AvREAL((const AV *)sstr)) { 12295 dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items, 12296 param); 12297 } 12298 else { 12299 while (items-- > 0) 12300 *dst_ary++ = sv_dup(*src_ary++, param); 12301 } 12302 items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr); 12303 while (items-- > 0) { 12304 *dst_ary++ = &PL_sv_undef; 12305 } 12306 } 12307 else { 12308 AvARRAY(MUTABLE_AV(dstr)) = NULL; 12309 AvALLOC((const AV *)dstr) = (SV**)NULL; 12310 AvMAX( (const AV *)dstr) = -1; 12311 AvFILLp((const AV *)dstr) = -1; 12312 } 12313 break; 12314 case SVt_PVHV: 12315 if (HvARRAY((const HV *)sstr)) { 12316 STRLEN i = 0; 12317 const bool sharekeys = !!HvSHAREKEYS(sstr); 12318 XPVHV * const dxhv = (XPVHV*)SvANY(dstr); 12319 XPVHV * const sxhv = (XPVHV*)SvANY(sstr); 12320 char *darray; 12321 Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1) 12322 + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0), 12323 char); 12324 HvARRAY(dstr) = (HE**)darray; 12325 while (i <= sxhv->xhv_max) { 12326 const HE * const source = HvARRAY(sstr)[i]; 12327 HvARRAY(dstr)[i] = source 12328 ? he_dup(source, sharekeys, param) : 0; 12329 ++i; 12330 } 12331 if (SvOOK(sstr)) { 12332 const struct xpvhv_aux * const saux = HvAUX(sstr); 12333 struct xpvhv_aux * const daux = HvAUX(dstr); 12334 /* This flag isn't copied. */ 12335 SvOOK_on(dstr); 12336 12337 if (saux->xhv_name_count) { 12338 HEK ** const sname = saux->xhv_name_u.xhvnameu_names; 12339 const I32 count 12340 = saux->xhv_name_count < 0 12341 ? -saux->xhv_name_count 12342 : saux->xhv_name_count; 12343 HEK **shekp = sname + count; 12344 HEK **dhekp; 12345 Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *); 12346 dhekp = daux->xhv_name_u.xhvnameu_names + count; 12347 while (shekp-- > sname) { 12348 dhekp--; 12349 *dhekp = hek_dup(*shekp, param); 12350 } 12351 } 12352 else { 12353 daux->xhv_name_u.xhvnameu_name 12354 = hek_dup(saux->xhv_name_u.xhvnameu_name, 12355 param); 12356 } 12357 daux->xhv_name_count = saux->xhv_name_count; 12358 12359 daux->xhv_riter = saux->xhv_riter; 12360 daux->xhv_eiter = saux->xhv_eiter 12361 ? he_dup(saux->xhv_eiter, 12362 cBOOL(HvSHAREKEYS(sstr)), param) : 0; 12363 /* backref array needs refcnt=2; see sv_add_backref */ 12364 daux->xhv_backreferences = 12365 (param->flags & CLONEf_JOIN_IN) 12366 /* when joining, we let the individual GVs and 12367 * CVs add themselves to backref as 12368 * needed. This avoids pulling in stuff 12369 * that isn't required, and simplifies the 12370 * case where stashes aren't cloned back 12371 * if they already exist in the parent 12372 * thread */ 12373 ? NULL 12374 : saux->xhv_backreferences 12375 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV) 12376 ? MUTABLE_AV(SvREFCNT_inc( 12377 sv_dup_inc((const SV *) 12378 saux->xhv_backreferences, param))) 12379 : MUTABLE_AV(sv_dup((const SV *) 12380 saux->xhv_backreferences, param)) 12381 : 0; 12382 12383 daux->xhv_mro_meta = saux->xhv_mro_meta 12384 ? mro_meta_dup(saux->xhv_mro_meta, param) 12385 : 0; 12386 daux->xhv_super = NULL; 12387 12388 /* Record stashes for possible cloning in Perl_clone(). */ 12389 if (HvNAME(sstr)) 12390 av_push(param->stashes, dstr); 12391 } 12392 } 12393 else 12394 HvARRAY(MUTABLE_HV(dstr)) = NULL; 12395 break; 12396 case SVt_PVCV: 12397 if (!(param->flags & CLONEf_COPY_STACKS)) { 12398 CvDEPTH(dstr) = 0; 12399 } 12400 /*FALLTHROUGH*/ 12401 case SVt_PVFM: 12402 /* NOTE: not refcounted */ 12403 SvANY(MUTABLE_CV(dstr))->xcv_stash = 12404 hv_dup(CvSTASH(dstr), param); 12405 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr)) 12406 Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr); 12407 if (!CvISXSUB(dstr)) { 12408 OP_REFCNT_LOCK; 12409 CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr)); 12410 OP_REFCNT_UNLOCK; 12411 CvSLABBED_off(dstr); 12412 } else if (CvCONST(dstr)) { 12413 CvXSUBANY(dstr).any_ptr = 12414 sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param); 12415 } 12416 assert(!CvSLABBED(dstr)); 12417 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr)); 12418 if (CvNAMED(dstr)) 12419 SvANY((CV *)dstr)->xcv_gv_u.xcv_hek = 12420 share_hek_hek(CvNAME_HEK((CV *)sstr)); 12421 /* don't dup if copying back - CvGV isn't refcounted, so the 12422 * duped GV may never be freed. A bit of a hack! DAPM */ 12423 else 12424 SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv = 12425 CvCVGV_RC(dstr) 12426 ? gv_dup_inc(CvGV(sstr), param) 12427 : (param->flags & CLONEf_JOIN_IN) 12428 ? NULL 12429 : gv_dup(CvGV(sstr), param); 12430 12431 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param); 12432 CvOUTSIDE(dstr) = 12433 CvWEAKOUTSIDE(sstr) 12434 ? cv_dup( CvOUTSIDE(dstr), param) 12435 : cv_dup_inc(CvOUTSIDE(dstr), param); 12436 break; 12437 } 12438 } 12439 } 12440 12441 return dstr; 12442 } 12443 12444 SV * 12445 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param) 12446 { 12447 PERL_ARGS_ASSERT_SV_DUP_INC; 12448 return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL; 12449 } 12450 12451 SV * 12452 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param) 12453 { 12454 SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL; 12455 PERL_ARGS_ASSERT_SV_DUP; 12456 12457 /* Track every SV that (at least initially) had a reference count of 0. 12458 We need to do this by holding an actual reference to it in this array. 12459 If we attempt to cheat, turn AvREAL_off(), and store only pointers 12460 (akin to the stashes hash, and the perl stack), we come unstuck if 12461 a weak reference (or other SV legitimately SvREFCNT() == 0 for this 12462 thread) is manipulated in a CLONE method, because CLONE runs before the 12463 unreferenced array is walked to find SVs still with SvREFCNT() == 0 12464 (and fix things up by giving each a reference via the temps stack). 12465 Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and 12466 then SvREFCNT_dec(), it will be cleaned up (and added to the free list) 12467 before the walk of unreferenced happens and a reference to that is SV 12468 added to the temps stack. At which point we have the same SV considered 12469 to be in use, and free to be re-used. Not good. 12470 */ 12471 if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) { 12472 assert(param->unreferenced); 12473 av_push(param->unreferenced, SvREFCNT_inc(dstr)); 12474 } 12475 12476 return dstr; 12477 } 12478 12479 /* duplicate a context */ 12480 12481 PERL_CONTEXT * 12482 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param) 12483 { 12484 PERL_CONTEXT *ncxs; 12485 12486 PERL_ARGS_ASSERT_CX_DUP; 12487 12488 if (!cxs) 12489 return (PERL_CONTEXT*)NULL; 12490 12491 /* look for it in the table first */ 12492 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs); 12493 if (ncxs) 12494 return ncxs; 12495 12496 /* create anew and remember what it is */ 12497 Newx(ncxs, max + 1, PERL_CONTEXT); 12498 ptr_table_store(PL_ptr_table, cxs, ncxs); 12499 Copy(cxs, ncxs, max + 1, PERL_CONTEXT); 12500 12501 while (ix >= 0) { 12502 PERL_CONTEXT * const ncx = &ncxs[ix]; 12503 if (CxTYPE(ncx) == CXt_SUBST) { 12504 Perl_croak(aTHX_ "Cloning substitution context is unimplemented"); 12505 } 12506 else { 12507 ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl); 12508 switch (CxTYPE(ncx)) { 12509 case CXt_SUB: 12510 ncx->blk_sub.cv = (ncx->blk_sub.olddepth == 0 12511 ? cv_dup_inc(ncx->blk_sub.cv, param) 12512 : cv_dup(ncx->blk_sub.cv,param)); 12513 ncx->blk_sub.argarray = (CxHASARGS(ncx) 12514 ? av_dup_inc(ncx->blk_sub.argarray, 12515 param) 12516 : NULL); 12517 ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray, 12518 param); 12519 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table, 12520 ncx->blk_sub.oldcomppad); 12521 break; 12522 case CXt_EVAL: 12523 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv, 12524 param); 12525 ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param); 12526 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param); 12527 break; 12528 case CXt_LOOP_LAZYSV: 12529 ncx->blk_loop.state_u.lazysv.end 12530 = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param); 12531 /* We are taking advantage of av_dup_inc and sv_dup_inc 12532 actually being the same function, and order equivalence of 12533 the two unions. 12534 We can assert the later [but only at run time :-(] */ 12535 assert ((void *) &ncx->blk_loop.state_u.ary.ary == 12536 (void *) &ncx->blk_loop.state_u.lazysv.cur); 12537 case CXt_LOOP_FOR: 12538 ncx->blk_loop.state_u.ary.ary 12539 = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param); 12540 case CXt_LOOP_LAZYIV: 12541 case CXt_LOOP_PLAIN: 12542 if (CxPADLOOP(ncx)) { 12543 ncx->blk_loop.itervar_u.oldcomppad 12544 = (PAD*)ptr_table_fetch(PL_ptr_table, 12545 ncx->blk_loop.itervar_u.oldcomppad); 12546 } else { 12547 ncx->blk_loop.itervar_u.gv 12548 = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv, 12549 param); 12550 } 12551 break; 12552 case CXt_FORMAT: 12553 ncx->blk_format.cv = cv_dup(ncx->blk_format.cv, param); 12554 ncx->blk_format.gv = gv_dup(ncx->blk_format.gv, param); 12555 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv, 12556 param); 12557 break; 12558 case CXt_BLOCK: 12559 case CXt_NULL: 12560 case CXt_WHEN: 12561 case CXt_GIVEN: 12562 break; 12563 } 12564 } 12565 --ix; 12566 } 12567 return ncxs; 12568 } 12569 12570 /* duplicate a stack info structure */ 12571 12572 PERL_SI * 12573 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param) 12574 { 12575 PERL_SI *nsi; 12576 12577 PERL_ARGS_ASSERT_SI_DUP; 12578 12579 if (!si) 12580 return (PERL_SI*)NULL; 12581 12582 /* look for it in the table first */ 12583 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si); 12584 if (nsi) 12585 return nsi; 12586 12587 /* create anew and remember what it is */ 12588 Newxz(nsi, 1, PERL_SI); 12589 ptr_table_store(PL_ptr_table, si, nsi); 12590 12591 nsi->si_stack = av_dup_inc(si->si_stack, param); 12592 nsi->si_cxix = si->si_cxix; 12593 nsi->si_cxmax = si->si_cxmax; 12594 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param); 12595 nsi->si_type = si->si_type; 12596 nsi->si_prev = si_dup(si->si_prev, param); 12597 nsi->si_next = si_dup(si->si_next, param); 12598 nsi->si_markoff = si->si_markoff; 12599 12600 return nsi; 12601 } 12602 12603 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32) 12604 #define TOPINT(ss,ix) ((ss)[ix].any_i32) 12605 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long) 12606 #define TOPLONG(ss,ix) ((ss)[ix].any_long) 12607 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv) 12608 #define TOPIV(ss,ix) ((ss)[ix].any_iv) 12609 #define POPUV(ss,ix) ((ss)[--(ix)].any_uv) 12610 #define TOPUV(ss,ix) ((ss)[ix].any_uv) 12611 #define POPBOOL(ss,ix) ((ss)[--(ix)].any_bool) 12612 #define TOPBOOL(ss,ix) ((ss)[ix].any_bool) 12613 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr) 12614 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr) 12615 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr) 12616 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr) 12617 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr) 12618 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr) 12619 12620 /* XXXXX todo */ 12621 #define pv_dup_inc(p) SAVEPV(p) 12622 #define pv_dup(p) SAVEPV(p) 12623 #define svp_dup_inc(p,pp) any_dup(p,pp) 12624 12625 /* map any object to the new equivent - either something in the 12626 * ptr table, or something in the interpreter structure 12627 */ 12628 12629 void * 12630 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl) 12631 { 12632 void *ret; 12633 12634 PERL_ARGS_ASSERT_ANY_DUP; 12635 12636 if (!v) 12637 return (void*)NULL; 12638 12639 /* look for it in the table first */ 12640 ret = ptr_table_fetch(PL_ptr_table, v); 12641 if (ret) 12642 return ret; 12643 12644 /* see if it is part of the interpreter structure */ 12645 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1)) 12646 ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl)); 12647 else { 12648 ret = v; 12649 } 12650 12651 return ret; 12652 } 12653 12654 /* duplicate the save stack */ 12655 12656 ANY * 12657 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param) 12658 { 12659 dVAR; 12660 ANY * const ss = proto_perl->Isavestack; 12661 const I32 max = proto_perl->Isavestack_max; 12662 I32 ix = proto_perl->Isavestack_ix; 12663 ANY *nss; 12664 const SV *sv; 12665 const GV *gv; 12666 const AV *av; 12667 const HV *hv; 12668 void* ptr; 12669 int intval; 12670 long longval; 12671 GP *gp; 12672 IV iv; 12673 I32 i; 12674 char *c = NULL; 12675 void (*dptr) (void*); 12676 void (*dxptr) (pTHX_ void*); 12677 12678 PERL_ARGS_ASSERT_SS_DUP; 12679 12680 Newxz(nss, max, ANY); 12681 12682 while (ix > 0) { 12683 const UV uv = POPUV(ss,ix); 12684 const U8 type = (U8)uv & SAVE_MASK; 12685 12686 TOPUV(nss,ix) = uv; 12687 switch (type) { 12688 case SAVEt_CLEARSV: 12689 case SAVEt_CLEARPADRANGE: 12690 break; 12691 case SAVEt_HELEM: /* hash element */ 12692 sv = (const SV *)POPPTR(ss,ix); 12693 TOPPTR(nss,ix) = sv_dup_inc(sv, param); 12694 /* fall through */ 12695 case SAVEt_ITEM: /* normal string */ 12696 case SAVEt_GVSV: /* scalar slot in GV */ 12697 case SAVEt_SV: /* scalar reference */ 12698 sv = (const SV *)POPPTR(ss,ix); 12699 TOPPTR(nss,ix) = sv_dup_inc(sv, param); 12700 /* fall through */ 12701 case SAVEt_FREESV: 12702 case SAVEt_MORTALIZESV: 12703 sv = (const SV *)POPPTR(ss,ix); 12704 TOPPTR(nss,ix) = sv_dup_inc(sv, param); 12705 break; 12706 case SAVEt_SHARED_PVREF: /* char* in shared space */ 12707 c = (char*)POPPTR(ss,ix); 12708 TOPPTR(nss,ix) = savesharedpv(c); 12709 ptr = POPPTR(ss,ix); 12710 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12711 break; 12712 case SAVEt_GENERIC_SVREF: /* generic sv */ 12713 case SAVEt_SVREF: /* scalar reference */ 12714 sv = (const SV *)POPPTR(ss,ix); 12715 TOPPTR(nss,ix) = sv_dup_inc(sv, param); 12716 ptr = POPPTR(ss,ix); 12717 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */ 12718 break; 12719 case SAVEt_GVSLOT: /* any slot in GV */ 12720 sv = (const SV *)POPPTR(ss,ix); 12721 TOPPTR(nss,ix) = sv_dup_inc(sv, param); 12722 ptr = POPPTR(ss,ix); 12723 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */ 12724 sv = (const SV *)POPPTR(ss,ix); 12725 TOPPTR(nss,ix) = sv_dup_inc(sv, param); 12726 break; 12727 case SAVEt_HV: /* hash reference */ 12728 case SAVEt_AV: /* array reference */ 12729 sv = (const SV *) POPPTR(ss,ix); 12730 TOPPTR(nss,ix) = sv_dup_inc(sv, param); 12731 /* fall through */ 12732 case SAVEt_COMPPAD: 12733 case SAVEt_NSTAB: 12734 sv = (const SV *) POPPTR(ss,ix); 12735 TOPPTR(nss,ix) = sv_dup(sv, param); 12736 break; 12737 case SAVEt_INT: /* int reference */ 12738 ptr = POPPTR(ss,ix); 12739 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12740 intval = (int)POPINT(ss,ix); 12741 TOPINT(nss,ix) = intval; 12742 break; 12743 case SAVEt_LONG: /* long reference */ 12744 ptr = POPPTR(ss,ix); 12745 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12746 longval = (long)POPLONG(ss,ix); 12747 TOPLONG(nss,ix) = longval; 12748 break; 12749 case SAVEt_I32: /* I32 reference */ 12750 ptr = POPPTR(ss,ix); 12751 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12752 i = POPINT(ss,ix); 12753 TOPINT(nss,ix) = i; 12754 break; 12755 case SAVEt_IV: /* IV reference */ 12756 ptr = POPPTR(ss,ix); 12757 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12758 iv = POPIV(ss,ix); 12759 TOPIV(nss,ix) = iv; 12760 break; 12761 case SAVEt_HPTR: /* HV* reference */ 12762 case SAVEt_APTR: /* AV* reference */ 12763 case SAVEt_SPTR: /* SV* reference */ 12764 ptr = POPPTR(ss,ix); 12765 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12766 sv = (const SV *)POPPTR(ss,ix); 12767 TOPPTR(nss,ix) = sv_dup(sv, param); 12768 break; 12769 case SAVEt_VPTR: /* random* reference */ 12770 ptr = POPPTR(ss,ix); 12771 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12772 /* Fall through */ 12773 case SAVEt_INT_SMALL: 12774 case SAVEt_I32_SMALL: 12775 case SAVEt_I16: /* I16 reference */ 12776 case SAVEt_I8: /* I8 reference */ 12777 case SAVEt_BOOL: 12778 ptr = POPPTR(ss,ix); 12779 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12780 break; 12781 case SAVEt_GENERIC_PVREF: /* generic char* */ 12782 case SAVEt_PPTR: /* char* reference */ 12783 ptr = POPPTR(ss,ix); 12784 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12785 c = (char*)POPPTR(ss,ix); 12786 TOPPTR(nss,ix) = pv_dup(c); 12787 break; 12788 case SAVEt_GP: /* scalar reference */ 12789 gp = (GP*)POPPTR(ss,ix); 12790 TOPPTR(nss,ix) = gp = gp_dup(gp, param); 12791 (void)GpREFCNT_inc(gp); 12792 gv = (const GV *)POPPTR(ss,ix); 12793 TOPPTR(nss,ix) = gv_dup_inc(gv, param); 12794 break; 12795 case SAVEt_FREEOP: 12796 ptr = POPPTR(ss,ix); 12797 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) { 12798 /* these are assumed to be refcounted properly */ 12799 OP *o; 12800 switch (((OP*)ptr)->op_type) { 12801 case OP_LEAVESUB: 12802 case OP_LEAVESUBLV: 12803 case OP_LEAVEEVAL: 12804 case OP_LEAVE: 12805 case OP_SCOPE: 12806 case OP_LEAVEWRITE: 12807 TOPPTR(nss,ix) = ptr; 12808 o = (OP*)ptr; 12809 OP_REFCNT_LOCK; 12810 (void) OpREFCNT_inc(o); 12811 OP_REFCNT_UNLOCK; 12812 break; 12813 default: 12814 TOPPTR(nss,ix) = NULL; 12815 break; 12816 } 12817 } 12818 else 12819 TOPPTR(nss,ix) = NULL; 12820 break; 12821 case SAVEt_FREECOPHH: 12822 ptr = POPPTR(ss,ix); 12823 TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr); 12824 break; 12825 case SAVEt_DELETE: 12826 hv = (const HV *)POPPTR(ss,ix); 12827 TOPPTR(nss,ix) = hv_dup_inc(hv, param); 12828 i = POPINT(ss,ix); 12829 TOPINT(nss,ix) = i; 12830 /* Fall through */ 12831 case SAVEt_FREEPV: 12832 c = (char*)POPPTR(ss,ix); 12833 TOPPTR(nss,ix) = pv_dup_inc(c); 12834 break; 12835 case SAVEt_STACK_POS: /* Position on Perl stack */ 12836 i = POPINT(ss,ix); 12837 TOPINT(nss,ix) = i; 12838 break; 12839 case SAVEt_DESTRUCTOR: 12840 ptr = POPPTR(ss,ix); 12841 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */ 12842 dptr = POPDPTR(ss,ix); 12843 TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*), 12844 any_dup(FPTR2DPTR(void *, dptr), 12845 proto_perl)); 12846 break; 12847 case SAVEt_DESTRUCTOR_X: 12848 ptr = POPPTR(ss,ix); 12849 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */ 12850 dxptr = POPDXPTR(ss,ix); 12851 TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*), 12852 any_dup(FPTR2DPTR(void *, dxptr), 12853 proto_perl)); 12854 break; 12855 case SAVEt_REGCONTEXT: 12856 case SAVEt_ALLOC: 12857 ix -= uv >> SAVE_TIGHT_SHIFT; 12858 break; 12859 case SAVEt_AELEM: /* array element */ 12860 sv = (const SV *)POPPTR(ss,ix); 12861 TOPPTR(nss,ix) = sv_dup_inc(sv, param); 12862 i = POPINT(ss,ix); 12863 TOPINT(nss,ix) = i; 12864 av = (const AV *)POPPTR(ss,ix); 12865 TOPPTR(nss,ix) = av_dup_inc(av, param); 12866 break; 12867 case SAVEt_OP: 12868 ptr = POPPTR(ss,ix); 12869 TOPPTR(nss,ix) = ptr; 12870 break; 12871 case SAVEt_HINTS: 12872 ptr = POPPTR(ss,ix); 12873 ptr = cophh_copy((COPHH*)ptr); 12874 TOPPTR(nss,ix) = ptr; 12875 i = POPINT(ss,ix); 12876 TOPINT(nss,ix) = i; 12877 if (i & HINT_LOCALIZE_HH) { 12878 hv = (const HV *)POPPTR(ss,ix); 12879 TOPPTR(nss,ix) = hv_dup_inc(hv, param); 12880 } 12881 break; 12882 case SAVEt_PADSV_AND_MORTALIZE: 12883 longval = (long)POPLONG(ss,ix); 12884 TOPLONG(nss,ix) = longval; 12885 ptr = POPPTR(ss,ix); 12886 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); 12887 sv = (const SV *)POPPTR(ss,ix); 12888 TOPPTR(nss,ix) = sv_dup_inc(sv, param); 12889 break; 12890 case SAVEt_SET_SVFLAGS: 12891 i = POPINT(ss,ix); 12892 TOPINT(nss,ix) = i; 12893 i = POPINT(ss,ix); 12894 TOPINT(nss,ix) = i; 12895 sv = (const SV *)POPPTR(ss,ix); 12896 TOPPTR(nss,ix) = sv_dup(sv, param); 12897 break; 12898 case SAVEt_RE_STATE: 12899 { 12900 const struct re_save_state *const old_state 12901 = (struct re_save_state *) 12902 (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE); 12903 struct re_save_state *const new_state 12904 = (struct re_save_state *) 12905 (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE); 12906 12907 Copy(old_state, new_state, 1, struct re_save_state); 12908 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE; 12909 12910 new_state->re_state_bostr 12911 = pv_dup(old_state->re_state_bostr); 12912 new_state->re_state_regeol 12913 = pv_dup(old_state->re_state_regeol); 12914 #ifdef PERL_ANY_COW 12915 new_state->re_state_nrs 12916 = sv_dup(old_state->re_state_nrs, param); 12917 #endif 12918 new_state->re_state_reg_magic 12919 = (MAGIC*) any_dup(old_state->re_state_reg_magic, 12920 proto_perl); 12921 new_state->re_state_reg_oldcurpm 12922 = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 12923 proto_perl); 12924 new_state->re_state_reg_curpm 12925 = (PMOP*) any_dup(old_state->re_state_reg_curpm, 12926 proto_perl); 12927 new_state->re_state_reg_oldsaved 12928 = pv_dup(old_state->re_state_reg_oldsaved); 12929 new_state->re_state_reg_poscache 12930 = pv_dup(old_state->re_state_reg_poscache); 12931 new_state->re_state_reg_starttry 12932 = pv_dup(old_state->re_state_reg_starttry); 12933 break; 12934 } 12935 case SAVEt_COMPILE_WARNINGS: 12936 ptr = POPPTR(ss,ix); 12937 TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr); 12938 break; 12939 case SAVEt_PARSER: 12940 ptr = POPPTR(ss,ix); 12941 TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param); 12942 break; 12943 default: 12944 Perl_croak(aTHX_ 12945 "panic: ss_dup inconsistency (%"IVdf")", (IV) type); 12946 } 12947 } 12948 12949 return nss; 12950 } 12951 12952 12953 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE 12954 * flag to the result. This is done for each stash before cloning starts, 12955 * so we know which stashes want their objects cloned */ 12956 12957 static void 12958 do_mark_cloneable_stash(pTHX_ SV *const sv) 12959 { 12960 const HEK * const hvname = HvNAME_HEK((const HV *)sv); 12961 if (hvname) { 12962 GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0); 12963 SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */ 12964 if (cloner && GvCV(cloner)) { 12965 dSP; 12966 UV status; 12967 12968 ENTER; 12969 SAVETMPS; 12970 PUSHMARK(SP); 12971 mXPUSHs(newSVhek(hvname)); 12972 PUTBACK; 12973 call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR); 12974 SPAGAIN; 12975 status = POPu; 12976 PUTBACK; 12977 FREETMPS; 12978 LEAVE; 12979 if (status) 12980 SvFLAGS(sv) &= ~SVphv_CLONEABLE; 12981 } 12982 } 12983 } 12984 12985 12986 12987 /* 12988 =for apidoc perl_clone 12989 12990 Create and return a new interpreter by cloning the current one. 12991 12992 perl_clone takes these flags as parameters: 12993 12994 CLONEf_COPY_STACKS - is used to, well, copy the stacks also, 12995 without it we only clone the data and zero the stacks, 12996 with it we copy the stacks and the new perl interpreter is 12997 ready to run at the exact same point as the previous one. 12998 The pseudo-fork code uses COPY_STACKS while the 12999 threads->create doesn't. 13000 13001 CLONEf_KEEP_PTR_TABLE - 13002 perl_clone keeps a ptr_table with the pointer of the old 13003 variable as a key and the new variable as a value, 13004 this allows it to check if something has been cloned and not 13005 clone it again but rather just use the value and increase the 13006 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill 13007 the ptr_table using the function 13008 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>, 13009 reason to keep it around is if you want to dup some of your own 13010 variable who are outside the graph perl scans, example of this 13011 code is in threads.xs create. 13012 13013 CLONEf_CLONE_HOST - 13014 This is a win32 thing, it is ignored on unix, it tells perls 13015 win32host code (which is c++) to clone itself, this is needed on 13016 win32 if you want to run two threads at the same time, 13017 if you just want to do some stuff in a separate perl interpreter 13018 and then throw it away and return to the original one, 13019 you don't need to do anything. 13020 13021 =cut 13022 */ 13023 13024 /* XXX the above needs expanding by someone who actually understands it ! */ 13025 EXTERN_C PerlInterpreter * 13026 perl_clone_host(PerlInterpreter* proto_perl, UV flags); 13027 13028 PerlInterpreter * 13029 perl_clone(PerlInterpreter *proto_perl, UV flags) 13030 { 13031 dVAR; 13032 #ifdef PERL_IMPLICIT_SYS 13033 13034 PERL_ARGS_ASSERT_PERL_CLONE; 13035 13036 /* perlhost.h so we need to call into it 13037 to clone the host, CPerlHost should have a c interface, sky */ 13038 13039 if (flags & CLONEf_CLONE_HOST) { 13040 return perl_clone_host(proto_perl,flags); 13041 } 13042 return perl_clone_using(proto_perl, flags, 13043 proto_perl->IMem, 13044 proto_perl->IMemShared, 13045 proto_perl->IMemParse, 13046 proto_perl->IEnv, 13047 proto_perl->IStdIO, 13048 proto_perl->ILIO, 13049 proto_perl->IDir, 13050 proto_perl->ISock, 13051 proto_perl->IProc); 13052 } 13053 13054 PerlInterpreter * 13055 perl_clone_using(PerlInterpreter *proto_perl, UV flags, 13056 struct IPerlMem* ipM, struct IPerlMem* ipMS, 13057 struct IPerlMem* ipMP, struct IPerlEnv* ipE, 13058 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO, 13059 struct IPerlDir* ipD, struct IPerlSock* ipS, 13060 struct IPerlProc* ipP) 13061 { 13062 /* XXX many of the string copies here can be optimized if they're 13063 * constants; they need to be allocated as common memory and just 13064 * their pointers copied. */ 13065 13066 IV i; 13067 CLONE_PARAMS clone_params; 13068 CLONE_PARAMS* const param = &clone_params; 13069 13070 PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter)); 13071 13072 PERL_ARGS_ASSERT_PERL_CLONE_USING; 13073 #else /* !PERL_IMPLICIT_SYS */ 13074 IV i; 13075 CLONE_PARAMS clone_params; 13076 CLONE_PARAMS* param = &clone_params; 13077 PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter)); 13078 13079 PERL_ARGS_ASSERT_PERL_CLONE; 13080 #endif /* PERL_IMPLICIT_SYS */ 13081 13082 /* for each stash, determine whether its objects should be cloned */ 13083 S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK); 13084 PERL_SET_THX(my_perl); 13085 13086 #ifdef DEBUGGING 13087 PoisonNew(my_perl, 1, PerlInterpreter); 13088 PL_op = NULL; 13089 PL_curcop = NULL; 13090 PL_defstash = NULL; /* may be used by perl malloc() */ 13091 PL_markstack = 0; 13092 PL_scopestack = 0; 13093 PL_scopestack_name = 0; 13094 PL_savestack = 0; 13095 PL_savestack_ix = 0; 13096 PL_savestack_max = -1; 13097 PL_sig_pending = 0; 13098 PL_parser = NULL; 13099 Zero(&PL_debug_pad, 1, struct perl_debug_pad); 13100 # ifdef DEBUG_LEAKING_SCALARS 13101 PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000; 13102 # endif 13103 #else /* !DEBUGGING */ 13104 Zero(my_perl, 1, PerlInterpreter); 13105 #endif /* DEBUGGING */ 13106 13107 #ifdef PERL_IMPLICIT_SYS 13108 /* host pointers */ 13109 PL_Mem = ipM; 13110 PL_MemShared = ipMS; 13111 PL_MemParse = ipMP; 13112 PL_Env = ipE; 13113 PL_StdIO = ipStd; 13114 PL_LIO = ipLIO; 13115 PL_Dir = ipD; 13116 PL_Sock = ipS; 13117 PL_Proc = ipP; 13118 #endif /* PERL_IMPLICIT_SYS */ 13119 13120 13121 param->flags = flags; 13122 /* Nothing in the core code uses this, but we make it available to 13123 extensions (using mg_dup). */ 13124 param->proto_perl = proto_perl; 13125 /* Likely nothing will use this, but it is initialised to be consistent 13126 with Perl_clone_params_new(). */ 13127 param->new_perl = my_perl; 13128 param->unreferenced = NULL; 13129 13130 13131 INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl); 13132 13133 PL_body_arenas = NULL; 13134 Zero(&PL_body_roots, 1, PL_body_roots); 13135 13136 PL_sv_count = 0; 13137 PL_sv_root = NULL; 13138 PL_sv_arenaroot = NULL; 13139 13140 PL_debug = proto_perl->Idebug; 13141 13142 /* dbargs array probably holds garbage */ 13143 PL_dbargs = NULL; 13144 13145 PL_compiling = proto_perl->Icompiling; 13146 13147 /* pseudo environmental stuff */ 13148 PL_origargc = proto_perl->Iorigargc; 13149 PL_origargv = proto_perl->Iorigargv; 13150 13151 #if !NO_TAINT_SUPPORT 13152 /* Set tainting stuff before PerlIO_debug can possibly get called */ 13153 PL_tainting = proto_perl->Itainting; 13154 PL_taint_warn = proto_perl->Itaint_warn; 13155 #else 13156 PL_tainting = FALSE; 13157 PL_taint_warn = FALSE; 13158 #endif 13159 13160 PL_minus_c = proto_perl->Iminus_c; 13161 13162 PL_localpatches = proto_perl->Ilocalpatches; 13163 PL_splitstr = proto_perl->Isplitstr; 13164 PL_minus_n = proto_perl->Iminus_n; 13165 PL_minus_p = proto_perl->Iminus_p; 13166 PL_minus_l = proto_perl->Iminus_l; 13167 PL_minus_a = proto_perl->Iminus_a; 13168 PL_minus_E = proto_perl->Iminus_E; 13169 PL_minus_F = proto_perl->Iminus_F; 13170 PL_doswitches = proto_perl->Idoswitches; 13171 PL_dowarn = proto_perl->Idowarn; 13172 #ifdef PERL_SAWAMPERSAND 13173 PL_sawampersand = proto_perl->Isawampersand; 13174 #endif 13175 PL_unsafe = proto_perl->Iunsafe; 13176 PL_perldb = proto_perl->Iperldb; 13177 PL_perl_destruct_level = proto_perl->Iperl_destruct_level; 13178 PL_exit_flags = proto_perl->Iexit_flags; 13179 13180 /* XXX time(&PL_basetime) when asked for? */ 13181 PL_basetime = proto_perl->Ibasetime; 13182 13183 PL_maxsysfd = proto_perl->Imaxsysfd; 13184 PL_statusvalue = proto_perl->Istatusvalue; 13185 #ifdef VMS 13186 PL_statusvalue_vms = proto_perl->Istatusvalue_vms; 13187 #else 13188 PL_statusvalue_posix = proto_perl->Istatusvalue_posix; 13189 #endif 13190 13191 /* RE engine related */ 13192 Zero(&PL_reg_state, 1, struct re_save_state); 13193 PL_regmatch_slab = NULL; 13194 13195 PL_sub_generation = proto_perl->Isub_generation; 13196 13197 /* funky return mechanisms */ 13198 PL_forkprocess = proto_perl->Iforkprocess; 13199 13200 /* internal state */ 13201 PL_maxo = proto_perl->Imaxo; 13202 13203 PL_main_start = proto_perl->Imain_start; 13204 PL_eval_root = proto_perl->Ieval_root; 13205 PL_eval_start = proto_perl->Ieval_start; 13206 13207 PL_filemode = proto_perl->Ifilemode; 13208 PL_lastfd = proto_perl->Ilastfd; 13209 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */ 13210 PL_Argv = NULL; 13211 PL_Cmd = NULL; 13212 PL_gensym = proto_perl->Igensym; 13213 13214 PL_laststatval = proto_perl->Ilaststatval; 13215 PL_laststype = proto_perl->Ilaststype; 13216 PL_mess_sv = NULL; 13217 13218 PL_profiledata = NULL; 13219 13220 PL_generation = proto_perl->Igeneration; 13221 13222 PL_in_clean_objs = proto_perl->Iin_clean_objs; 13223 PL_in_clean_all = proto_perl->Iin_clean_all; 13224 13225 PL_delaymagic_uid = proto_perl->Idelaymagic_uid; 13226 PL_delaymagic_euid = proto_perl->Idelaymagic_euid; 13227 PL_delaymagic_gid = proto_perl->Idelaymagic_gid; 13228 PL_delaymagic_egid = proto_perl->Idelaymagic_egid; 13229 PL_nomemok = proto_perl->Inomemok; 13230 PL_an = proto_perl->Ian; 13231 PL_evalseq = proto_perl->Ievalseq; 13232 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */ 13233 PL_origalen = proto_perl->Iorigalen; 13234 13235 PL_sighandlerp = proto_perl->Isighandlerp; 13236 13237 PL_runops = proto_perl->Irunops; 13238 13239 PL_subline = proto_perl->Isubline; 13240 13241 #ifdef FCRYPT 13242 PL_cryptseen = proto_perl->Icryptseen; 13243 #endif 13244 13245 PL_hints = proto_perl->Ihints; 13246 13247 #ifdef USE_LOCALE_COLLATE 13248 PL_collation_ix = proto_perl->Icollation_ix; 13249 PL_collation_standard = proto_perl->Icollation_standard; 13250 PL_collxfrm_base = proto_perl->Icollxfrm_base; 13251 PL_collxfrm_mult = proto_perl->Icollxfrm_mult; 13252 #endif /* USE_LOCALE_COLLATE */ 13253 13254 #ifdef USE_LOCALE_NUMERIC 13255 PL_numeric_standard = proto_perl->Inumeric_standard; 13256 PL_numeric_local = proto_perl->Inumeric_local; 13257 #endif /* !USE_LOCALE_NUMERIC */ 13258 13259 /* Did the locale setup indicate UTF-8? */ 13260 PL_utf8locale = proto_perl->Iutf8locale; 13261 /* Unicode features (see perlrun/-C) */ 13262 PL_unicode = proto_perl->Iunicode; 13263 13264 /* Pre-5.8 signals control */ 13265 PL_signals = proto_perl->Isignals; 13266 13267 /* times() ticks per second */ 13268 PL_clocktick = proto_perl->Iclocktick; 13269 13270 /* Recursion stopper for PerlIO_find_layer */ 13271 PL_in_load_module = proto_perl->Iin_load_module; 13272 13273 /* sort() routine */ 13274 PL_sort_RealCmp = proto_perl->Isort_RealCmp; 13275 13276 /* Not really needed/useful since the reenrant_retint is "volatile", 13277 * but do it for consistency's sake. */ 13278 PL_reentrant_retint = proto_perl->Ireentrant_retint; 13279 13280 /* Hooks to shared SVs and locks. */ 13281 PL_sharehook = proto_perl->Isharehook; 13282 PL_lockhook = proto_perl->Ilockhook; 13283 PL_unlockhook = proto_perl->Iunlockhook; 13284 PL_threadhook = proto_perl->Ithreadhook; 13285 PL_destroyhook = proto_perl->Idestroyhook; 13286 PL_signalhook = proto_perl->Isignalhook; 13287 13288 PL_globhook = proto_perl->Iglobhook; 13289 13290 /* swatch cache */ 13291 PL_last_swash_hv = NULL; /* reinits on demand */ 13292 PL_last_swash_klen = 0; 13293 PL_last_swash_key[0]= '\0'; 13294 PL_last_swash_tmps = (U8*)NULL; 13295 PL_last_swash_slen = 0; 13296 13297 PL_srand_called = proto_perl->Isrand_called; 13298 13299 if (flags & CLONEf_COPY_STACKS) { 13300 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */ 13301 PL_tmps_ix = proto_perl->Itmps_ix; 13302 PL_tmps_max = proto_perl->Itmps_max; 13303 PL_tmps_floor = proto_perl->Itmps_floor; 13304 13305 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix] 13306 * NOTE: unlike the others! */ 13307 PL_scopestack_ix = proto_perl->Iscopestack_ix; 13308 PL_scopestack_max = proto_perl->Iscopestack_max; 13309 13310 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix] 13311 * NOTE: unlike the others! */ 13312 PL_savestack_ix = proto_perl->Isavestack_ix; 13313 PL_savestack_max = proto_perl->Isavestack_max; 13314 } 13315 13316 PL_start_env = proto_perl->Istart_env; /* XXXXXX */ 13317 PL_top_env = &PL_start_env; 13318 13319 PL_op = proto_perl->Iop; 13320 13321 PL_Sv = NULL; 13322 PL_Xpv = (XPV*)NULL; 13323 my_perl->Ina = proto_perl->Ina; 13324 13325 PL_statbuf = proto_perl->Istatbuf; 13326 PL_statcache = proto_perl->Istatcache; 13327 13328 #ifdef HAS_TIMES 13329 PL_timesbuf = proto_perl->Itimesbuf; 13330 #endif 13331 13332 #if !NO_TAINT_SUPPORT 13333 PL_tainted = proto_perl->Itainted; 13334 #else 13335 PL_tainted = FALSE; 13336 #endif 13337 PL_curpm = proto_perl->Icurpm; /* XXX No PMOP ref count */ 13338 13339 PL_chopset = proto_perl->Ichopset; /* XXX never deallocated */ 13340 13341 PL_restartjmpenv = proto_perl->Irestartjmpenv; 13342 PL_restartop = proto_perl->Irestartop; 13343 PL_in_eval = proto_perl->Iin_eval; 13344 PL_delaymagic = proto_perl->Idelaymagic; 13345 PL_phase = proto_perl->Iphase; 13346 PL_localizing = proto_perl->Ilocalizing; 13347 13348 PL_hv_fetch_ent_mh = NULL; 13349 PL_modcount = proto_perl->Imodcount; 13350 PL_lastgotoprobe = NULL; 13351 PL_dumpindent = proto_perl->Idumpindent; 13352 13353 PL_efloatbuf = NULL; /* reinits on demand */ 13354 PL_efloatsize = 0; /* reinits on demand */ 13355 13356 /* regex stuff */ 13357 13358 PL_regdummy = proto_perl->Iregdummy; 13359 PL_colorset = 0; /* reinits PL_colors[] */ 13360 /*PL_colors[6] = {0,0,0,0,0,0};*/ 13361 13362 /* Pluggable optimizer */ 13363 PL_peepp = proto_perl->Ipeepp; 13364 PL_rpeepp = proto_perl->Irpeepp; 13365 /* op_free() hook */ 13366 PL_opfreehook = proto_perl->Iopfreehook; 13367 13368 #ifdef USE_REENTRANT_API 13369 /* XXX: things like -Dm will segfault here in perlio, but doing 13370 * PERL_SET_CONTEXT(proto_perl); 13371 * breaks too many other things 13372 */ 13373 Perl_reentrant_init(aTHX); 13374 #endif 13375 13376 /* create SV map for pointer relocation */ 13377 PL_ptr_table = ptr_table_new(); 13378 13379 /* initialize these special pointers as early as possible */ 13380 init_constants(); 13381 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef); 13382 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no); 13383 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes); 13384 13385 /* create (a non-shared!) shared string table */ 13386 PL_strtab = newHV(); 13387 HvSHAREKEYS_off(PL_strtab); 13388 hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab)); 13389 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab); 13390 13391 /* This PV will be free'd special way so must set it same way op.c does */ 13392 PL_compiling.cop_file = savesharedpv(PL_compiling.cop_file); 13393 ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file); 13394 13395 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling); 13396 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings); 13397 CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling))); 13398 PL_curcop = (COP*)any_dup(proto_perl->Icurcop, proto_perl); 13399 13400 param->stashes = newAV(); /* Setup array of objects to call clone on */ 13401 /* This makes no difference to the implementation, as it always pushes 13402 and shifts pointers to other SVs without changing their reference 13403 count, with the array becoming empty before it is freed. However, it 13404 makes it conceptually clear what is going on, and will avoid some 13405 work inside av.c, filling slots between AvFILL() and AvMAX() with 13406 &PL_sv_undef, and SvREFCNT_dec()ing those. */ 13407 AvREAL_off(param->stashes); 13408 13409 if (!(flags & CLONEf_COPY_STACKS)) { 13410 param->unreferenced = newAV(); 13411 } 13412 13413 #ifdef PERLIO_LAYERS 13414 /* Clone PerlIO tables as soon as we can handle general xx_dup() */ 13415 PerlIO_clone(aTHX_ proto_perl, param); 13416 #endif 13417 13418 PL_envgv = gv_dup(proto_perl->Ienvgv, param); 13419 PL_incgv = gv_dup(proto_perl->Iincgv, param); 13420 PL_hintgv = gv_dup(proto_perl->Ihintgv, param); 13421 PL_origfilename = SAVEPV(proto_perl->Iorigfilename); 13422 PL_diehook = sv_dup_inc(proto_perl->Idiehook, param); 13423 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook, param); 13424 13425 /* switches */ 13426 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel, param); 13427 PL_apiversion = sv_dup_inc(proto_perl->Iapiversion, param); 13428 PL_inplace = SAVEPV(proto_perl->Iinplace); 13429 PL_e_script = sv_dup_inc(proto_perl->Ie_script, param); 13430 13431 /* magical thingies */ 13432 13433 PL_encoding = sv_dup(proto_perl->Iencoding, param); 13434 13435 sv_setpvs(PERL_DEBUG_PAD(0), ""); /* For regex debugging. */ 13436 sv_setpvs(PERL_DEBUG_PAD(1), ""); /* ext/re needs these */ 13437 sv_setpvs(PERL_DEBUG_PAD(2), ""); /* even without DEBUGGING. */ 13438 13439 13440 /* Clone the regex array */ 13441 /* ORANGE FIXME for plugins, probably in the SV dup code. 13442 newSViv(PTR2IV(CALLREGDUPE( 13443 INT2PTR(REGEXP *, SvIVX(regex)), param)))) 13444 */ 13445 PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param); 13446 PL_regex_pad = AvARRAY(PL_regex_padav); 13447 13448 PL_stashpadmax = proto_perl->Istashpadmax; 13449 PL_stashpadix = proto_perl->Istashpadix ; 13450 Newx(PL_stashpad, PL_stashpadmax, HV *); 13451 { 13452 PADOFFSET o = 0; 13453 for (; o < PL_stashpadmax; ++o) 13454 PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param); 13455 } 13456 13457 /* shortcuts to various I/O objects */ 13458 PL_ofsgv = gv_dup_inc(proto_perl->Iofsgv, param); 13459 PL_stdingv = gv_dup(proto_perl->Istdingv, param); 13460 PL_stderrgv = gv_dup(proto_perl->Istderrgv, param); 13461 PL_defgv = gv_dup(proto_perl->Idefgv, param); 13462 PL_argvgv = gv_dup(proto_perl->Iargvgv, param); 13463 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv, param); 13464 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack, param); 13465 13466 /* shortcuts to regexp stuff */ 13467 PL_replgv = gv_dup(proto_perl->Ireplgv, param); 13468 13469 /* shortcuts to misc objects */ 13470 PL_errgv = gv_dup(proto_perl->Ierrgv, param); 13471 13472 /* shortcuts to debugging objects */ 13473 PL_DBgv = gv_dup(proto_perl->IDBgv, param); 13474 PL_DBline = gv_dup(proto_perl->IDBline, param); 13475 PL_DBsub = gv_dup(proto_perl->IDBsub, param); 13476 PL_DBsingle = sv_dup(proto_perl->IDBsingle, param); 13477 PL_DBtrace = sv_dup(proto_perl->IDBtrace, param); 13478 PL_DBsignal = sv_dup(proto_perl->IDBsignal, param); 13479 13480 /* symbol tables */ 13481 PL_defstash = hv_dup_inc(proto_perl->Idefstash, param); 13482 PL_curstash = hv_dup_inc(proto_perl->Icurstash, param); 13483 PL_debstash = hv_dup(proto_perl->Idebstash, param); 13484 PL_globalstash = hv_dup(proto_perl->Iglobalstash, param); 13485 PL_curstname = sv_dup_inc(proto_perl->Icurstname, param); 13486 13487 PL_beginav = av_dup_inc(proto_perl->Ibeginav, param); 13488 PL_beginav_save = av_dup_inc(proto_perl->Ibeginav_save, param); 13489 PL_checkav_save = av_dup_inc(proto_perl->Icheckav_save, param); 13490 PL_unitcheckav = av_dup_inc(proto_perl->Iunitcheckav, param); 13491 PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param); 13492 PL_endav = av_dup_inc(proto_perl->Iendav, param); 13493 PL_checkav = av_dup_inc(proto_perl->Icheckav, param); 13494 PL_initav = av_dup_inc(proto_perl->Iinitav, param); 13495 13496 PL_isarev = hv_dup_inc(proto_perl->Iisarev, param); 13497 13498 /* subprocess state */ 13499 PL_fdpid = av_dup_inc(proto_perl->Ifdpid, param); 13500 13501 if (proto_perl->Iop_mask) 13502 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo); 13503 else 13504 PL_op_mask = NULL; 13505 /* PL_asserting = proto_perl->Iasserting; */ 13506 13507 /* current interpreter roots */ 13508 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv, param); 13509 OP_REFCNT_LOCK; 13510 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root); 13511 OP_REFCNT_UNLOCK; 13512 13513 /* runtime control stuff */ 13514 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl); 13515 13516 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav, param); 13517 13518 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv, param); 13519 13520 /* interpreter atexit processing */ 13521 PL_exitlistlen = proto_perl->Iexitlistlen; 13522 if (PL_exitlistlen) { 13523 Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry); 13524 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry); 13525 } 13526 else 13527 PL_exitlist = (PerlExitListEntry*)NULL; 13528 13529 PL_my_cxt_size = proto_perl->Imy_cxt_size; 13530 if (PL_my_cxt_size) { 13531 Newx(PL_my_cxt_list, PL_my_cxt_size, void *); 13532 Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *); 13533 #ifdef PERL_GLOBAL_STRUCT_PRIVATE 13534 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *); 13535 Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *); 13536 #endif 13537 } 13538 else { 13539 PL_my_cxt_list = (void**)NULL; 13540 #ifdef PERL_GLOBAL_STRUCT_PRIVATE 13541 PL_my_cxt_keys = (const char**)NULL; 13542 #endif 13543 } 13544 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal, param); 13545 PL_custom_op_names = hv_dup_inc(proto_perl->Icustom_op_names,param); 13546 PL_custom_op_descs = hv_dup_inc(proto_perl->Icustom_op_descs,param); 13547 PL_custom_ops = hv_dup_inc(proto_perl->Icustom_ops, param); 13548 13549 PL_compcv = cv_dup(proto_perl->Icompcv, param); 13550 13551 PAD_CLONE_VARS(proto_perl, param); 13552 13553 #ifdef HAVE_INTERP_INTERN 13554 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern); 13555 #endif 13556 13557 PL_DBcv = cv_dup(proto_perl->IDBcv, param); 13558 13559 #ifdef PERL_USES_PL_PIDSTATUS 13560 PL_pidstatus = newHV(); /* XXX flag for cloning? */ 13561 #endif 13562 PL_osname = SAVEPV(proto_perl->Iosname); 13563 PL_parser = parser_dup(proto_perl->Iparser, param); 13564 13565 /* XXX this only works if the saved cop has already been cloned */ 13566 if (proto_perl->Iparser) { 13567 PL_parser->saved_curcop = (COP*)any_dup( 13568 proto_perl->Iparser->saved_curcop, 13569 proto_perl); 13570 } 13571 13572 PL_subname = sv_dup_inc(proto_perl->Isubname, param); 13573 13574 #ifdef USE_LOCALE_COLLATE 13575 PL_collation_name = SAVEPV(proto_perl->Icollation_name); 13576 #endif /* USE_LOCALE_COLLATE */ 13577 13578 #ifdef USE_LOCALE_NUMERIC 13579 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name); 13580 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param); 13581 #endif /* !USE_LOCALE_NUMERIC */ 13582 13583 /* Unicode inversion lists */ 13584 PL_ASCII = sv_dup_inc(proto_perl->IASCII, param); 13585 PL_Latin1 = sv_dup_inc(proto_perl->ILatin1, param); 13586 13587 PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param); 13588 PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param); 13589 13590 /* utf8 character class swashes */ 13591 for (i = 0; i < POSIX_SWASH_COUNT; i++) { 13592 PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param); 13593 } 13594 for (i = 0; i < POSIX_CC_COUNT; i++) { 13595 PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param); 13596 PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param); 13597 PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param); 13598 } 13599 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param); 13600 PL_utf8_X_regular_begin = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param); 13601 PL_utf8_X_extend = sv_dup_inc(proto_perl->Iutf8_X_extend, param); 13602 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param); 13603 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param); 13604 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param); 13605 PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param); 13606 PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param); 13607 PL_utf8_xidstart = sv_dup_inc(proto_perl->Iutf8_xidstart, param); 13608 PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param); 13609 PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param); 13610 PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param); 13611 PL_utf8_xidcont = sv_dup_inc(proto_perl->Iutf8_xidcont, param); 13612 PL_utf8_foldable = sv_dup_inc(proto_perl->Iutf8_foldable, param); 13613 PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param); 13614 PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param); 13615 PL_ASCII = sv_dup_inc(proto_perl->IASCII, param); 13616 PL_AboveLatin1 = sv_dup_inc(proto_perl->IAboveLatin1, param); 13617 PL_Latin1 = sv_dup_inc(proto_perl->ILatin1, param); 13618 13619 if (proto_perl->Ipsig_pend) { 13620 Newxz(PL_psig_pend, SIG_SIZE, int); 13621 } 13622 else { 13623 PL_psig_pend = (int*)NULL; 13624 } 13625 13626 if (proto_perl->Ipsig_name) { 13627 Newx(PL_psig_name, 2 * SIG_SIZE, SV*); 13628 sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE, 13629 param); 13630 PL_psig_ptr = PL_psig_name + SIG_SIZE; 13631 } 13632 else { 13633 PL_psig_ptr = (SV**)NULL; 13634 PL_psig_name = (SV**)NULL; 13635 } 13636 13637 if (flags & CLONEf_COPY_STACKS) { 13638 Newx(PL_tmps_stack, PL_tmps_max, SV*); 13639 sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack, 13640 PL_tmps_ix+1, param); 13641 13642 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */ 13643 i = proto_perl->Imarkstack_max - proto_perl->Imarkstack; 13644 Newxz(PL_markstack, i, I32); 13645 PL_markstack_max = PL_markstack + (proto_perl->Imarkstack_max 13646 - proto_perl->Imarkstack); 13647 PL_markstack_ptr = PL_markstack + (proto_perl->Imarkstack_ptr 13648 - proto_perl->Imarkstack); 13649 Copy(proto_perl->Imarkstack, PL_markstack, 13650 PL_markstack_ptr - PL_markstack + 1, I32); 13651 13652 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix] 13653 * NOTE: unlike the others! */ 13654 Newxz(PL_scopestack, PL_scopestack_max, I32); 13655 Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32); 13656 13657 #ifdef DEBUGGING 13658 Newxz(PL_scopestack_name, PL_scopestack_max, const char *); 13659 Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *); 13660 #endif 13661 /* reset stack AV to correct length before its duped via 13662 * PL_curstackinfo */ 13663 AvFILLp(proto_perl->Icurstack) = 13664 proto_perl->Istack_sp - proto_perl->Istack_base; 13665 13666 /* NOTE: si_dup() looks at PL_markstack */ 13667 PL_curstackinfo = si_dup(proto_perl->Icurstackinfo, param); 13668 13669 /* PL_curstack = PL_curstackinfo->si_stack; */ 13670 PL_curstack = av_dup(proto_perl->Icurstack, param); 13671 PL_mainstack = av_dup(proto_perl->Imainstack, param); 13672 13673 /* next PUSHs() etc. set *(PL_stack_sp+1) */ 13674 PL_stack_base = AvARRAY(PL_curstack); 13675 PL_stack_sp = PL_stack_base + (proto_perl->Istack_sp 13676 - proto_perl->Istack_base); 13677 PL_stack_max = PL_stack_base + AvMAX(PL_curstack); 13678 13679 /*Newxz(PL_savestack, PL_savestack_max, ANY);*/ 13680 PL_savestack = ss_dup(proto_perl, param); 13681 } 13682 else { 13683 init_stacks(); 13684 ENTER; /* perl_destruct() wants to LEAVE; */ 13685 } 13686 13687 PL_statgv = gv_dup(proto_perl->Istatgv, param); 13688 PL_statname = sv_dup_inc(proto_perl->Istatname, param); 13689 13690 PL_rs = sv_dup_inc(proto_perl->Irs, param); 13691 PL_last_in_gv = gv_dup(proto_perl->Ilast_in_gv, param); 13692 PL_defoutgv = gv_dup_inc(proto_perl->Idefoutgv, param); 13693 PL_toptarget = sv_dup_inc(proto_perl->Itoptarget, param); 13694 PL_bodytarget = sv_dup_inc(proto_perl->Ibodytarget, param); 13695 PL_formtarget = sv_dup(proto_perl->Iformtarget, param); 13696 13697 PL_errors = sv_dup_inc(proto_perl->Ierrors, param); 13698 13699 PL_sortcop = (OP*)any_dup(proto_perl->Isortcop, proto_perl); 13700 PL_sortstash = hv_dup(proto_perl->Isortstash, param); 13701 PL_firstgv = gv_dup(proto_perl->Ifirstgv, param); 13702 PL_secondgv = gv_dup(proto_perl->Isecondgv, param); 13703 13704 PL_stashcache = newHV(); 13705 13706 PL_watchaddr = (char **) ptr_table_fetch(PL_ptr_table, 13707 proto_perl->Iwatchaddr); 13708 PL_watchok = PL_watchaddr ? * PL_watchaddr : NULL; 13709 if (PL_debug && PL_watchaddr) { 13710 PerlIO_printf(Perl_debug_log, 13711 "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n", 13712 PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr), 13713 PTR2UV(PL_watchok)); 13714 } 13715 13716 PL_registered_mros = hv_dup_inc(proto_perl->Iregistered_mros, param); 13717 PL_blockhooks = av_dup_inc(proto_perl->Iblockhooks, param); 13718 PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param); 13719 13720 /* Call the ->CLONE method, if it exists, for each of the stashes 13721 identified by sv_dup() above. 13722 */ 13723 while(av_len(param->stashes) != -1) { 13724 HV* const stash = MUTABLE_HV(av_shift(param->stashes)); 13725 GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0); 13726 if (cloner && GvCV(cloner)) { 13727 dSP; 13728 ENTER; 13729 SAVETMPS; 13730 PUSHMARK(SP); 13731 mXPUSHs(newSVhek(HvNAME_HEK(stash))); 13732 PUTBACK; 13733 call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD); 13734 FREETMPS; 13735 LEAVE; 13736 } 13737 } 13738 13739 if (!(flags & CLONEf_KEEP_PTR_TABLE)) { 13740 ptr_table_free(PL_ptr_table); 13741 PL_ptr_table = NULL; 13742 } 13743 13744 if (!(flags & CLONEf_COPY_STACKS)) { 13745 unreferenced_to_tmp_stack(param->unreferenced); 13746 } 13747 13748 SvREFCNT_dec(param->stashes); 13749 13750 /* orphaned? eg threads->new inside BEGIN or use */ 13751 if (PL_compcv && ! SvREFCNT(PL_compcv)) { 13752 SvREFCNT_inc_simple_void(PL_compcv); 13753 SAVEFREESV(PL_compcv); 13754 } 13755 13756 return my_perl; 13757 } 13758 13759 static void 13760 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced) 13761 { 13762 PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK; 13763 13764 if (AvFILLp(unreferenced) > -1) { 13765 SV **svp = AvARRAY(unreferenced); 13766 SV **const last = svp + AvFILLp(unreferenced); 13767 SSize_t count = 0; 13768 13769 do { 13770 if (SvREFCNT(*svp) == 1) 13771 ++count; 13772 } while (++svp <= last); 13773 13774 EXTEND_MORTAL(count); 13775 svp = AvARRAY(unreferenced); 13776 13777 do { 13778 if (SvREFCNT(*svp) == 1) { 13779 /* Our reference is the only one to this SV. This means that 13780 in this thread, the scalar effectively has a 0 reference. 13781 That doesn't work (cleanup never happens), so donate our 13782 reference to it onto the save stack. */ 13783 PL_tmps_stack[++PL_tmps_ix] = *svp; 13784 } else { 13785 /* As an optimisation, because we are already walking the 13786 entire array, instead of above doing either 13787 SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead 13788 release our reference to the scalar, so that at the end of 13789 the array owns zero references to the scalars it happens to 13790 point to. We are effectively converting the array from 13791 AvREAL() on to AvREAL() off. This saves the av_clear() 13792 (triggered by the SvREFCNT_dec(unreferenced) below) from 13793 walking the array a second time. */ 13794 SvREFCNT_dec(*svp); 13795 } 13796 13797 } while (++svp <= last); 13798 AvREAL_off(unreferenced); 13799 } 13800 SvREFCNT_dec_NN(unreferenced); 13801 } 13802 13803 void 13804 Perl_clone_params_del(CLONE_PARAMS *param) 13805 { 13806 /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT 13807 happy: */ 13808 PerlInterpreter *const to = param->new_perl; 13809 dTHXa(to); 13810 PerlInterpreter *const was = PERL_GET_THX; 13811 13812 PERL_ARGS_ASSERT_CLONE_PARAMS_DEL; 13813 13814 if (was != to) { 13815 PERL_SET_THX(to); 13816 } 13817 13818 SvREFCNT_dec(param->stashes); 13819 if (param->unreferenced) 13820 unreferenced_to_tmp_stack(param->unreferenced); 13821 13822 Safefree(param); 13823 13824 if (was != to) { 13825 PERL_SET_THX(was); 13826 } 13827 } 13828 13829 CLONE_PARAMS * 13830 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to) 13831 { 13832 dVAR; 13833 /* Need to play this game, as newAV() can call safesysmalloc(), and that 13834 does a dTHX; to get the context from thread local storage. 13835 FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to 13836 a version that passes in my_perl. */ 13837 PerlInterpreter *const was = PERL_GET_THX; 13838 CLONE_PARAMS *param; 13839 13840 PERL_ARGS_ASSERT_CLONE_PARAMS_NEW; 13841 13842 if (was != to) { 13843 PERL_SET_THX(to); 13844 } 13845 13846 /* Given that we've set the context, we can do this unshared. */ 13847 Newx(param, 1, CLONE_PARAMS); 13848 13849 param->flags = 0; 13850 param->proto_perl = from; 13851 param->new_perl = to; 13852 param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV); 13853 AvREAL_off(param->stashes); 13854 param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV); 13855 13856 if (was != to) { 13857 PERL_SET_THX(was); 13858 } 13859 return param; 13860 } 13861 13862 #endif /* USE_ITHREADS */ 13863 13864 void 13865 Perl_init_constants(pTHX) 13866 { 13867 SvREFCNT(&PL_sv_undef) = SvREFCNT_IMMORTAL; 13868 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL; 13869 SvANY(&PL_sv_undef) = NULL; 13870 13871 SvANY(&PL_sv_no) = new_XPVNV(); 13872 SvREFCNT(&PL_sv_no) = SvREFCNT_IMMORTAL; 13873 SvFLAGS(&PL_sv_no) = SVt_PVNV|SVf_READONLY 13874 |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK 13875 |SVp_POK|SVf_POK; 13876 13877 SvANY(&PL_sv_yes) = new_XPVNV(); 13878 SvREFCNT(&PL_sv_yes) = SvREFCNT_IMMORTAL; 13879 SvFLAGS(&PL_sv_yes) = SVt_PVNV|SVf_READONLY 13880 |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK 13881 |SVp_POK|SVf_POK; 13882 13883 SvPV_set(&PL_sv_no, (char*)PL_No); 13884 SvCUR_set(&PL_sv_no, 0); 13885 SvLEN_set(&PL_sv_no, 0); 13886 SvIV_set(&PL_sv_no, 0); 13887 SvNV_set(&PL_sv_no, 0); 13888 13889 SvPV_set(&PL_sv_yes, (char*)PL_Yes); 13890 SvCUR_set(&PL_sv_yes, 1); 13891 SvLEN_set(&PL_sv_yes, 0); 13892 SvIV_set(&PL_sv_yes, 1); 13893 SvNV_set(&PL_sv_yes, 1); 13894 } 13895 13896 /* 13897 =head1 Unicode Support 13898 13899 =for apidoc sv_recode_to_utf8 13900 13901 The encoding is assumed to be an Encode object, on entry the PV 13902 of the sv is assumed to be octets in that encoding, and the sv 13903 will be converted into Unicode (and UTF-8). 13904 13905 If the sv already is UTF-8 (or if it is not POK), or if the encoding 13906 is not a reference, nothing is done to the sv. If the encoding is not 13907 an C<Encode::XS> Encoding object, bad things will happen. 13908 (See F<lib/encoding.pm> and L<Encode>.) 13909 13910 The PV of the sv is returned. 13911 13912 =cut */ 13913 13914 char * 13915 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding) 13916 { 13917 dVAR; 13918 13919 PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8; 13920 13921 if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) { 13922 SV *uni; 13923 STRLEN len; 13924 const char *s; 13925 dSP; 13926 ENTER; 13927 SAVETMPS; 13928 save_re_context(); 13929 PUSHMARK(sp); 13930 EXTEND(SP, 3); 13931 PUSHs(encoding); 13932 PUSHs(sv); 13933 /* 13934 NI-S 2002/07/09 13935 Passing sv_yes is wrong - it needs to be or'ed set of constants 13936 for Encode::XS, while UTf-8 decode (currently) assumes a true value means 13937 remove converted chars from source. 13938 13939 Both will default the value - let them. 13940 13941 XPUSHs(&PL_sv_yes); 13942 */ 13943 PUTBACK; 13944 call_method("decode", G_SCALAR); 13945 SPAGAIN; 13946 uni = POPs; 13947 PUTBACK; 13948 s = SvPV_const(uni, len); 13949 if (s != SvPVX_const(sv)) { 13950 SvGROW(sv, len + 1); 13951 Move(s, SvPVX(sv), len + 1, char); 13952 SvCUR_set(sv, len); 13953 } 13954 FREETMPS; 13955 LEAVE; 13956 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) { 13957 /* clear pos and any utf8 cache */ 13958 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global); 13959 if (mg) 13960 mg->mg_len = -1; 13961 if ((mg = mg_find(sv, PERL_MAGIC_utf8))) 13962 magic_setutf8(sv,mg); /* clear UTF8 cache */ 13963 } 13964 SvUTF8_on(sv); 13965 return SvPVX(sv); 13966 } 13967 return SvPOKp(sv) ? SvPVX(sv) : NULL; 13968 } 13969 13970 /* 13971 =for apidoc sv_cat_decode 13972 13973 The encoding is assumed to be an Encode object, the PV of the ssv is 13974 assumed to be octets in that encoding and decoding the input starts 13975 from the position which (PV + *offset) pointed to. The dsv will be 13976 concatenated the decoded UTF-8 string from ssv. Decoding will terminate 13977 when the string tstr appears in decoding output or the input ends on 13978 the PV of the ssv. The value which the offset points will be modified 13979 to the last input position on the ssv. 13980 13981 Returns TRUE if the terminator was found, else returns FALSE. 13982 13983 =cut */ 13984 13985 bool 13986 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding, 13987 SV *ssv, int *offset, char *tstr, int tlen) 13988 { 13989 dVAR; 13990 bool ret = FALSE; 13991 13992 PERL_ARGS_ASSERT_SV_CAT_DECODE; 13993 13994 if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) { 13995 SV *offsv; 13996 dSP; 13997 ENTER; 13998 SAVETMPS; 13999 save_re_context(); 14000 PUSHMARK(sp); 14001 EXTEND(SP, 6); 14002 PUSHs(encoding); 14003 PUSHs(dsv); 14004 PUSHs(ssv); 14005 offsv = newSViv(*offset); 14006 mPUSHs(offsv); 14007 mPUSHp(tstr, tlen); 14008 PUTBACK; 14009 call_method("cat_decode", G_SCALAR); 14010 SPAGAIN; 14011 ret = SvTRUE(TOPs); 14012 *offset = SvIV(offsv); 14013 PUTBACK; 14014 FREETMPS; 14015 LEAVE; 14016 } 14017 else 14018 Perl_croak(aTHX_ "Invalid argument to sv_cat_decode"); 14019 return ret; 14020 14021 } 14022 14023 /* --------------------------------------------------------------------- 14024 * 14025 * support functions for report_uninit() 14026 */ 14027 14028 /* the maxiumum size of array or hash where we will scan looking 14029 * for the undefined element that triggered the warning */ 14030 14031 #define FUV_MAX_SEARCH_SIZE 1000 14032 14033 /* Look for an entry in the hash whose value has the same SV as val; 14034 * If so, return a mortal copy of the key. */ 14035 14036 STATIC SV* 14037 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val) 14038 { 14039 dVAR; 14040 HE **array; 14041 I32 i; 14042 14043 PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT; 14044 14045 if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) || 14046 (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE)) 14047 return NULL; 14048 14049 array = HvARRAY(hv); 14050 14051 for (i=HvMAX(hv); i>=0; i--) { 14052 HE *entry; 14053 for (entry = array[i]; entry; entry = HeNEXT(entry)) { 14054 if (HeVAL(entry) != val) 14055 continue; 14056 if ( HeVAL(entry) == &PL_sv_undef || 14057 HeVAL(entry) == &PL_sv_placeholder) 14058 continue; 14059 if (!HeKEY(entry)) 14060 return NULL; 14061 if (HeKLEN(entry) == HEf_SVKEY) 14062 return sv_mortalcopy(HeKEY_sv(entry)); 14063 return sv_2mortal(newSVhek(HeKEY_hek(entry))); 14064 } 14065 } 14066 return NULL; 14067 } 14068 14069 /* Look for an entry in the array whose value has the same SV as val; 14070 * If so, return the index, otherwise return -1. */ 14071 14072 STATIC I32 14073 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val) 14074 { 14075 dVAR; 14076 14077 PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT; 14078 14079 if (!av || SvMAGICAL(av) || !AvARRAY(av) || 14080 (AvFILLp(av) > FUV_MAX_SEARCH_SIZE)) 14081 return -1; 14082 14083 if (val != &PL_sv_undef) { 14084 SV ** const svp = AvARRAY(av); 14085 I32 i; 14086 14087 for (i=AvFILLp(av); i>=0; i--) 14088 if (svp[i] == val) 14089 return i; 14090 } 14091 return -1; 14092 } 14093 14094 /* varname(): return the name of a variable, optionally with a subscript. 14095 * If gv is non-zero, use the name of that global, along with gvtype (one 14096 * of "$", "@", "%"); otherwise use the name of the lexical at pad offset 14097 * targ. Depending on the value of the subscript_type flag, return: 14098 */ 14099 14100 #define FUV_SUBSCRIPT_NONE 1 /* "@foo" */ 14101 #define FUV_SUBSCRIPT_ARRAY 2 /* "$foo[aindex]" */ 14102 #define FUV_SUBSCRIPT_HASH 3 /* "$foo{keyname}" */ 14103 #define FUV_SUBSCRIPT_WITHIN 4 /* "within @foo" */ 14104 14105 SV* 14106 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ, 14107 const SV *const keyname, I32 aindex, int subscript_type) 14108 { 14109 14110 SV * const name = sv_newmortal(); 14111 if (gv && isGV(gv)) { 14112 char buffer[2]; 14113 buffer[0] = gvtype; 14114 buffer[1] = 0; 14115 14116 /* as gv_fullname4(), but add literal '^' for $^FOO names */ 14117 14118 gv_fullname4(name, gv, buffer, 0); 14119 14120 if ((unsigned int)SvPVX(name)[1] <= 26) { 14121 buffer[0] = '^'; 14122 buffer[1] = SvPVX(name)[1] + 'A' - 1; 14123 14124 /* Swap the 1 unprintable control character for the 2 byte pretty 14125 version - ie substr($name, 1, 1) = $buffer; */ 14126 sv_insert(name, 1, 1, buffer, 2); 14127 } 14128 } 14129 else { 14130 CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL); 14131 SV *sv; 14132 AV *av; 14133 14134 assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM); 14135 14136 if (!cv || !CvPADLIST(cv)) 14137 return NULL; 14138 av = *PadlistARRAY(CvPADLIST(cv)); 14139 sv = *av_fetch(av, targ, FALSE); 14140 sv_setsv_flags(name, sv, 0); 14141 } 14142 14143 if (subscript_type == FUV_SUBSCRIPT_HASH) { 14144 SV * const sv = newSV(0); 14145 *SvPVX(name) = '$'; 14146 Perl_sv_catpvf(aTHX_ name, "{%s}", 14147 pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL, 14148 PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT )); 14149 SvREFCNT_dec_NN(sv); 14150 } 14151 else if (subscript_type == FUV_SUBSCRIPT_ARRAY) { 14152 *SvPVX(name) = '$'; 14153 Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex); 14154 } 14155 else if (subscript_type == FUV_SUBSCRIPT_WITHIN) { 14156 /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */ 14157 Perl_sv_insert_flags(aTHX_ name, 0, 0, STR_WITH_LEN("within "), 0); 14158 } 14159 14160 return name; 14161 } 14162 14163 14164 /* 14165 =for apidoc find_uninit_var 14166 14167 Find the name of the undefined variable (if any) that caused the operator 14168 to issue a "Use of uninitialized value" warning. 14169 If match is true, only return a name if its value matches uninit_sv. 14170 So roughly speaking, if a unary operator (such as OP_COS) generates a 14171 warning, then following the direct child of the op may yield an 14172 OP_PADSV or OP_GV that gives the name of the undefined variable. On the 14173 other hand, with OP_ADD there are two branches to follow, so we only print 14174 the variable name if we get an exact match. 14175 14176 The name is returned as a mortal SV. 14177 14178 Assumes that PL_op is the op that originally triggered the error, and that 14179 PL_comppad/PL_curpad points to the currently executing pad. 14180 14181 =cut 14182 */ 14183 14184 STATIC SV * 14185 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv, 14186 bool match) 14187 { 14188 dVAR; 14189 SV *sv; 14190 const GV *gv; 14191 const OP *o, *o2, *kid; 14192 14193 if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef || 14194 uninit_sv == &PL_sv_placeholder))) 14195 return NULL; 14196 14197 switch (obase->op_type) { 14198 14199 case OP_RV2AV: 14200 case OP_RV2HV: 14201 case OP_PADAV: 14202 case OP_PADHV: 14203 { 14204 const bool pad = ( obase->op_type == OP_PADAV 14205 || obase->op_type == OP_PADHV 14206 || obase->op_type == OP_PADRANGE 14207 ); 14208 14209 const bool hash = ( obase->op_type == OP_PADHV 14210 || obase->op_type == OP_RV2HV 14211 || (obase->op_type == OP_PADRANGE 14212 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV) 14213 ); 14214 I32 index = 0; 14215 SV *keysv = NULL; 14216 int subscript_type = FUV_SUBSCRIPT_WITHIN; 14217 14218 if (pad) { /* @lex, %lex */ 14219 sv = PAD_SVl(obase->op_targ); 14220 gv = NULL; 14221 } 14222 else { 14223 if (cUNOPx(obase)->op_first->op_type == OP_GV) { 14224 /* @global, %global */ 14225 gv = cGVOPx_gv(cUNOPx(obase)->op_first); 14226 if (!gv) 14227 break; 14228 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv)); 14229 } 14230 else if (obase == PL_op) /* @{expr}, %{expr} */ 14231 return find_uninit_var(cUNOPx(obase)->op_first, 14232 uninit_sv, match); 14233 else /* @{expr}, %{expr} as a sub-expression */ 14234 return NULL; 14235 } 14236 14237 /* attempt to find a match within the aggregate */ 14238 if (hash) { 14239 keysv = find_hash_subscript((const HV*)sv, uninit_sv); 14240 if (keysv) 14241 subscript_type = FUV_SUBSCRIPT_HASH; 14242 } 14243 else { 14244 index = find_array_subscript((const AV *)sv, uninit_sv); 14245 if (index >= 0) 14246 subscript_type = FUV_SUBSCRIPT_ARRAY; 14247 } 14248 14249 if (match && subscript_type == FUV_SUBSCRIPT_WITHIN) 14250 break; 14251 14252 return varname(gv, hash ? '%' : '@', obase->op_targ, 14253 keysv, index, subscript_type); 14254 } 14255 14256 case OP_RV2SV: 14257 if (cUNOPx(obase)->op_first->op_type == OP_GV) { 14258 /* $global */ 14259 gv = cGVOPx_gv(cUNOPx(obase)->op_first); 14260 if (!gv || !GvSTASH(gv)) 14261 break; 14262 if (match && (GvSV(gv) != uninit_sv)) 14263 break; 14264 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE); 14265 } 14266 /* ${expr} */ 14267 return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1); 14268 14269 case OP_PADSV: 14270 if (match && PAD_SVl(obase->op_targ) != uninit_sv) 14271 break; 14272 return varname(NULL, '$', obase->op_targ, 14273 NULL, 0, FUV_SUBSCRIPT_NONE); 14274 14275 case OP_GVSV: 14276 gv = cGVOPx_gv(obase); 14277 if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv)) 14278 break; 14279 return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE); 14280 14281 case OP_AELEMFAST_LEX: 14282 if (match) { 14283 SV **svp; 14284 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ)); 14285 if (!av || SvRMAGICAL(av)) 14286 break; 14287 svp = av_fetch(av, (I32)obase->op_private, FALSE); 14288 if (!svp || *svp != uninit_sv) 14289 break; 14290 } 14291 return varname(NULL, '$', obase->op_targ, 14292 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY); 14293 case OP_AELEMFAST: 14294 { 14295 gv = cGVOPx_gv(obase); 14296 if (!gv) 14297 break; 14298 if (match) { 14299 SV **svp; 14300 AV *const av = GvAV(gv); 14301 if (!av || SvRMAGICAL(av)) 14302 break; 14303 svp = av_fetch(av, (I32)obase->op_private, FALSE); 14304 if (!svp || *svp != uninit_sv) 14305 break; 14306 } 14307 return varname(gv, '$', 0, 14308 NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY); 14309 } 14310 break; 14311 14312 case OP_EXISTS: 14313 o = cUNOPx(obase)->op_first; 14314 if (!o || o->op_type != OP_NULL || 14315 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM)) 14316 break; 14317 return find_uninit_var(cBINOPo->op_last, uninit_sv, match); 14318 14319 case OP_AELEM: 14320 case OP_HELEM: 14321 { 14322 bool negate = FALSE; 14323 14324 if (PL_op == obase) 14325 /* $a[uninit_expr] or $h{uninit_expr} */ 14326 return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match); 14327 14328 gv = NULL; 14329 o = cBINOPx(obase)->op_first; 14330 kid = cBINOPx(obase)->op_last; 14331 14332 /* get the av or hv, and optionally the gv */ 14333 sv = NULL; 14334 if (o->op_type == OP_PADAV || o->op_type == OP_PADHV) { 14335 sv = PAD_SV(o->op_targ); 14336 } 14337 else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) 14338 && cUNOPo->op_first->op_type == OP_GV) 14339 { 14340 gv = cGVOPx_gv(cUNOPo->op_first); 14341 if (!gv) 14342 break; 14343 sv = o->op_type 14344 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv)); 14345 } 14346 if (!sv) 14347 break; 14348 14349 if (kid && kid->op_type == OP_NEGATE) { 14350 negate = TRUE; 14351 kid = cUNOPx(kid)->op_first; 14352 } 14353 14354 if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) { 14355 /* index is constant */ 14356 SV* kidsv; 14357 if (negate) { 14358 kidsv = sv_2mortal(newSVpvs("-")); 14359 sv_catsv(kidsv, cSVOPx_sv(kid)); 14360 } 14361 else 14362 kidsv = cSVOPx_sv(kid); 14363 if (match) { 14364 if (SvMAGICAL(sv)) 14365 break; 14366 if (obase->op_type == OP_HELEM) { 14367 HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0); 14368 if (!he || HeVAL(he) != uninit_sv) 14369 break; 14370 } 14371 else { 14372 SV * const * const svp = av_fetch(MUTABLE_AV(sv), 14373 negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)), 14374 FALSE); 14375 if (!svp || *svp != uninit_sv) 14376 break; 14377 } 14378 } 14379 if (obase->op_type == OP_HELEM) 14380 return varname(gv, '%', o->op_targ, 14381 kidsv, 0, FUV_SUBSCRIPT_HASH); 14382 else 14383 return varname(gv, '@', o->op_targ, NULL, 14384 negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)), 14385 FUV_SUBSCRIPT_ARRAY); 14386 } 14387 else { 14388 /* index is an expression; 14389 * attempt to find a match within the aggregate */ 14390 if (obase->op_type == OP_HELEM) { 14391 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv); 14392 if (keysv) 14393 return varname(gv, '%', o->op_targ, 14394 keysv, 0, FUV_SUBSCRIPT_HASH); 14395 } 14396 else { 14397 const I32 index 14398 = find_array_subscript((const AV *)sv, uninit_sv); 14399 if (index >= 0) 14400 return varname(gv, '@', o->op_targ, 14401 NULL, index, FUV_SUBSCRIPT_ARRAY); 14402 } 14403 if (match) 14404 break; 14405 return varname(gv, 14406 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV) 14407 ? '@' : '%', 14408 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN); 14409 } 14410 break; 14411 } 14412 14413 case OP_AASSIGN: 14414 /* only examine RHS */ 14415 return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match); 14416 14417 case OP_OPEN: 14418 o = cUNOPx(obase)->op_first; 14419 if ( o->op_type == OP_PUSHMARK 14420 || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK) 14421 ) 14422 o = o->op_sibling; 14423 14424 if (!o->op_sibling) { 14425 /* one-arg version of open is highly magical */ 14426 14427 if (o->op_type == OP_GV) { /* open FOO; */ 14428 gv = cGVOPx_gv(o); 14429 if (match && GvSV(gv) != uninit_sv) 14430 break; 14431 return varname(gv, '$', 0, 14432 NULL, 0, FUV_SUBSCRIPT_NONE); 14433 } 14434 /* other possibilities not handled are: 14435 * open $x; or open my $x; should return '${*$x}' 14436 * open expr; should return '$'.expr ideally 14437 */ 14438 break; 14439 } 14440 goto do_op; 14441 14442 /* ops where $_ may be an implicit arg */ 14443 case OP_TRANS: 14444 case OP_TRANSR: 14445 case OP_SUBST: 14446 case OP_MATCH: 14447 if ( !(obase->op_flags & OPf_STACKED)) { 14448 if (uninit_sv == ((obase->op_private & OPpTARGET_MY) 14449 ? PAD_SVl(obase->op_targ) 14450 : DEFSV)) 14451 { 14452 sv = sv_newmortal(); 14453 sv_setpvs(sv, "$_"); 14454 return sv; 14455 } 14456 } 14457 goto do_op; 14458 14459 case OP_PRTF: 14460 case OP_PRINT: 14461 case OP_SAY: 14462 match = 1; /* print etc can return undef on defined args */ 14463 /* skip filehandle as it can't produce 'undef' warning */ 14464 o = cUNOPx(obase)->op_first; 14465 if ((obase->op_flags & OPf_STACKED) 14466 && 14467 ( o->op_type == OP_PUSHMARK 14468 || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK))) 14469 o = o->op_sibling->op_sibling; 14470 goto do_op2; 14471 14472 14473 case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */ 14474 case OP_CUSTOM: /* XS or custom code could trigger random warnings */ 14475 14476 /* the following ops are capable of returning PL_sv_undef even for 14477 * defined arg(s) */ 14478 14479 case OP_BACKTICK: 14480 case OP_PIPE_OP: 14481 case OP_FILENO: 14482 case OP_BINMODE: 14483 case OP_TIED: 14484 case OP_GETC: 14485 case OP_SYSREAD: 14486 case OP_SEND: 14487 case OP_IOCTL: 14488 case OP_SOCKET: 14489 case OP_SOCKPAIR: 14490 case OP_BIND: 14491 case OP_CONNECT: 14492 case OP_LISTEN: 14493 case OP_ACCEPT: 14494 case OP_SHUTDOWN: 14495 case OP_SSOCKOPT: 14496 case OP_GETPEERNAME: 14497 case OP_FTRREAD: 14498 case OP_FTRWRITE: 14499 case OP_FTREXEC: 14500 case OP_FTROWNED: 14501 case OP_FTEREAD: 14502 case OP_FTEWRITE: 14503 case OP_FTEEXEC: 14504 case OP_FTEOWNED: 14505 case OP_FTIS: 14506 case OP_FTZERO: 14507 case OP_FTSIZE: 14508 case OP_FTFILE: 14509 case OP_FTDIR: 14510 case OP_FTLINK: 14511 case OP_FTPIPE: 14512 case OP_FTSOCK: 14513 case OP_FTBLK: 14514 case OP_FTCHR: 14515 case OP_FTTTY: 14516 case OP_FTSUID: 14517 case OP_FTSGID: 14518 case OP_FTSVTX: 14519 case OP_FTTEXT: 14520 case OP_FTBINARY: 14521 case OP_FTMTIME: 14522 case OP_FTATIME: 14523 case OP_FTCTIME: 14524 case OP_READLINK: 14525 case OP_OPEN_DIR: 14526 case OP_READDIR: 14527 case OP_TELLDIR: 14528 case OP_SEEKDIR: 14529 case OP_REWINDDIR: 14530 case OP_CLOSEDIR: 14531 case OP_GMTIME: 14532 case OP_ALARM: 14533 case OP_SEMGET: 14534 case OP_GETLOGIN: 14535 case OP_UNDEF: 14536 case OP_SUBSTR: 14537 case OP_AEACH: 14538 case OP_EACH: 14539 case OP_SORT: 14540 case OP_CALLER: 14541 case OP_DOFILE: 14542 case OP_PROTOTYPE: 14543 case OP_NCMP: 14544 case OP_SMARTMATCH: 14545 case OP_UNPACK: 14546 case OP_SYSOPEN: 14547 case OP_SYSSEEK: 14548 match = 1; 14549 goto do_op; 14550 14551 case OP_ENTERSUB: 14552 case OP_GOTO: 14553 /* XXX tmp hack: these two may call an XS sub, and currently 14554 XS subs don't have a SUB entry on the context stack, so CV and 14555 pad determination goes wrong, and BAD things happen. So, just 14556 don't try to determine the value under those circumstances. 14557 Need a better fix at dome point. DAPM 11/2007 */ 14558 break; 14559 14560 case OP_FLIP: 14561 case OP_FLOP: 14562 { 14563 GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV); 14564 if (gv && GvSV(gv) == uninit_sv) 14565 return newSVpvs_flags("$.", SVs_TEMP); 14566 goto do_op; 14567 } 14568 14569 case OP_POS: 14570 /* def-ness of rval pos() is independent of the def-ness of its arg */ 14571 if ( !(obase->op_flags & OPf_MOD)) 14572 break; 14573 14574 case OP_SCHOMP: 14575 case OP_CHOMP: 14576 if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs)) 14577 return newSVpvs_flags("${$/}", SVs_TEMP); 14578 /*FALLTHROUGH*/ 14579 14580 default: 14581 do_op: 14582 if (!(obase->op_flags & OPf_KIDS)) 14583 break; 14584 o = cUNOPx(obase)->op_first; 14585 14586 do_op2: 14587 if (!o) 14588 break; 14589 14590 /* This loop checks all the kid ops, skipping any that cannot pos- 14591 * sibly be responsible for the uninitialized value; i.e., defined 14592 * constants and ops that return nothing. If there is only one op 14593 * left that is not skipped, then we *know* it is responsible for 14594 * the uninitialized value. If there is more than one op left, we 14595 * have to look for an exact match in the while() loop below. 14596 * Note that we skip padrange, because the individual pad ops that 14597 * it replaced are still in the tree, so we work on them instead. 14598 */ 14599 o2 = NULL; 14600 for (kid=o; kid; kid = kid->op_sibling) { 14601 if (kid) { 14602 const OPCODE type = kid->op_type; 14603 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid))) 14604 || (type == OP_NULL && ! (kid->op_flags & OPf_KIDS)) 14605 || (type == OP_PUSHMARK) 14606 || (type == OP_PADRANGE) 14607 ) 14608 continue; 14609 } 14610 if (o2) { /* more than one found */ 14611 o2 = NULL; 14612 break; 14613 } 14614 o2 = kid; 14615 } 14616 if (o2) 14617 return find_uninit_var(o2, uninit_sv, match); 14618 14619 /* scan all args */ 14620 while (o) { 14621 sv = find_uninit_var(o, uninit_sv, 1); 14622 if (sv) 14623 return sv; 14624 o = o->op_sibling; 14625 } 14626 break; 14627 } 14628 return NULL; 14629 } 14630 14631 14632 /* 14633 =for apidoc report_uninit 14634 14635 Print appropriate "Use of uninitialized variable" warning. 14636 14637 =cut 14638 */ 14639 14640 void 14641 Perl_report_uninit(pTHX_ const SV *uninit_sv) 14642 { 14643 dVAR; 14644 if (PL_op) { 14645 SV* varname = NULL; 14646 if (uninit_sv && PL_curpad) { 14647 varname = find_uninit_var(PL_op, uninit_sv,0); 14648 if (varname) 14649 sv_insert(varname, 0, 0, " ", 1); 14650 } 14651 /* diag_listed_as: Use of uninitialized value%s */ 14652 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv, 14653 SVfARG(varname ? varname : &PL_sv_no), 14654 " in ", OP_DESC(PL_op)); 14655 } 14656 else 14657 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit, 14658 "", "", ""); 14659 } 14660 14661 /* 14662 * Local variables: 14663 * c-indentation-style: bsd 14664 * c-basic-offset: 4 14665 * indent-tabs-mode: nil 14666 * End: 14667 * 14668 * ex: set ts=8 sts=4 sw=4 et: 14669 */ 14670