summaryrefslogtreecommitdiff
path: root/pod/perlintern.pod
diff options
context:
space:
mode:
authorNick Ing-Simmons <nik@tiuk.ti.com>2002-02-08 09:19:29 +0000
committerNick Ing-Simmons <nik@tiuk.ti.com>2002-02-08 09:19:29 +0000
commita4f1a0295dfc0733a51ca0623d486d082d04773a (patch)
treefeb03b9f0f4459838bfac459954f222d95811d4d /pod/perlintern.pod
parenta091d647ce76165cfbaaa70cd4c206bdc3c5401f (diff)
downloadperl-a4f1a0295dfc0733a51ca0623d486d082d04773a.tar.gz
Extract something from yesterdays effort - convert my mail on pad
data structures (incoporating Sarathy's corrections/clarifications) into POD in cv.h which gets autodoc.pl'ed into pod/perlintern.pod. p4raw-id: //depot/perlio@14595
Diffstat (limited to 'pod/perlintern.pod')
-rw-r--r--pod/perlintern.pod171
1 files changed, 134 insertions, 37 deletions
diff --git a/pod/perlintern.pod b/pod/perlintern.pod
index 544b87887f..c9cb5e7698 100644
--- a/pod/perlintern.pod
+++ b/pod/perlintern.pod
@@ -10,41 +10,10 @@ Perl interpreter that are documented using Perl's internal documentation
format but are not marked as part of the Perl API. In other words,
B<they are not for use in extensions>!
-=over 8
-
-=item djSP
-
-Declare Just C<SP>. This is actually identical to C<dSP>, and declares
-a local copy of perl's stack pointer, available via the C<SP> macro.
-See C<SP>. (Available for backward source code compatibility with the
-old (Perl 5.005) thread model.)
- djSP;
-
-=for hackers
-Found in file pp.h
-
-=item is_gv_magical
-
-Returns C<TRUE> if given the name of a magical GV.
-
-Currently only useful internally when determining if a GV should be
-created even in rvalue contexts.
-
-C<flags> is not used at present but available for future extension to
-allow selecting particular classes of magical variable.
-
- bool is_gv_magical(char *name, STRLEN len, U32 flags)
-
-=for hackers
-Found in file gv.c
-
-=item LVRET
-
-True if this op will be the return value of an lvalue subroutine
+=head1 Global Variables
-=for hackers
-Found in file pp.h
+=over 8
=item PL_DBsingle
@@ -118,14 +87,34 @@ The input record separator - C<$/> in Perl space.
=for hackers
Found in file thrdvar.h
-=item report_uninit
-Print appropriate "Use of uninitialized variable" warning
+=back
- void report_uninit()
+=head1 GV Functions
+
+=over 8
+
+=item is_gv_magical
+
+Returns C<TRUE> if given the name of a magical GV.
+
+Currently only useful internally when determining if a GV should be
+created even in rvalue contexts.
+
+C<flags> is not used at present but available for future extension to
+allow selecting particular classes of magical variable.
+
+ bool is_gv_magical(char *name, STRLEN len, U32 flags)
=for hackers
-Found in file sv.c
+Found in file gv.c
+
+
+=back
+
+=head1 IO Functions
+
+=over 8
=item start_glob
@@ -139,6 +128,113 @@ Moving it away shrinks pp_hot.c; shrinking pp_hot.c helps speed perl up.
=for hackers
Found in file doio.c
+
+=back
+
+=head1 Pad Data Structures
+
+=over 8
+
+=item CvPADLIST
+
+CV's can have CvPADLIST(cv) set to point to an AV.
+
+For these purposes "forms" are a kind-of CV, eval""s are too (except they're
+not callable at will and are always thrown away after the eval"" is done
+executing).
+
+XSUBs don't have CvPADLIST set - dXSTARG fetches values from PL_curpad,
+but that is really the callers pad (a slot of which is allocated by
+every entersub).
+
+The CvPADLIST AV has does not have AvREAL set, so REFCNT of component items
+is managed "manual" (mostly in op.c) rather than normal av.c rules.
+The items in the AV are not SVs as for a normal AV, but other AVs:
+
+0'th Entry of the CvPADLIST is an AV which represents the "names" or rather
+the "static type information" for lexicals.
+
+The CvDEPTH'th entry of CvPADLIST AV is an AV which is the stack frame at that
+depth of recursion into the CV.
+The 0'th slot of a frame AV is an AV which is @_.
+other entries are storage for variables and op targets.
+
+During compilation:
+C<PL_comppad_name> is set the the the names AV.
+C<PL_comppad> is set the the frame AV for the frame CvDEPTH == 1.
+C<PL_curpad> is set the body of the frame AV (i.e. AvARRAY(PL_comppad)).
+
+Itterating over the names AV itterates over all possible pad
+items. Pad slots that are SVs_PADTMP (targets/GVs/constants) end up having
+&PL_sv_undef "names" (see pad_alloc()).
+
+Only my/our variable (SVs_PADMY/SVs_PADOUR) slots get valid names.
+The rest are op targets/GVs/constants which are statically allocated
+or resolved at compile time. These don't have names by which they
+can be looked up from Perl code at run time through eval"" like
+my/our variables can be. Since they can't be looked up by "name"
+but only by their index allocated at compile time (which is usually
+in PL_op->op_targ), wasting a name SV for them doesn't make sense.
+
+The SVs in the names AV have their PV being the name of the variable.
+NV+1..IV inclusive is a range of cop_seq numbers for which the name is valid.
+For typed lexicals name SV is SVt_PVMG and SvSTASH points at the type.
+
+If SvFAKE is set on the name SV then slot in the frame AVs are
+a REFCNT'ed references to a lexical from "outside".
+
+If the 'name' is '&' the the corresponding entry in frame AV
+is a CV representing a possible closure.
+(SvFAKE and name of '&' is not a meaningful combination currently but could
+become so if C<my sub foo {}> is implemented.)
+
+ AV * CvPADLIST(CV *cv)
+
+=for hackers
+Found in file cv.h
+
+
+=back
+
+=head1 Stack Manipulation Macros
+
+=over 8
+
+=item djSP
+
+Declare Just C<SP>. This is actually identical to C<dSP>, and declares
+a local copy of perl's stack pointer, available via the C<SP> macro.
+See C<SP>. (Available for backward source code compatibility with the
+old (Perl 5.005) thread model.)
+
+ djSP;
+
+=for hackers
+Found in file pp.h
+
+=item LVRET
+
+True if this op will be the return value of an lvalue subroutine
+
+=for hackers
+Found in file pp.h
+
+
+=back
+
+=head1 SV Manipulation Functions
+
+=over 8
+
+=item report_uninit
+
+Print appropriate "Use of uninitialized variable" warning
+
+ void report_uninit()
+
+=for hackers
+Found in file sv.c
+
=item sv_add_arena
Given a chunk of memory, link it to the head of the list of arenas,
@@ -179,6 +275,7 @@ heads and bodies within the arenas must already have been freed.
=for hackers
Found in file sv.c
+
=back
=head1 AUTHORS