     1			/*    thdrvar.h
     2			 *
     3			 *    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 by Larry Wall and others
     4			 *
     5			 *    You may distribute under the terms of either the GNU General Public
     6			 *    License or the Artistic License, as specified in the README file.
     7			 *
     8			 */
     9			
    10			/*
    11			=head1 Global Variables
    12			*/
    13			
    14			/***********************************************/
    15			/* Global only to current thread               */
    16			/***********************************************/
    17			
    18			/* Don't forget to re-run embed.pl to propagate changes! */
    19			
    20			/* The 'T' prefix is only needed for vars that need appropriate #defines
    21			 * generated when built with or without USE_5005THREADS.  It is also used
    22			 * to generate the appropriate export list for win32.
    23			 *
    24			 * When building without USE_5005THREADS, these variables will be truly global.
    25			 * When building without USE_5005THREADS but with MULTIPLICITY, these variables
    26			 * will be global per-interpreter. */
    27			
    28			/* Important ones in the first cache line (if alignment is done right) */
    29			
    30			PERLVAR(Tstack_sp,	SV **)		/* top of the stack */
    31			#ifdef OP_IN_REGISTER
    32			PERLVAR(Topsave,	OP *)
    33			#else
    34			PERLVAR(Top,		OP *)		/* currently executing op */
    35			#endif
    36			PERLVAR(Tcurpad,	SV **)		/* active pad (lexicals+tmps) */
    37			
    38			PERLVAR(Tstack_base,	SV **)
    39			PERLVAR(Tstack_max,	SV **)
    40			
    41			PERLVAR(Tscopestack,	I32 *)		/* scopes we've ENTERed */
    42			PERLVAR(Tscopestack_ix,	I32)
    43			PERLVAR(Tscopestack_max,I32)
    44			
    45			PERLVAR(Tsavestack,	ANY *)		/* items that need to be restored
    46								   when LEAVEing scopes we've ENTERed */
    47			PERLVAR(Tsavestack_ix,	I32)
    48			PERLVAR(Tsavestack_max,	I32)
    49			
    50			PERLVAR(Ttmps_stack,	SV **)		/* mortals we've made */
    51	      ######    PERLVARI(Ttmps_ix,	I32,	-1)
    52	      ######    PERLVARI(Ttmps_floor,	I32,	-1)
    53			PERLVAR(Ttmps_max,	I32)
    54			
    55			PERLVAR(Tmarkstack,	I32 *)		/* stack_sp locations we're remembering */
    56			PERLVAR(Tmarkstack_ptr,	I32 *)
    57			PERLVAR(Tmarkstack_max,	I32 *)
    58			
    59			PERLVAR(TSv,		SV *)		/* used to hold temporary values */
    60			PERLVAR(TXpv,		XPV *)		/* used to hold temporary values */
    61			
    62			/*
    63			=for apidoc Amn|STRLEN|PL_na
    64			
    65			A convenience variable which is typically used with C<SvPV> when one
    66			doesn't care about the length of the string.  It is usually more efficient
    67			to either declare a local variable and use that instead or to use the
    68			C<SvPV_nolen> macro.
    69			
    70			=cut
    71			*/
    72			
    73			PERLVAR(Tna,		STRLEN)		/* for use in SvPV when length is
    74								   Not Applicable */
    75			
    76			/* stat stuff */
    77			PERLVAR(Tstatbuf,	Stat_t)
    78			PERLVAR(Tstatcache,	Stat_t)		/* _ */
    79			PERLVAR(Tstatgv,	GV *)
    80	      ######    PERLVARI(Tstatname,	SV *,	Nullsv)
    81			
    82			#ifdef HAS_TIMES
    83			PERLVAR(Ttimesbuf,	struct tms)
    84			#endif
    85			
    86			/* Fields used by magic variables such as $@, $/ and so on */
    87			PERLVAR(Ttainted,	bool)		/* using variables controlled by $< */
    88			PERLVAR(Tcurpm,		PMOP *)		/* what to do \ interps in REs from */
    89			PERLVAR(Tnrs,		SV *)		/* was placeholder: unused since 5.8.0 (5.7.2 patch #12027 for bug ID 20010815.012). Used to save rx->saved_copy */
    90			
    91			/*
    92			=for apidoc mn|SV*|PL_rs
    93			
    94			The input record separator - C<$/> in Perl space.
    95			
    96			=for apidoc mn|GV*|PL_last_in_gv
    97			
    98			The GV which was last used for a filehandle input operation. (C<< <FH> >>)
    99			
   100			=for apidoc mn|SV*|PL_ofs_sv
   101			
   102			The output field separator - C<$,> in Perl space.
   103			
   104			=cut
   105			*/
   106			
   107			PERLVAR(Trs,		SV *)		/* input record separator $/ */
   108			PERLVAR(Tlast_in_gv,	GV *)		/* GV used in last <FH> */
   109			PERLVAR(Tofs_sv,	SV *)		/* output field separator $, */
   110			PERLVAR(Tdefoutgv,	GV *)		/* default FH for output */
   111	      ######    PERLVARI(Tchopset,	const char *,	" \n-")	/* $: */
   112			PERLVAR(Tformtarget,	SV *)
   113			PERLVAR(Tbodytarget,	SV *)
   114			PERLVAR(Ttoptarget,	SV *)
   115			
   116			/* Stashes */
   117			PERLVAR(Tdefstash,	HV *)		/* main symbol table */
   118			PERLVAR(Tcurstash,	HV *)		/* symbol table for current package */
   119			
   120			PERLVAR(Trestartop,	OP *)		/* propagating an error from croak? */
   121	      ######    PERLVARI(Tcurcop,	COP * VOL,	&PL_compiling)
   122			PERLVAR(Tin_eval,	VOL int)	/* trap "fatal" errors? */
   123			PERLVAR(Tdelaymagic,	int)		/* ($<,$>) = ... */
   124	      ######    PERLVARI(Tdirty,	bool, FALSE)	/* in the middle of tearing things down? */
   125			PERLVAR(Tlocalizing,	int)		/* are we processing a local() list? */
   126			
   127			PERLVAR(Tcurstack,	AV *)		/* THE STACK */
   128			PERLVAR(Tcurstackinfo,	PERL_SI *)	/* current stack + context */
   129			PERLVAR(Tmainstack,	AV *)		/* the stack when nothing funny is happening */
   130			
   131			PERLVAR(Ttop_env,	JMPENV *)	/* ptr. to current sigjmp() environment */
   132			PERLVAR(Tstart_env,	JMPENV)		/* empty startup sigjmp() environment */
   133	      ######    PERLVARI(Terrors,	SV *, Nullsv)	/* outstanding queued errors */
   134			
   135			/* statics "owned" by various functions */
   136			PERLVAR(Tav_fetch_sv,	SV *)		/* unused as of change #19268 */
   137			PERLVAR(Thv_fetch_sv,	SV *)		/* unused as of change #19268 */
   138			PERLVAR(Thv_fetch_ent_mh, HE*)		/* owned by hv_fetch_ent() */
   139			
   140			PERLVAR(Tmodcount,	I32)		/* how much mod()ification in assignment? */
   141			
   142			PERLVAR(Tlastgotoprobe,	OP*)		/* from pp_ctl.c */
   143	      ######    PERLVARI(Tdumpindent,	I32, 4)		/* # of blanks per dump indentation level */
   144			
   145			/* sort stuff */
   146			PERLVAR(Tsortcop,	OP *)		/* user defined sort routine */
   147			PERLVAR(Tsortstash,	HV *)		/* which is in some package or other */
   148			PERLVAR(Tfirstgv,	GV *)		/* $a */
   149			PERLVAR(Tsecondgv,	GV *)		/* $b */
   150			PERLVAR(Tsortcxix,	I32)		/* from pp_ctl.c */
   151			
   152			/* float buffer */
   153			PERLVAR(Tefloatbuf,	char*)
   154			PERLVAR(Tefloatsize,	STRLEN)
   155			
   156			/* regex stuff */
   157			
   158			PERLVAR(Tscreamfirst,	I32 *)
   159			PERLVAR(Tscreamnext,	I32 *)
   160	      ######    PERLVARI(Tmaxscream,	I32,	-1)
   161			PERLVAR(Tlastscream,	SV *)
   162			
   163			PERLVAR(Tregdummy,	regnode)	/* from regcomp.c */
   164			PERLVAR(Tregprecomp,	char *)		/* uncompiled string. */
   165			PERLVAR(Tregnpar,	I32)		/* () count. */
   166			PERLVAR(Tregsize,	I32)		/* Code size. */
   167			PERLVAR(Tcolorset,	int)		/* from regcomp.c */
   168			PERLVARA(Tcolors,6,	char *)		/* from regcomp.c */
   169			PERLVAR(Treginput,	char *)		/* String-input pointer. */
   170			PERLVAR(Tregbol,	char *)		/* Beginning of input, for ^ check. */
   171			PERLVAR(Tregeol,	char *)		/* End of input, for $ check. */
   172			PERLVAR(Tregstartp,	I32 *)		/* Pointer to startp array. */
   173			PERLVAR(Tregendp,	I32 *)		/* Ditto for endp. */
   174			PERLVAR(Treglastparen,	U32 *)		/* Similarly for lastparen. */
   175			PERLVAR(Treglastcloseparen, U32 *)	/* Similarly for lastcloseparen. */
   176			PERLVAR(Tregtill,	char *)		/* How far we are required to go. */
   177			PERLVAR(Treg_start_tmp,	char **)	/* from regexec.c */
   178			PERLVAR(Treg_start_tmpl,U32)		/* from regexec.c */
   179			PERLVAR(Tregdata,	struct reg_data *)
   180								/* from regexec.c renamed was data */
   181			PERLVAR(Tbostr,		char *)		/* from regexec.c */
   182			PERLVAR(Treg_flags,	U32)		/* from regexec.c */
   183			PERLVAR(Treg_eval_set,	I32)		/* from regexec.c */
   184			PERLVAR(Tregnarrate,	I32)		/* from regexec.c */
   185			PERLVAR(Tregprogram,	regnode *)	/* from regexec.c */
   186	      ######    PERLVARI(Tregindent,	int,	    0)	/* from regexec.c */
   187			PERLVAR(Tregcc,		CURCUR *)	/* from regexec.c */
   188			PERLVAR(Treg_call_cc,	struct re_cc_state *)	/* from regexec.c */
   189			PERLVAR(Treg_re,	regexp *)	/* from regexec.c */
   190			PERLVAR(Treg_ganch,	char *)		/* position of \G */
   191			PERLVAR(Treg_sv,	SV *)		/* what we match against */
   192			PERLVAR(Treg_magic,	MAGIC *)	/* pos-magic of what we match */
   193			PERLVAR(Treg_oldpos,	I32)		/* old pos of what we match */
   194	      ######    PERLVARI(Treg_oldcurpm,	PMOP*, NULL)	/* curpm before match */
   195	      ######    PERLVARI(Treg_curpm,	PMOP*, NULL)	/* curpm during match */
   196			PERLVAR(Treg_oldsaved,	char*)		/* old saved substr during match */
   197			PERLVAR(Treg_oldsavedlen, STRLEN)	/* old length of saved substr during match */
   198			PERLVAR(Treg_maxiter,	I32)		/* max wait until caching pos */
   199			PERLVAR(Treg_leftiter,	I32)		/* wait until caching pos */
   200	      ######    PERLVARI(Treg_poscache, char *, Nullch)	/* cache of pos of WHILEM */
   201			PERLVAR(Treg_poscache_size, STRLEN)	/* size of pos cache of WHILEM */
   202			
   203	      ######    PERLVARI(Tpeepp,	peep_t, MEMBER_TO_FPTR(Perl_peep))
   204								/* Pointer to peephole optimizer */
   205	      ######    PERLVARI(Tregcompp,	regcomp_t, MEMBER_TO_FPTR(Perl_pregcomp))
   206								/* Pointer to REx compiler */
   207	      ######    PERLVARI(Tregexecp,	regexec_t, MEMBER_TO_FPTR(Perl_regexec_flags))
   208								/* Pointer to REx executer */
   209	      ######    PERLVARI(Tregint_start,	re_intuit_start_t, MEMBER_TO_FPTR(Perl_re_intuit_start))
   210								/* Pointer to optimized REx executer */
   211	      ######    PERLVARI(Tregint_string,re_intuit_string_t, MEMBER_TO_FPTR(Perl_re_intuit_string))
   212								/* Pointer to optimized REx string */
   213	      ######    PERLVARI(Tregfree,	regfree_t, MEMBER_TO_FPTR(Perl_pregfree))
   214								/* Pointer to REx free()er */
   215			
   216	      ######    PERLVARI(Treginterp_cnt,int,	    0)	/* Whether "Regexp" was interpolated. */
   217	      ######    PERLVARI(Treg_starttry,	char *,	    0)	/* -Dr: where regtry was called. */
   218	      ######    PERLVARI(Twatchaddr,	char **,    0)
   219			PERLVAR(Twatchok,	char *)
   220			
   221			/* Note that the variables below are all explicitly referenced in the code
   222			 * as thr->whatever and therefore don't need the 'T' prefix. */
   223			
   224			PERLVAR(Treg_match_utf8,	bool)		/* was what we matched against utf8 */
   225			
