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