xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/pod/perlintern.pod (revision 0:68f95e015346)
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