/* intrpvar.h
*
* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- * 2006, 2007
- * by Larry Wall and others
+ * 2006, 2007, 2008 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
PERLVAR(Istack_max, SV **)
PERLVAR(Iscopestack, I32 *) /* scopes we've ENTERed */
+/* name of the scopes we've ENTERed. Only used with -DDEBUGGING, but needs to be
+ present always, as -DDEUBGGING must be binary compatible with non. */
+PERLVARI(Iscopestack_name, const char * *, NULL)
PERLVAR(Iscopestack_ix, I32)
PERLVAR(Iscopestack_max,I32)
The GV which was last used for a filehandle input operation. (C<< <FH> >>)
-=for apidoc mn|SV*|PL_ofs_sv
+=for apidoc mn|GV*|PL_ofsgv
-The output field separator - C<$,> in Perl space.
+The glob containing the output field separator - C<*,> in Perl space.
=cut
*/
PERLVAR(Irs, SV *) /* input record separator $/ */
PERLVAR(Ilast_in_gv, GV *) /* GV used in last <FH> */
-PERLVAR(Iofs_sv, SV *) /* output field separator $, */
+PERLVAR(Iofsgv, GV *) /* GV of output field separator *, */
PERLVAR(Idefoutgv, GV *) /* default FH for output */
PERLVARI(Ichopset, const char *, " \n-") /* $: */
PERLVAR(Iformtarget, SV *)
PERLVAR(Icurstash, HV *) /* symbol table for current package */
PERLVAR(Irestartop, OP *) /* propagating an error from croak? */
-PERLVAR(Icurcop, COP * VOL)
+PERLVAR(Irestartjmpenv, JMPENV *) /* target frame for longjmp in die */
+PERLVAR(Icurcop, COP *)
PERLVAR(Icurstack, AV *) /* THE STACK */
PERLVAR(Icurstackinfo, PERL_SI *) /* current stack + context */
PERLVAR(Imainstack, AV *) /* the stack when nothing funny is
PERLVARI(Ipeepp, peep_t, MEMBER_TO_FPTR(Perl_peep))
/* Pointer to peephole optimizer */
+/*
+=for apidoc Amn|Perl_ophook_t|PL_opfreehook
+
+When non-C<NULL>, the function pointed by this variable will be called each time an OP is freed with the corresponding OP as the argument.
+This allows extensions to free any extra attribute they have locally attached to an OP.
+It is also assured to first fire for the parent OP and then for its kids.
+
+When you replace this variable, it is considered a good practice to store the possibly previously installed hook and that you recall it inside your own.
+
+=cut
+*/
+
+PERLVARI(Iopfreehook, Perl_ophook_t, 0) /* op_free() hook */
+
PERLVARI(Imaxscream, I32, -1)
PERLVARI(Ireginterp_cnt,I32, 0) /* Whether "Regexp" was interpolated. */
PERLVARI(Iwatchaddr, char **, 0)
PERLVAR(Icolorset, bool) /* from regcomp.c */
PERLVARI(Idirty, bool, FALSE) /* in the middle of tearing things
down? */
-PERLVAR(Iin_eval, VOL U8) /* trap "fatal" errors? */
+PERLVAR(Iin_eval, U8) /* trap "fatal" errors? */
PERLVAR(Itainted, bool) /* using variables controlled by $< */
/* This value may be set when embedding for full cleanup */
/* 0=none, 1=full, 2=full with checks */
-PERLVARI(Iperl_destruct_level, U8, 0)
+/* mod_perl is special, and also assigns a meaning -1 */
+PERLVARI(Iperl_destruct_level, signed char, 0)
PERLVAR(Iperldb, U32)
PERLVARI(Isplitstr, const char *, " ")
PERLVAR(Iminus_c, bool)
-PERLVAR(Ipreprocess, bool)
PERLVAR(Iminus_n, bool)
PERLVAR(Iminus_p, bool)
PERLVAR(Iminus_l, bool)
PERLVAR(Iminus_a, bool)
PERLVAR(Iminus_F, bool)
PERLVAR(Idoswitches, bool)
-
PERLVAR(Iminus_E, bool)
/*
PERLVAR(Isrand_called, bool)
/* Part of internal state, but makes the 16th 1 byte variable in a row. */
PERLVAR(Itainting, bool) /* doing taint checks */
+PERLVARI(Iin_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */
PERLVAR(Iinplace, char *)
PERLVAR(Ie_script, SV *)
PERLVAR(Ipsig_pend, int *) /* per-signal "count" of pending */
/* shortcuts to various I/O objects */
-PERLVAR(Istdingv, GV *)
-PERLVAR(Istderrgv, GV *)
+PERLVAR(Istdingv, GV *) /* *STDIN */
+PERLVAR(Istderrgv, GV *) /* *STDERR */
PERLVAR(Idefgv, GV *)
-PERLVAR(Iargvgv, GV *)
-PERLVAR(Iargvoutgv, GV *)
+PERLVAR(Iargvgv, GV *) /* *ARGV */
+PERLVAR(Iargvoutgv, GV *) /* *ARGVOUT */
PERLVAR(Iargvout_stack, AV *)
/* shortcuts to regexp stuff */
-PERLVAR(Ireplgv, GV *)
+PERLVAR(Ireplgv, GV *) /* *^R */
/* shortcuts to misc objects */
-PERLVAR(Ierrgv, GV *)
+PERLVAR(Ierrgv, GV *) /* *@ */
/* shortcuts to debugging objects */
-PERLVAR(IDBgv, GV *)
-PERLVAR(IDBline, GV *)
+PERLVAR(IDBgv, GV *) /* *DB::DB */
+PERLVAR(IDBline, GV *) /* *DB::line */
/*
=for apidoc mn|GV *|PL_DBsub
=cut
*/
-PERLVAR(IDBsub, GV *)
-PERLVAR(IDBsingle, SV *)
-PERLVAR(IDBtrace, SV *)
-PERLVAR(IDBsignal, SV *)
+PERLVAR(IDBsub, GV *) /* *DB::sub */
+PERLVAR(IDBsingle, SV *) /* $DB::single */
+PERLVAR(IDBtrace, SV *) /* $DB::trace */
+PERLVAR(IDBsignal, SV *) /* $DB::signal */
PERLVAR(Idbargs, AV *) /* args to call listed by caller function */
/* symbol tables */
PERLVAR(Ifilemode, int) /* so nextargv() can preserve mode */
PERLVAR(Ilastfd, int) /* what to preserve mode on */
PERLVAR(Ioldname, char *) /* what to preserve mode on */
-PERLVAR(IArgv, char **) /* stuff to free from do_aexec, vfork safe */
+PERLVAR(IArgv, const char **) /* stuff to free from do_aexec, vfork safe */
PERLVAR(ICmd, char *) /* stuff to free from do_aexec, vfork safe */
/* Elements in this array have ';' appended and are injected as a single line
into the tokeniser. You can't put any (literal) newlines into any program
PERLVAR(Ipadix, I32) /* max used index in current "register" pad */
PERLVAR(Ipadix_floor, I32) /* how low may inner block reset padix */
-PERLVAR(Ipad_reset_pending, I32) /* reset pad on next attempted alloc */
PERLVAR(Ihints, U32) /* pragma-tic compile-time flags */
PERLVAR(Idebug, VOL U32) /* flags given to -D switch */
+/* Perl_Ibreakable_sub_generation_ptr was too long for VMS, hence "gen" */
+PERLVARI(Ibreakable_sub_gen, U32, 0)
+
PERLVARI(Iamagic_generation, long, 0)
#ifdef USE_LOCALE_COLLATE
/* utf8 character classes */
PERLVAR(Iutf8_alnum, SV *)
-PERLVAR(Iutf8_alnumc, SV *)
PERLVAR(Iutf8_ascii, SV *)
PERLVAR(Iutf8_alpha, SV *)
PERLVAR(Iutf8_space, SV *)
+PERLVAR(Iutf8_perl_space, SV *)
+PERLVAR(Iutf8_perl_word, SV *)
+PERLVAR(Iutf8_posix_digit, SV *)
PERLVAR(Iutf8_cntrl, SV *)
PERLVAR(Iutf8_graph, SV *)
PERLVAR(Iutf8_digit, SV *)
PERLVAR(Iutf8_punct, SV *)
PERLVAR(Iutf8_xdigit, SV *)
PERLVAR(Iutf8_mark, SV *)
+PERLVAR(Iutf8_X_begin, SV *)
+PERLVAR(Iutf8_X_extend, SV *)
+PERLVAR(Iutf8_X_prepend, SV *)
+PERLVAR(Iutf8_X_non_hangul, SV *)
+PERLVAR(Iutf8_X_L, SV *)
+PERLVAR(Iutf8_X_LV, SV *)
+PERLVAR(Iutf8_X_LVT, SV *)
+PERLVAR(Iutf8_X_T, SV *)
+PERLVAR(Iutf8_X_V, SV *)
+PERLVAR(Iutf8_X_LV_LVT_V, SV *)
PERLVAR(Iutf8_toupper, SV *)
PERLVAR(Iutf8_totitle, SV *)
PERLVAR(Iutf8_tolower, SV *)
PERLVARI(Icryptseen, bool, FALSE) /* has fast crypt() been initialized? */
#endif
+PERLVAR(Ipad_reset_pending, bool) /* reset pad on next attempted alloc */
+
PERLVARI(Iglob_index, int, 0)
PERLVAR(Iparser, yy_parser *) /* current parser state */
-PERLVAR(Ibitcount, char *)
-
+/* Array of signal handlers, indexed by signal number, through which the C
+ signal handler dispatches. */
PERLVAR(Ipsig_ptr, SV**)
-PERLVAR(Ipsig_name, SV**)
+/* Array of names of signals, indexed by signal number, for (re)use as the first
+ argument to a signal handler. Only one block of memory is allocated for
+ both psig_name and psig_ptr. */
+PERLVAR(Ipsig_name, SV**)
#if defined(PERL_IMPLICIT_SYS)
PERLVAR(IMem, struct IPerlMem*)
#endif
#if defined(USE_ITHREADS)
-PERLVAR(Iregex_pad, SV**) /* All regex objects */
-PERLVAR(Iregex_padav, AV*) /* All regex objects */
-
+PERLVAR(Iregex_pad, SV**) /* Shortcut into the array of
+ regex_padav */
+PERLVAR(Iregex_padav, AV*) /* All regex objects, indexed via the
+ values in op_pmoffset of pmop.
+ Entry 0 is an SV whose PV is a
+ "packed" list of IVs listing
+ the now-free slots in the array */
#endif
#ifdef USE_REENTRANT_API
PERLVARI(Iclocktick, long, 0) /* this many times() ticks in a second */
-PERLVARI(Iin_load_module, int, 0) /* to prevent recursions in PerlIO_find_layer */
+/* Space for an int */
PERLVAR(Iunicode, U32) /* Unicode features: $ENV{PERL_UNICODE} or -C */
PERLVARI(Ithreadhook, thrhook_proc_t, MEMBER_TO_FPTR(Perl_nothreadhook))
-PERLVARI(Ihash_seed, UV, 0) /* Hash initializer */
+PERLVARI(Isignalhook, despatch_signals_proc_t, MEMBER_TO_FPTR(Perl_despatch_signals))
-PERLVAR(IDBassertion, SV *)
+PERLVARI(Ihash_seed, UV, 0) /* Hash initializer */
PERLVARI(Irehash_seed, UV, 0) /* 582 hash initializer */
PERLVARI(Islab_count, U32, 0) /* Size of the array */
#endif
+/* Can shared object be destroyed */
+PERLVARI(Idestroyhook, destroyable_proc_t, MEMBER_TO_FPTR(Perl_sv_destroyable))
+
+#ifdef DEBUG_LEAKING_SCALARS
+PERLVARI(Isv_serial, U32, 0) /* SV serial number, used in sv.c */
+#endif
+
+/* Register of known Method Resolution Orders.
+ What this actually points to is an implementation detail (it may change to
+ a structure incorporating a reference count - use mro_get_from_name to
+ retrieve a C<struct mro_alg *> */
+PERLVAR(Iregistered_mros, HV *)
+
/* If you are adding a U8 or U16, check to see if there are 'Space' comments
* above on where there are gaps which currently will be structure padding. */