1*0Sstevel@tonic-gate=head1 NAME 2*0Sstevel@tonic-gate 3*0Sstevel@tonic-gateperlintern - autogenerated documentation of purely B<internal> 4*0Sstevel@tonic-gate Perl functions 5*0Sstevel@tonic-gate 6*0Sstevel@tonic-gate=head1 DESCRIPTION 7*0Sstevel@tonic-gate 8*0Sstevel@tonic-gateThis file is the autogenerated documentation of functions in the 9*0Sstevel@tonic-gatePerl interpreter that are documented using Perl's internal documentation 10*0Sstevel@tonic-gateformat but are not marked as part of the Perl API. In other words, 11*0Sstevel@tonic-gateB<they are not for use in extensions>! 12*0Sstevel@tonic-gate 13*0Sstevel@tonic-gate 14*0Sstevel@tonic-gate=head1 CV reference counts and CvOUTSIDE 15*0Sstevel@tonic-gate 16*0Sstevel@tonic-gate=over 8 17*0Sstevel@tonic-gate 18*0Sstevel@tonic-gate=item CvWEAKOUTSIDE 19*0Sstevel@tonic-gate 20*0Sstevel@tonic-gateEach CV has a pointer, C<CvOUTSIDE()>, to its lexically enclosing 21*0Sstevel@tonic-gateCV (if any). Because pointers to anonymous sub prototypes are 22*0Sstevel@tonic-gatestored in C<&> pad slots, it is a possible to get a circular reference, 23*0Sstevel@tonic-gatewith the parent pointing to the child and vice-versa. To avoid the 24*0Sstevel@tonic-gateensuing memory leak, we do not increment the reference count of the CV 25*0Sstevel@tonic-gatepointed to by C<CvOUTSIDE> in the I<one specific instance> that the parent 26*0Sstevel@tonic-gatehas a C<&> pad slot pointing back to us. In this case, we set the 27*0Sstevel@tonic-gateC<CvWEAKOUTSIDE> flag in the child. This allows us to determine under what 28*0Sstevel@tonic-gatecircumstances we should decrement the refcount of the parent when freeing 29*0Sstevel@tonic-gatethe child. 30*0Sstevel@tonic-gate 31*0Sstevel@tonic-gateThere is a further complication with non-closure anonymous subs (ie those 32*0Sstevel@tonic-gatethat do not refer to any lexicals outside that sub). In this case, the 33*0Sstevel@tonic-gateanonymous prototype is shared rather than being cloned. This has the 34*0Sstevel@tonic-gateconsequence that the parent may be freed while there are still active 35*0Sstevel@tonic-gatechildren, eg 36*0Sstevel@tonic-gate 37*0Sstevel@tonic-gate BEGIN { $a = sub { eval '$x' } } 38*0Sstevel@tonic-gate 39*0Sstevel@tonic-gateIn this case, the BEGIN is freed immediately after execution since there 40*0Sstevel@tonic-gateare no active references to it: the anon sub prototype has 41*0Sstevel@tonic-gateC<CvWEAKOUTSIDE> set since it's not a closure, and $a points to the same 42*0Sstevel@tonic-gateCV, so it doesn't contribute to BEGIN's refcount either. When $a is 43*0Sstevel@tonic-gateexecuted, the C<eval '$x'> causes the chain of C<CvOUTSIDE>s to be followed, 44*0Sstevel@tonic-gateand the freed BEGIN is accessed. 45*0Sstevel@tonic-gate 46*0Sstevel@tonic-gateTo avoid this, whenever a CV and its associated pad is freed, any 47*0Sstevel@tonic-gateC<&> entries in the pad are explicitly removed from the pad, and if the 48*0Sstevel@tonic-gaterefcount of the pointed-to anon sub is still positive, then that 49*0Sstevel@tonic-gatechild's C<CvOUTSIDE> is set to point to its grandparent. This will only 50*0Sstevel@tonic-gateoccur in the single specific case of a non-closure anon prototype 51*0Sstevel@tonic-gatehaving one or more active references (such as C<$a> above). 52*0Sstevel@tonic-gate 53*0Sstevel@tonic-gateOne other thing to consider is that a CV may be merely undefined 54*0Sstevel@tonic-gaterather than freed, eg C<undef &foo>. In this case, its refcount may 55*0Sstevel@tonic-gatenot have reached zero, but we still delete its pad and its C<CvROOT> etc. 56*0Sstevel@tonic-gateSince various children may still have their C<CvOUTSIDE> pointing at this 57*0Sstevel@tonic-gateundefined CV, we keep its own C<CvOUTSIDE> for the time being, so that 58*0Sstevel@tonic-gatethe chain of lexical scopes is unbroken. For example, the following 59*0Sstevel@tonic-gateshould print 123: 60*0Sstevel@tonic-gate 61*0Sstevel@tonic-gate my $x = 123; 62*0Sstevel@tonic-gate sub tmp { sub { eval '$x' } } 63*0Sstevel@tonic-gate my $a = tmp(); 64*0Sstevel@tonic-gate undef &tmp; 65*0Sstevel@tonic-gate print $a->(); 66*0Sstevel@tonic-gate 67*0Sstevel@tonic-gate bool CvWEAKOUTSIDE(CV *cv) 68*0Sstevel@tonic-gate 69*0Sstevel@tonic-gate=for hackers 70*0Sstevel@tonic-gateFound in file cv.h 71*0Sstevel@tonic-gate 72*0Sstevel@tonic-gate 73*0Sstevel@tonic-gate=back 74*0Sstevel@tonic-gate 75*0Sstevel@tonic-gate=head1 Functions in file pad.h 76*0Sstevel@tonic-gate 77*0Sstevel@tonic-gate 78*0Sstevel@tonic-gate=over 8 79*0Sstevel@tonic-gate 80*0Sstevel@tonic-gate=item CX_CURPAD_SAVE 81*0Sstevel@tonic-gate 82*0Sstevel@tonic-gateSave the current pad in the given context block structure. 83*0Sstevel@tonic-gate 84*0Sstevel@tonic-gate void CX_CURPAD_SAVE(struct context) 85*0Sstevel@tonic-gate 86*0Sstevel@tonic-gate=for hackers 87*0Sstevel@tonic-gateFound in file pad.h 88*0Sstevel@tonic-gate 89*0Sstevel@tonic-gate=item CX_CURPAD_SV 90*0Sstevel@tonic-gate 91*0Sstevel@tonic-gateAccess the SV at offset po in the saved current pad in the given 92*0Sstevel@tonic-gatecontext block structure (can be used as an lvalue). 93*0Sstevel@tonic-gate 94*0Sstevel@tonic-gate SV * CX_CURPAD_SV(struct context, PADOFFSET po) 95*0Sstevel@tonic-gate 96*0Sstevel@tonic-gate=for hackers 97*0Sstevel@tonic-gateFound in file pad.h 98*0Sstevel@tonic-gate 99*0Sstevel@tonic-gate=item PAD_BASE_SV 100*0Sstevel@tonic-gate 101*0Sstevel@tonic-gateGet the value from slot C<po> in the base (DEPTH=1) pad of a padlist 102*0Sstevel@tonic-gate 103*0Sstevel@tonic-gate SV * PAD_BASE_SV (PADLIST padlist, PADOFFSET po) 104*0Sstevel@tonic-gate 105*0Sstevel@tonic-gate=for hackers 106*0Sstevel@tonic-gateFound in file pad.h 107*0Sstevel@tonic-gate 108*0Sstevel@tonic-gate=item PAD_CLONE_VARS 109*0Sstevel@tonic-gate 110*0Sstevel@tonic-gate|CLONE_PARAMS* param 111*0Sstevel@tonic-gateClone the state variables associated with running and compiling pads. 112*0Sstevel@tonic-gate 113*0Sstevel@tonic-gate void PAD_CLONE_VARS(PerlInterpreter *proto_perl \) 114*0Sstevel@tonic-gate 115*0Sstevel@tonic-gate=for hackers 116*0Sstevel@tonic-gateFound in file pad.h 117*0Sstevel@tonic-gate 118*0Sstevel@tonic-gate=item PAD_COMPNAME_FLAGS 119*0Sstevel@tonic-gate 120*0Sstevel@tonic-gateReturn the flags for the current compiling pad name 121*0Sstevel@tonic-gateat offset C<po>. Assumes a valid slot entry. 122*0Sstevel@tonic-gate 123*0Sstevel@tonic-gate U32 PAD_COMPNAME_FLAGS(PADOFFSET po) 124*0Sstevel@tonic-gate 125*0Sstevel@tonic-gate=for hackers 126*0Sstevel@tonic-gateFound in file pad.h 127*0Sstevel@tonic-gate 128*0Sstevel@tonic-gate=item PAD_COMPNAME_GEN 129*0Sstevel@tonic-gate 130*0Sstevel@tonic-gateThe generation number of the name at offset C<po> in the current 131*0Sstevel@tonic-gatecompiling pad (lvalue). Note that C<SvCUR> is hijacked for this purpose. 132*0Sstevel@tonic-gate 133*0Sstevel@tonic-gate STRLEN PAD_COMPNAME_GEN(PADOFFSET po) 134*0Sstevel@tonic-gate 135*0Sstevel@tonic-gate=for hackers 136*0Sstevel@tonic-gateFound in file pad.h 137*0Sstevel@tonic-gate 138*0Sstevel@tonic-gate=item PAD_COMPNAME_OURSTASH 139*0Sstevel@tonic-gate 140*0Sstevel@tonic-gateReturn the stash associated with an C<our> variable. 141*0Sstevel@tonic-gateAssumes the slot entry is a valid C<our> lexical. 142*0Sstevel@tonic-gate 143*0Sstevel@tonic-gate HV * PAD_COMPNAME_OURSTASH(PADOFFSET po) 144*0Sstevel@tonic-gate 145*0Sstevel@tonic-gate=for hackers 146*0Sstevel@tonic-gateFound in file pad.h 147*0Sstevel@tonic-gate 148*0Sstevel@tonic-gate=item PAD_COMPNAME_PV 149*0Sstevel@tonic-gate 150*0Sstevel@tonic-gateReturn the name of the current compiling pad name 151*0Sstevel@tonic-gateat offset C<po>. Assumes a valid slot entry. 152*0Sstevel@tonic-gate 153*0Sstevel@tonic-gate char * PAD_COMPNAME_PV(PADOFFSET po) 154*0Sstevel@tonic-gate 155*0Sstevel@tonic-gate=for hackers 156*0Sstevel@tonic-gateFound in file pad.h 157*0Sstevel@tonic-gate 158*0Sstevel@tonic-gate=item PAD_COMPNAME_TYPE 159*0Sstevel@tonic-gate 160*0Sstevel@tonic-gateReturn the type (stash) of the current compiling pad name at offset 161*0Sstevel@tonic-gateC<po>. Must be a valid name. Returns null if not typed. 162*0Sstevel@tonic-gate 163*0Sstevel@tonic-gate HV * PAD_COMPNAME_TYPE(PADOFFSET po) 164*0Sstevel@tonic-gate 165*0Sstevel@tonic-gate=for hackers 166*0Sstevel@tonic-gateFound in file pad.h 167*0Sstevel@tonic-gate 168*0Sstevel@tonic-gate=item PAD_DUP 169*0Sstevel@tonic-gate 170*0Sstevel@tonic-gateClone a padlist. 171*0Sstevel@tonic-gate 172*0Sstevel@tonic-gate void PAD_DUP(PADLIST dstpad, PADLIST srcpad, CLONE_PARAMS* param) 173*0Sstevel@tonic-gate 174*0Sstevel@tonic-gate=for hackers 175*0Sstevel@tonic-gateFound in file pad.h 176*0Sstevel@tonic-gate 177*0Sstevel@tonic-gate=item PAD_RESTORE_LOCAL 178*0Sstevel@tonic-gate 179*0Sstevel@tonic-gateRestore the old pad saved into the local variable opad by PAD_SAVE_LOCAL() 180*0Sstevel@tonic-gate 181*0Sstevel@tonic-gate void PAD_RESTORE_LOCAL(PAD *opad) 182*0Sstevel@tonic-gate 183*0Sstevel@tonic-gate=for hackers 184*0Sstevel@tonic-gateFound in file pad.h 185*0Sstevel@tonic-gate 186*0Sstevel@tonic-gate=item PAD_SAVE_LOCAL 187*0Sstevel@tonic-gate 188*0Sstevel@tonic-gateSave the current pad to the local variable opad, then make the 189*0Sstevel@tonic-gatecurrent pad equal to npad 190*0Sstevel@tonic-gate 191*0Sstevel@tonic-gate void PAD_SAVE_LOCAL(PAD *opad, PAD *npad) 192*0Sstevel@tonic-gate 193*0Sstevel@tonic-gate=for hackers 194*0Sstevel@tonic-gateFound in file pad.h 195*0Sstevel@tonic-gate 196*0Sstevel@tonic-gate=item PAD_SAVE_SETNULLPAD 197*0Sstevel@tonic-gate 198*0Sstevel@tonic-gateSave the current pad then set it to null. 199*0Sstevel@tonic-gate 200*0Sstevel@tonic-gate void PAD_SAVE_SETNULLPAD() 201*0Sstevel@tonic-gate 202*0Sstevel@tonic-gate=for hackers 203*0Sstevel@tonic-gateFound in file pad.h 204*0Sstevel@tonic-gate 205*0Sstevel@tonic-gate=item PAD_SETSV 206*0Sstevel@tonic-gate 207*0Sstevel@tonic-gateSet the slot at offset C<po> in the current pad to C<sv> 208*0Sstevel@tonic-gate 209*0Sstevel@tonic-gate SV * PAD_SETSV (PADOFFSET po, SV* sv) 210*0Sstevel@tonic-gate 211*0Sstevel@tonic-gate=for hackers 212*0Sstevel@tonic-gateFound in file pad.h 213*0Sstevel@tonic-gate 214*0Sstevel@tonic-gate=item PAD_SET_CUR 215*0Sstevel@tonic-gate 216*0Sstevel@tonic-gateSet the current pad to be pad C<n> in the padlist, saving 217*0Sstevel@tonic-gatethe previous current pad. 218*0Sstevel@tonic-gate 219*0Sstevel@tonic-gate void PAD_SET_CUR (PADLIST padlist, I32 n) 220*0Sstevel@tonic-gate 221*0Sstevel@tonic-gate=for hackers 222*0Sstevel@tonic-gateFound in file pad.h 223*0Sstevel@tonic-gate 224*0Sstevel@tonic-gate=item PAD_SET_CUR_NOSAVE 225*0Sstevel@tonic-gate 226*0Sstevel@tonic-gatelike PAD_SET_CUR, but without the save 227*0Sstevel@tonic-gate 228*0Sstevel@tonic-gate void PAD_SET_CUR_NOSAVE (PADLIST padlist, I32 n) 229*0Sstevel@tonic-gate 230*0Sstevel@tonic-gate=for hackers 231*0Sstevel@tonic-gateFound in file pad.h 232*0Sstevel@tonic-gate 233*0Sstevel@tonic-gate=item PAD_SV 234*0Sstevel@tonic-gate 235*0Sstevel@tonic-gateGet the value at offset C<po> in the current pad 236*0Sstevel@tonic-gate 237*0Sstevel@tonic-gate void PAD_SV (PADOFFSET po) 238*0Sstevel@tonic-gate 239*0Sstevel@tonic-gate=for hackers 240*0Sstevel@tonic-gateFound in file pad.h 241*0Sstevel@tonic-gate 242*0Sstevel@tonic-gate=item PAD_SVl 243*0Sstevel@tonic-gate 244*0Sstevel@tonic-gateLightweight and lvalue version of C<PAD_SV>. 245*0Sstevel@tonic-gateGet or set the value at offset C<po> in the current pad. 246*0Sstevel@tonic-gateUnlike C<PAD_SV>, does not print diagnostics with -DX. 247*0Sstevel@tonic-gateFor internal use only. 248*0Sstevel@tonic-gate 249*0Sstevel@tonic-gate SV * PAD_SVl (PADOFFSET po) 250*0Sstevel@tonic-gate 251*0Sstevel@tonic-gate=for hackers 252*0Sstevel@tonic-gateFound in file pad.h 253*0Sstevel@tonic-gate 254*0Sstevel@tonic-gate=item SAVECLEARSV 255*0Sstevel@tonic-gate 256*0Sstevel@tonic-gateClear the pointed to pad value on scope exit. (ie the runtime action of 'my') 257*0Sstevel@tonic-gate 258*0Sstevel@tonic-gate void SAVECLEARSV (SV **svp) 259*0Sstevel@tonic-gate 260*0Sstevel@tonic-gate=for hackers 261*0Sstevel@tonic-gateFound in file pad.h 262*0Sstevel@tonic-gate 263*0Sstevel@tonic-gate=item SAVECOMPPAD 264*0Sstevel@tonic-gate 265*0Sstevel@tonic-gatesave PL_comppad and PL_curpad 266*0Sstevel@tonic-gate 267*0Sstevel@tonic-gate 268*0Sstevel@tonic-gate 269*0Sstevel@tonic-gate 270*0Sstevel@tonic-gate 271*0Sstevel@tonic-gate void SAVECOMPPAD() 272*0Sstevel@tonic-gate 273*0Sstevel@tonic-gate=for hackers 274*0Sstevel@tonic-gateFound in file pad.h 275*0Sstevel@tonic-gate 276*0Sstevel@tonic-gate=item SAVEPADSV 277*0Sstevel@tonic-gate 278*0Sstevel@tonic-gateSave a pad slot (used to restore after an iteration) 279*0Sstevel@tonic-gate 280*0Sstevel@tonic-gateXXX DAPM it would make more sense to make the arg a PADOFFSET 281*0Sstevel@tonic-gate void SAVEPADSV (PADOFFSET po) 282*0Sstevel@tonic-gate 283*0Sstevel@tonic-gate=for hackers 284*0Sstevel@tonic-gateFound in file pad.h 285*0Sstevel@tonic-gate 286*0Sstevel@tonic-gate 287*0Sstevel@tonic-gate=back 288*0Sstevel@tonic-gate 289*0Sstevel@tonic-gate=head1 Functions in file pp_ctl.c 290*0Sstevel@tonic-gate 291*0Sstevel@tonic-gate 292*0Sstevel@tonic-gate=over 8 293*0Sstevel@tonic-gate 294*0Sstevel@tonic-gate=item find_runcv 295*0Sstevel@tonic-gate 296*0Sstevel@tonic-gateLocate the CV corresponding to the currently executing sub or eval. 297*0Sstevel@tonic-gateIf db_seqp is non_null, skip CVs that are in the DB package and populate 298*0Sstevel@tonic-gate*db_seqp with the cop sequence number at the point that the DB:: code was 299*0Sstevel@tonic-gateentered. (allows debuggers to eval in the scope of the breakpoint rather 300*0Sstevel@tonic-gatethan in in the scope of the debuger itself). 301*0Sstevel@tonic-gate 302*0Sstevel@tonic-gate CV* find_runcv(U32 *db_seqp) 303*0Sstevel@tonic-gate 304*0Sstevel@tonic-gate=for hackers 305*0Sstevel@tonic-gateFound in file pp_ctl.c 306*0Sstevel@tonic-gate 307*0Sstevel@tonic-gate 308*0Sstevel@tonic-gate=back 309*0Sstevel@tonic-gate 310*0Sstevel@tonic-gate=head1 Global Variables 311*0Sstevel@tonic-gate 312*0Sstevel@tonic-gate=over 8 313*0Sstevel@tonic-gate 314*0Sstevel@tonic-gate=item PL_DBsingle 315*0Sstevel@tonic-gate 316*0Sstevel@tonic-gateWhen Perl is run in debugging mode, with the B<-d> switch, this SV is a 317*0Sstevel@tonic-gateboolean which indicates whether subs are being single-stepped. 318*0Sstevel@tonic-gateSingle-stepping is automatically turned on after every step. This is the C 319*0Sstevel@tonic-gatevariable which corresponds to Perl's $DB::single variable. See 320*0Sstevel@tonic-gateC<PL_DBsub>. 321*0Sstevel@tonic-gate 322*0Sstevel@tonic-gate SV * PL_DBsingle 323*0Sstevel@tonic-gate 324*0Sstevel@tonic-gate=for hackers 325*0Sstevel@tonic-gateFound in file intrpvar.h 326*0Sstevel@tonic-gate 327*0Sstevel@tonic-gate=item PL_DBsub 328*0Sstevel@tonic-gate 329*0Sstevel@tonic-gateWhen Perl is run in debugging mode, with the B<-d> switch, this GV contains 330*0Sstevel@tonic-gatethe SV which holds the name of the sub being debugged. This is the C 331*0Sstevel@tonic-gatevariable which corresponds to Perl's $DB::sub variable. See 332*0Sstevel@tonic-gateC<PL_DBsingle>. 333*0Sstevel@tonic-gate 334*0Sstevel@tonic-gate GV * PL_DBsub 335*0Sstevel@tonic-gate 336*0Sstevel@tonic-gate=for hackers 337*0Sstevel@tonic-gateFound in file intrpvar.h 338*0Sstevel@tonic-gate 339*0Sstevel@tonic-gate=item PL_DBtrace 340*0Sstevel@tonic-gate 341*0Sstevel@tonic-gateTrace variable used when Perl is run in debugging mode, with the B<-d> 342*0Sstevel@tonic-gateswitch. This is the C variable which corresponds to Perl's $DB::trace 343*0Sstevel@tonic-gatevariable. See C<PL_DBsingle>. 344*0Sstevel@tonic-gate 345*0Sstevel@tonic-gate SV * PL_DBtrace 346*0Sstevel@tonic-gate 347*0Sstevel@tonic-gate=for hackers 348*0Sstevel@tonic-gateFound in file intrpvar.h 349*0Sstevel@tonic-gate 350*0Sstevel@tonic-gate=item PL_dowarn 351*0Sstevel@tonic-gate 352*0Sstevel@tonic-gateThe C variable which corresponds to Perl's $^W warning variable. 353*0Sstevel@tonic-gate 354*0Sstevel@tonic-gate bool PL_dowarn 355*0Sstevel@tonic-gate 356*0Sstevel@tonic-gate=for hackers 357*0Sstevel@tonic-gateFound in file intrpvar.h 358*0Sstevel@tonic-gate 359*0Sstevel@tonic-gate=item PL_last_in_gv 360*0Sstevel@tonic-gate 361*0Sstevel@tonic-gateThe GV which was last used for a filehandle input operation. (C<< <FH> >>) 362*0Sstevel@tonic-gate 363*0Sstevel@tonic-gate GV* PL_last_in_gv 364*0Sstevel@tonic-gate 365*0Sstevel@tonic-gate=for hackers 366*0Sstevel@tonic-gateFound in file thrdvar.h 367*0Sstevel@tonic-gate 368*0Sstevel@tonic-gate=item PL_ofs_sv 369*0Sstevel@tonic-gate 370*0Sstevel@tonic-gateThe output field separator - C<$,> in Perl space. 371*0Sstevel@tonic-gate 372*0Sstevel@tonic-gate SV* PL_ofs_sv 373*0Sstevel@tonic-gate 374*0Sstevel@tonic-gate=for hackers 375*0Sstevel@tonic-gateFound in file thrdvar.h 376*0Sstevel@tonic-gate 377*0Sstevel@tonic-gate=item PL_rs 378*0Sstevel@tonic-gate 379*0Sstevel@tonic-gateThe input record separator - C<$/> in Perl space. 380*0Sstevel@tonic-gate 381*0Sstevel@tonic-gate SV* PL_rs 382*0Sstevel@tonic-gate 383*0Sstevel@tonic-gate=for hackers 384*0Sstevel@tonic-gateFound in file thrdvar.h 385*0Sstevel@tonic-gate 386*0Sstevel@tonic-gate 387*0Sstevel@tonic-gate=back 388*0Sstevel@tonic-gate 389*0Sstevel@tonic-gate=head1 GV Functions 390*0Sstevel@tonic-gate 391*0Sstevel@tonic-gate=over 8 392*0Sstevel@tonic-gate 393*0Sstevel@tonic-gate=item is_gv_magical 394*0Sstevel@tonic-gate 395*0Sstevel@tonic-gateReturns C<TRUE> if given the name of a magical GV. 396*0Sstevel@tonic-gate 397*0Sstevel@tonic-gateCurrently only useful internally when determining if a GV should be 398*0Sstevel@tonic-gatecreated even in rvalue contexts. 399*0Sstevel@tonic-gate 400*0Sstevel@tonic-gateC<flags> is not used at present but available for future extension to 401*0Sstevel@tonic-gateallow selecting particular classes of magical variable. 402*0Sstevel@tonic-gate 403*0Sstevel@tonic-gate bool is_gv_magical(char *name, STRLEN len, U32 flags) 404*0Sstevel@tonic-gate 405*0Sstevel@tonic-gate=for hackers 406*0Sstevel@tonic-gateFound in file gv.c 407*0Sstevel@tonic-gate 408*0Sstevel@tonic-gate 409*0Sstevel@tonic-gate=back 410*0Sstevel@tonic-gate 411*0Sstevel@tonic-gate=head1 IO Functions 412*0Sstevel@tonic-gate 413*0Sstevel@tonic-gate=over 8 414*0Sstevel@tonic-gate 415*0Sstevel@tonic-gate=item start_glob 416*0Sstevel@tonic-gate 417*0Sstevel@tonic-gateFunction called by C<do_readline> to spawn a glob (or do the glob inside 418*0Sstevel@tonic-gateperl on VMS). This code used to be inline, but now perl uses C<File::Glob> 419*0Sstevel@tonic-gatethis glob starter is only used by miniperl during the build process. 420*0Sstevel@tonic-gateMoving it away shrinks pp_hot.c; shrinking pp_hot.c helps speed perl up. 421*0Sstevel@tonic-gate 422*0Sstevel@tonic-gate PerlIO* start_glob(SV* pattern, IO *io) 423*0Sstevel@tonic-gate 424*0Sstevel@tonic-gate=for hackers 425*0Sstevel@tonic-gateFound in file doio.c 426*0Sstevel@tonic-gate 427*0Sstevel@tonic-gate 428*0Sstevel@tonic-gate=back 429*0Sstevel@tonic-gate 430*0Sstevel@tonic-gate=head1 Pad Data Structures 431*0Sstevel@tonic-gate 432*0Sstevel@tonic-gate=over 8 433*0Sstevel@tonic-gate 434*0Sstevel@tonic-gate=item CvPADLIST 435*0Sstevel@tonic-gate 436*0Sstevel@tonic-gateCV's can have CvPADLIST(cv) set to point to an AV. 437*0Sstevel@tonic-gate 438*0Sstevel@tonic-gateFor these purposes "forms" are a kind-of CV, eval""s are too (except they're 439*0Sstevel@tonic-gatenot callable at will and are always thrown away after the eval"" is done 440*0Sstevel@tonic-gateexecuting). 441*0Sstevel@tonic-gate 442*0Sstevel@tonic-gateXSUBs don't have CvPADLIST set - dXSTARG fetches values from PL_curpad, 443*0Sstevel@tonic-gatebut that is really the callers pad (a slot of which is allocated by 444*0Sstevel@tonic-gateevery entersub). 445*0Sstevel@tonic-gate 446*0Sstevel@tonic-gateThe CvPADLIST AV has does not have AvREAL set, so REFCNT of component items 447*0Sstevel@tonic-gateis managed "manual" (mostly in pad.c) rather than normal av.c rules. 448*0Sstevel@tonic-gateThe items in the AV are not SVs as for a normal AV, but other AVs: 449*0Sstevel@tonic-gate 450*0Sstevel@tonic-gate0'th Entry of the CvPADLIST is an AV which represents the "names" or rather 451*0Sstevel@tonic-gatethe "static type information" for lexicals. 452*0Sstevel@tonic-gate 453*0Sstevel@tonic-gateThe CvDEPTH'th entry of CvPADLIST AV is an AV which is the stack frame at that 454*0Sstevel@tonic-gatedepth of recursion into the CV. 455*0Sstevel@tonic-gateThe 0'th slot of a frame AV is an AV which is @_. 456*0Sstevel@tonic-gateother entries are storage for variables and op targets. 457*0Sstevel@tonic-gate 458*0Sstevel@tonic-gateDuring compilation: 459*0Sstevel@tonic-gateC<PL_comppad_name> is set to the names AV. 460*0Sstevel@tonic-gateC<PL_comppad> is set to the frame AV for the frame CvDEPTH == 1. 461*0Sstevel@tonic-gateC<PL_curpad> is set to the body of the frame AV (i.e. AvARRAY(PL_comppad)). 462*0Sstevel@tonic-gate 463*0Sstevel@tonic-gateDuring execution, C<PL_comppad> and C<PL_curpad> refer to the live 464*0Sstevel@tonic-gateframe of the currently executing sub. 465*0Sstevel@tonic-gate 466*0Sstevel@tonic-gateIterating over the names AV iterates over all possible pad 467*0Sstevel@tonic-gateitems. Pad slots that are SVs_PADTMP (targets/GVs/constants) end up having 468*0Sstevel@tonic-gate&PL_sv_undef "names" (see pad_alloc()). 469*0Sstevel@tonic-gate 470*0Sstevel@tonic-gateOnly my/our variable (SVs_PADMY/SVs_PADOUR) slots get valid names. 471*0Sstevel@tonic-gateThe rest are op targets/GVs/constants which are statically allocated 472*0Sstevel@tonic-gateor resolved at compile time. These don't have names by which they 473*0Sstevel@tonic-gatecan be looked up from Perl code at run time through eval"" like 474*0Sstevel@tonic-gatemy/our variables can be. Since they can't be looked up by "name" 475*0Sstevel@tonic-gatebut only by their index allocated at compile time (which is usually 476*0Sstevel@tonic-gatein PL_op->op_targ), wasting a name SV for them doesn't make sense. 477*0Sstevel@tonic-gate 478*0Sstevel@tonic-gateThe SVs in the names AV have their PV being the name of the variable. 479*0Sstevel@tonic-gateNV+1..IV inclusive is a range of cop_seq numbers for which the name is 480*0Sstevel@tonic-gatevalid. For typed lexicals name SV is SVt_PVMG and SvSTASH points at the 481*0Sstevel@tonic-gatetype. For C<our> lexicals, the type is SVt_PVGV, and GvSTASH points at the 482*0Sstevel@tonic-gatestash of the associated global (so that duplicate C<our> delarations in the 483*0Sstevel@tonic-gatesame package can be detected). SvCUR is sometimes hijacked to 484*0Sstevel@tonic-gatestore the generation number during compilation. 485*0Sstevel@tonic-gate 486*0Sstevel@tonic-gateIf SvFAKE is set on the name SV then slot in the frame AVs are 487*0Sstevel@tonic-gatea REFCNT'ed references to a lexical from "outside". In this case, 488*0Sstevel@tonic-gatethe name SV does not have a cop_seq range, since it is in scope 489*0Sstevel@tonic-gatethroughout. 490*0Sstevel@tonic-gate 491*0Sstevel@tonic-gateIf the 'name' is '&' the corresponding entry in frame AV 492*0Sstevel@tonic-gateis a CV representing a possible closure. 493*0Sstevel@tonic-gate(SvFAKE and name of '&' is not a meaningful combination currently but could 494*0Sstevel@tonic-gatebecome so if C<my sub foo {}> is implemented.) 495*0Sstevel@tonic-gate 496*0Sstevel@tonic-gate AV * CvPADLIST(CV *cv) 497*0Sstevel@tonic-gate 498*0Sstevel@tonic-gate=for hackers 499*0Sstevel@tonic-gateFound in file pad.c 500*0Sstevel@tonic-gate 501*0Sstevel@tonic-gate=item cv_clone 502*0Sstevel@tonic-gate 503*0Sstevel@tonic-gateClone a CV: make a new CV which points to the same code etc, but which 504*0Sstevel@tonic-gatehas a newly-created pad built by copying the prototype pad and capturing 505*0Sstevel@tonic-gateany outer lexicals. 506*0Sstevel@tonic-gate 507*0Sstevel@tonic-gate CV* cv_clone(CV* proto) 508*0Sstevel@tonic-gate 509*0Sstevel@tonic-gate=for hackers 510*0Sstevel@tonic-gateFound in file pad.c 511*0Sstevel@tonic-gate 512*0Sstevel@tonic-gate=item cv_dump 513*0Sstevel@tonic-gate 514*0Sstevel@tonic-gatedump the contents of a CV 515*0Sstevel@tonic-gate 516*0Sstevel@tonic-gate void cv_dump(CV *cv, char *title) 517*0Sstevel@tonic-gate 518*0Sstevel@tonic-gate=for hackers 519*0Sstevel@tonic-gateFound in file pad.c 520*0Sstevel@tonic-gate 521*0Sstevel@tonic-gate=item do_dump_pad 522*0Sstevel@tonic-gate 523*0Sstevel@tonic-gateDump the contents of a padlist 524*0Sstevel@tonic-gate 525*0Sstevel@tonic-gate void do_dump_pad(I32 level, PerlIO *file, PADLIST *padlist, int full) 526*0Sstevel@tonic-gate 527*0Sstevel@tonic-gate=for hackers 528*0Sstevel@tonic-gateFound in file pad.c 529*0Sstevel@tonic-gate 530*0Sstevel@tonic-gate=item intro_my 531*0Sstevel@tonic-gate 532*0Sstevel@tonic-gate"Introduce" my variables to visible status. 533*0Sstevel@tonic-gate 534*0Sstevel@tonic-gate U32 intro_my() 535*0Sstevel@tonic-gate 536*0Sstevel@tonic-gate=for hackers 537*0Sstevel@tonic-gateFound in file pad.c 538*0Sstevel@tonic-gate 539*0Sstevel@tonic-gate=item pad_add_anon 540*0Sstevel@tonic-gate 541*0Sstevel@tonic-gateAdd an anon code entry to the current compiling pad 542*0Sstevel@tonic-gate 543*0Sstevel@tonic-gate PADOFFSET pad_add_anon(SV* sv, OPCODE op_type) 544*0Sstevel@tonic-gate 545*0Sstevel@tonic-gate=for hackers 546*0Sstevel@tonic-gateFound in file pad.c 547*0Sstevel@tonic-gate 548*0Sstevel@tonic-gate=item pad_add_name 549*0Sstevel@tonic-gate 550*0Sstevel@tonic-gateCreate a new name in the current pad at the specified offset. 551*0Sstevel@tonic-gateIf C<typestash> is valid, the name is for a typed lexical; set the 552*0Sstevel@tonic-gatename's stash to that value. 553*0Sstevel@tonic-gateIf C<ourstash> is valid, it's an our lexical, set the name's 554*0Sstevel@tonic-gateGvSTASH to that value 555*0Sstevel@tonic-gate 556*0Sstevel@tonic-gateAlso, if the name is @.. or %.., create a new array or hash for that slot 557*0Sstevel@tonic-gate 558*0Sstevel@tonic-gateIf fake, it means we're cloning an existing entry 559*0Sstevel@tonic-gate 560*0Sstevel@tonic-gate PADOFFSET pad_add_name(char *name, HV* typestash, HV* ourstash, bool clone) 561*0Sstevel@tonic-gate 562*0Sstevel@tonic-gate=for hackers 563*0Sstevel@tonic-gateFound in file pad.c 564*0Sstevel@tonic-gate 565*0Sstevel@tonic-gate=item pad_alloc 566*0Sstevel@tonic-gate 567*0Sstevel@tonic-gateAllocate a new my or tmp pad entry. For a my, simply push a null SV onto 568*0Sstevel@tonic-gatethe end of PL_comppad, but for a tmp, scan the pad from PL_padix upwards 569*0Sstevel@tonic-gatefor a slot which has no name and and no active value. 570*0Sstevel@tonic-gate 571*0Sstevel@tonic-gate PADOFFSET pad_alloc(I32 optype, U32 tmptype) 572*0Sstevel@tonic-gate 573*0Sstevel@tonic-gate=for hackers 574*0Sstevel@tonic-gateFound in file pad.c 575*0Sstevel@tonic-gate 576*0Sstevel@tonic-gate=item pad_block_start 577*0Sstevel@tonic-gate 578*0Sstevel@tonic-gateUpdate the pad compilation state variables on entry to a new block 579*0Sstevel@tonic-gate 580*0Sstevel@tonic-gate void pad_block_start(int full) 581*0Sstevel@tonic-gate 582*0Sstevel@tonic-gate=for hackers 583*0Sstevel@tonic-gateFound in file pad.c 584*0Sstevel@tonic-gate 585*0Sstevel@tonic-gate=item pad_check_dup 586*0Sstevel@tonic-gate 587*0Sstevel@tonic-gateCheck for duplicate declarations: report any of: 588*0Sstevel@tonic-gate * a my in the current scope with the same name; 589*0Sstevel@tonic-gate * an our (anywhere in the pad) with the same name and the same stash 590*0Sstevel@tonic-gate as C<ourstash> 591*0Sstevel@tonic-gateC<is_our> indicates that the name to check is an 'our' declaration 592*0Sstevel@tonic-gate 593*0Sstevel@tonic-gate void pad_check_dup(char* name, bool is_our, HV* ourstash) 594*0Sstevel@tonic-gate 595*0Sstevel@tonic-gate=for hackers 596*0Sstevel@tonic-gateFound in file pad.c 597*0Sstevel@tonic-gate 598*0Sstevel@tonic-gate=item pad_findlex 599*0Sstevel@tonic-gate 600*0Sstevel@tonic-gateFind a named lexical anywhere in a chain of nested pads. Add fake entries 601*0Sstevel@tonic-gatein the inner pads if it's found in an outer one. innercv is the CV *inside* 602*0Sstevel@tonic-gatethe chain of outer CVs to be searched. If newoff is non-null, this is a 603*0Sstevel@tonic-gaterun-time cloning: don't add fake entries, just find the lexical and add a 604*0Sstevel@tonic-gateref to it at newoff in the current pad. 605*0Sstevel@tonic-gate 606*0Sstevel@tonic-gate PADOFFSET pad_findlex(char* name, PADOFFSET newoff, CV* innercv) 607*0Sstevel@tonic-gate 608*0Sstevel@tonic-gate=for hackers 609*0Sstevel@tonic-gateFound in file pad.c 610*0Sstevel@tonic-gate 611*0Sstevel@tonic-gate=item pad_findmy 612*0Sstevel@tonic-gate 613*0Sstevel@tonic-gateGiven a lexical name, try to find its offset, first in the current pad, 614*0Sstevel@tonic-gateor failing that, in the pads of any lexically enclosing subs (including 615*0Sstevel@tonic-gatethe complications introduced by eval). If the name is found in an outer pad, 616*0Sstevel@tonic-gatethen a fake entry is added to the current pad. 617*0Sstevel@tonic-gateReturns the offset in the current pad, or NOT_IN_PAD on failure. 618*0Sstevel@tonic-gate 619*0Sstevel@tonic-gate PADOFFSET pad_findmy(char* name) 620*0Sstevel@tonic-gate 621*0Sstevel@tonic-gate=for hackers 622*0Sstevel@tonic-gateFound in file pad.c 623*0Sstevel@tonic-gate 624*0Sstevel@tonic-gate=item pad_fixup_inner_anons 625*0Sstevel@tonic-gate 626*0Sstevel@tonic-gateFor any anon CVs in the pad, change CvOUTSIDE of that CV from 627*0Sstevel@tonic-gateold_cv to new_cv if necessary. Needed when a newly-compiled CV has to be 628*0Sstevel@tonic-gatemoved to a pre-existing CV struct. 629*0Sstevel@tonic-gate 630*0Sstevel@tonic-gate void pad_fixup_inner_anons(PADLIST *padlist, CV *old_cv, CV *new_cv) 631*0Sstevel@tonic-gate 632*0Sstevel@tonic-gate=for hackers 633*0Sstevel@tonic-gateFound in file pad.c 634*0Sstevel@tonic-gate 635*0Sstevel@tonic-gate=item pad_free 636*0Sstevel@tonic-gate 637*0Sstevel@tonic-gateFree the SV at offet po in the current pad. 638*0Sstevel@tonic-gate 639*0Sstevel@tonic-gate void pad_free(PADOFFSET po) 640*0Sstevel@tonic-gate 641*0Sstevel@tonic-gate=for hackers 642*0Sstevel@tonic-gateFound in file pad.c 643*0Sstevel@tonic-gate 644*0Sstevel@tonic-gate=item pad_leavemy 645*0Sstevel@tonic-gate 646*0Sstevel@tonic-gateCleanup at end of scope during compilation: set the max seq number for 647*0Sstevel@tonic-gatelexicals in this scope and warn of any lexicals that never got introduced. 648*0Sstevel@tonic-gate 649*0Sstevel@tonic-gate void pad_leavemy() 650*0Sstevel@tonic-gate 651*0Sstevel@tonic-gate=for hackers 652*0Sstevel@tonic-gateFound in file pad.c 653*0Sstevel@tonic-gate 654*0Sstevel@tonic-gate=item pad_new 655*0Sstevel@tonic-gate 656*0Sstevel@tonic-gateCreate a new compiling padlist, saving and updating the various global 657*0Sstevel@tonic-gatevars at the same time as creating the pad itself. The following flags 658*0Sstevel@tonic-gatecan be OR'ed together: 659*0Sstevel@tonic-gate 660*0Sstevel@tonic-gate padnew_CLONE this pad is for a cloned CV 661*0Sstevel@tonic-gate padnew_SAVE save old globals 662*0Sstevel@tonic-gate padnew_SAVESUB also save extra stuff for start of sub 663*0Sstevel@tonic-gate 664*0Sstevel@tonic-gate PADLIST* pad_new(int flags) 665*0Sstevel@tonic-gate 666*0Sstevel@tonic-gate=for hackers 667*0Sstevel@tonic-gateFound in file pad.c 668*0Sstevel@tonic-gate 669*0Sstevel@tonic-gate=item pad_push 670*0Sstevel@tonic-gate 671*0Sstevel@tonic-gatePush a new pad frame onto the padlist, unless there's already a pad at 672*0Sstevel@tonic-gatethis depth, in which case don't bother creating a new one. 673*0Sstevel@tonic-gateIf has_args is true, give the new pad an @_ in slot zero. 674*0Sstevel@tonic-gate 675*0Sstevel@tonic-gate void pad_push(PADLIST *padlist, int depth, int has_args) 676*0Sstevel@tonic-gate 677*0Sstevel@tonic-gate=for hackers 678*0Sstevel@tonic-gateFound in file pad.c 679*0Sstevel@tonic-gate 680*0Sstevel@tonic-gate=item pad_reset 681*0Sstevel@tonic-gate 682*0Sstevel@tonic-gateMark all the current temporaries for reuse 683*0Sstevel@tonic-gate 684*0Sstevel@tonic-gate void pad_reset() 685*0Sstevel@tonic-gate 686*0Sstevel@tonic-gate=for hackers 687*0Sstevel@tonic-gateFound in file pad.c 688*0Sstevel@tonic-gate 689*0Sstevel@tonic-gate=item pad_setsv 690*0Sstevel@tonic-gate 691*0Sstevel@tonic-gateSet the entry at offset po in the current pad to sv. 692*0Sstevel@tonic-gateUse the macro PAD_SETSV() rather than calling this function directly. 693*0Sstevel@tonic-gate 694*0Sstevel@tonic-gate void pad_setsv(PADOFFSET po, SV* sv) 695*0Sstevel@tonic-gate 696*0Sstevel@tonic-gate=for hackers 697*0Sstevel@tonic-gateFound in file pad.c 698*0Sstevel@tonic-gate 699*0Sstevel@tonic-gate=item pad_swipe 700*0Sstevel@tonic-gate 701*0Sstevel@tonic-gateAbandon the tmp in the current pad at offset po and replace with a 702*0Sstevel@tonic-gatenew one. 703*0Sstevel@tonic-gate 704*0Sstevel@tonic-gate void pad_swipe(PADOFFSET po, bool refadjust) 705*0Sstevel@tonic-gate 706*0Sstevel@tonic-gate=for hackers 707*0Sstevel@tonic-gateFound in file pad.c 708*0Sstevel@tonic-gate 709*0Sstevel@tonic-gate=item pad_tidy 710*0Sstevel@tonic-gate 711*0Sstevel@tonic-gateTidy up a pad after we've finished compiling it: 712*0Sstevel@tonic-gate * remove most stuff from the pads of anonsub prototypes; 713*0Sstevel@tonic-gate * give it a @_; 714*0Sstevel@tonic-gate * mark tmps as such. 715*0Sstevel@tonic-gate 716*0Sstevel@tonic-gate void pad_tidy(padtidy_type type) 717*0Sstevel@tonic-gate 718*0Sstevel@tonic-gate=for hackers 719*0Sstevel@tonic-gateFound in file pad.c 720*0Sstevel@tonic-gate 721*0Sstevel@tonic-gate=item pad_undef 722*0Sstevel@tonic-gate 723*0Sstevel@tonic-gateFree the padlist associated with a CV. 724*0Sstevel@tonic-gateIf parts of it happen to be current, we null the relevant 725*0Sstevel@tonic-gatePL_*pad* global vars so that we don't have any dangling references left. 726*0Sstevel@tonic-gateWe also repoint the CvOUTSIDE of any about-to-be-orphaned 727*0Sstevel@tonic-gateinner subs to the outer of this cv. 728*0Sstevel@tonic-gate 729*0Sstevel@tonic-gate(This function should really be called pad_free, but the name was already 730*0Sstevel@tonic-gatetaken) 731*0Sstevel@tonic-gate 732*0Sstevel@tonic-gate void pad_undef(CV* cv) 733*0Sstevel@tonic-gate 734*0Sstevel@tonic-gate=for hackers 735*0Sstevel@tonic-gateFound in file pad.c 736*0Sstevel@tonic-gate 737*0Sstevel@tonic-gate 738*0Sstevel@tonic-gate=back 739*0Sstevel@tonic-gate 740*0Sstevel@tonic-gate=head1 Stack Manipulation Macros 741*0Sstevel@tonic-gate 742*0Sstevel@tonic-gate=over 8 743*0Sstevel@tonic-gate 744*0Sstevel@tonic-gate=item djSP 745*0Sstevel@tonic-gate 746*0Sstevel@tonic-gateDeclare Just C<SP>. This is actually identical to C<dSP>, and declares 747*0Sstevel@tonic-gatea local copy of perl's stack pointer, available via the C<SP> macro. 748*0Sstevel@tonic-gateSee C<SP>. (Available for backward source code compatibility with the 749*0Sstevel@tonic-gateold (Perl 5.005) thread model.) 750*0Sstevel@tonic-gate 751*0Sstevel@tonic-gate djSP; 752*0Sstevel@tonic-gate 753*0Sstevel@tonic-gate=for hackers 754*0Sstevel@tonic-gateFound in file pp.h 755*0Sstevel@tonic-gate 756*0Sstevel@tonic-gate=item LVRET 757*0Sstevel@tonic-gate 758*0Sstevel@tonic-gateTrue if this op will be the return value of an lvalue subroutine 759*0Sstevel@tonic-gate 760*0Sstevel@tonic-gate=for hackers 761*0Sstevel@tonic-gateFound in file pp.h 762*0Sstevel@tonic-gate 763*0Sstevel@tonic-gate 764*0Sstevel@tonic-gate=back 765*0Sstevel@tonic-gate 766*0Sstevel@tonic-gate=head1 SV Manipulation Functions 767*0Sstevel@tonic-gate 768*0Sstevel@tonic-gate=over 8 769*0Sstevel@tonic-gate 770*0Sstevel@tonic-gate=item report_uninit 771*0Sstevel@tonic-gate 772*0Sstevel@tonic-gatePrint appropriate "Use of uninitialized variable" warning 773*0Sstevel@tonic-gate 774*0Sstevel@tonic-gate void report_uninit() 775*0Sstevel@tonic-gate 776*0Sstevel@tonic-gate=for hackers 777*0Sstevel@tonic-gateFound in file sv.c 778*0Sstevel@tonic-gate 779*0Sstevel@tonic-gate=item sv_add_arena 780*0Sstevel@tonic-gate 781*0Sstevel@tonic-gateGiven a chunk of memory, link it to the head of the list of arenas, 782*0Sstevel@tonic-gateand split it into a list of free SVs. 783*0Sstevel@tonic-gate 784*0Sstevel@tonic-gate void sv_add_arena(char* ptr, U32 size, U32 flags) 785*0Sstevel@tonic-gate 786*0Sstevel@tonic-gate=for hackers 787*0Sstevel@tonic-gateFound in file sv.c 788*0Sstevel@tonic-gate 789*0Sstevel@tonic-gate=item sv_clean_all 790*0Sstevel@tonic-gate 791*0Sstevel@tonic-gateDecrement the refcnt of each remaining SV, possibly triggering a 792*0Sstevel@tonic-gatecleanup. This function may have to be called multiple times to free 793*0Sstevel@tonic-gateSVs which are in complex self-referential hierarchies. 794*0Sstevel@tonic-gate 795*0Sstevel@tonic-gate I32 sv_clean_all() 796*0Sstevel@tonic-gate 797*0Sstevel@tonic-gate=for hackers 798*0Sstevel@tonic-gateFound in file sv.c 799*0Sstevel@tonic-gate 800*0Sstevel@tonic-gate=item sv_clean_objs 801*0Sstevel@tonic-gate 802*0Sstevel@tonic-gateAttempt to destroy all objects not yet freed 803*0Sstevel@tonic-gate 804*0Sstevel@tonic-gate void sv_clean_objs() 805*0Sstevel@tonic-gate 806*0Sstevel@tonic-gate=for hackers 807*0Sstevel@tonic-gateFound in file sv.c 808*0Sstevel@tonic-gate 809*0Sstevel@tonic-gate=item sv_free_arenas 810*0Sstevel@tonic-gate 811*0Sstevel@tonic-gateDeallocate the memory used by all arenas. Note that all the individual SV 812*0Sstevel@tonic-gateheads and bodies within the arenas must already have been freed. 813*0Sstevel@tonic-gate 814*0Sstevel@tonic-gate void sv_free_arenas() 815*0Sstevel@tonic-gate 816*0Sstevel@tonic-gate=for hackers 817*0Sstevel@tonic-gateFound in file sv.c 818*0Sstevel@tonic-gate 819*0Sstevel@tonic-gate 820*0Sstevel@tonic-gate=back 821*0Sstevel@tonic-gate 822*0Sstevel@tonic-gate=head1 AUTHORS 823*0Sstevel@tonic-gate 824*0Sstevel@tonic-gateThe autodocumentation system was originally added to the Perl core by 825*0Sstevel@tonic-gateBenjamin Stuhl. Documentation is by whoever was kind enough to 826*0Sstevel@tonic-gatedocument their functions. 827*0Sstevel@tonic-gate 828*0Sstevel@tonic-gate=head1 SEE ALSO 829*0Sstevel@tonic-gate 830*0Sstevel@tonic-gateperlguts(1), perlapi(1) 831*0Sstevel@tonic-gate 832