/* (Doing namespace management portably in C is really gross.) */
-/* Put interpreter-specific symbols into a struct? */
+/*
+ The following combinations of MULTIPLICITY, USE_THREADS, PERL_OBJECT
+ and PERL_IMPLICIT_CONTEXT are supported:
+ 1) none
+ 2) MULTIPLICITY # supported for compatibility
+ 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
+ 4) USE_THREADS && PERL_IMPLICIT_CONTEXT
+ 5) MULTIPLICITY && USE_THREADS && PERL_IMPLICIT_CONTEXT
+ 6) PERL_OBJECT && PERL_IMPLICIT_CONTEXT
-#ifdef MULTIPLICITY
+ All other combinations of these flags are errors.
-#ifndef USE_THREADS
-/* If we do not have threads then per-thread vars are per-interpreter */
-
-#ifdef PERL_IMPLICIT_CONTEXT
-
-/* everything has an implicit context pointer */
-
-#define PL_Sv (my_perl->TSv)
-#define PL_Xpv (my_perl->TXpv)
-#define PL_av_fetch_sv (my_perl->Tav_fetch_sv)
-#define PL_bodytarget (my_perl->Tbodytarget)
-#define PL_bostr (my_perl->Tbostr)
-#define PL_chopset (my_perl->Tchopset)
-#define PL_colors (my_perl->Tcolors)
-#define PL_colorset (my_perl->Tcolorset)
-#define PL_curcop (my_perl->Tcurcop)
-#define PL_curpad (my_perl->Tcurpad)
-#define PL_curpm (my_perl->Tcurpm)
-#define PL_curstack (my_perl->Tcurstack)
-#define PL_curstackinfo (my_perl->Tcurstackinfo)
-#define PL_curstash (my_perl->Tcurstash)
-#define PL_defoutgv (my_perl->Tdefoutgv)
-#define PL_defstash (my_perl->Tdefstash)
-#define PL_delaymagic (my_perl->Tdelaymagic)
-#define PL_dirty (my_perl->Tdirty)
-#define PL_dumpindent (my_perl->Tdumpindent)
-#define PL_extralen (my_perl->Textralen)
-#define PL_firstgv (my_perl->Tfirstgv)
-#define PL_formtarget (my_perl->Tformtarget)
-#define PL_hv_fetch_ent_mh (my_perl->Thv_fetch_ent_mh)
-#define PL_hv_fetch_sv (my_perl->Thv_fetch_sv)
-#define PL_in_eval (my_perl->Tin_eval)
-#define PL_last_in_gv (my_perl->Tlast_in_gv)
-#define PL_lastgotoprobe (my_perl->Tlastgotoprobe)
-#define PL_lastscream (my_perl->Tlastscream)
-#define PL_localizing (my_perl->Tlocalizing)
-#define PL_mainstack (my_perl->Tmainstack)
-#define PL_markstack (my_perl->Tmarkstack)
-#define PL_markstack_max (my_perl->Tmarkstack_max)
-#define PL_markstack_ptr (my_perl->Tmarkstack_ptr)
-#define PL_maxscream (my_perl->Tmaxscream)
-#define PL_modcount (my_perl->Tmodcount)
-#define PL_na (my_perl->Tna)
-#define PL_nrs (my_perl->Tnrs)
-#define PL_ofs (my_perl->Tofs)
-#define PL_ofslen (my_perl->Tofslen)
-#define PL_op (my_perl->Top)
-#define PL_opsave (my_perl->Topsave)
-#define PL_protect (my_perl->Tprotect)
-#define PL_reg_call_cc (my_perl->Treg_call_cc)
-#define PL_reg_curpm (my_perl->Treg_curpm)
-#define PL_reg_eval_set (my_perl->Treg_eval_set)
-#define PL_reg_flags (my_perl->Treg_flags)
-#define PL_reg_ganch (my_perl->Treg_ganch)
-#define PL_reg_leftiter (my_perl->Treg_leftiter)
-#define PL_reg_magic (my_perl->Treg_magic)
-#define PL_reg_maxiter (my_perl->Treg_maxiter)
-#define PL_reg_oldcurpm (my_perl->Treg_oldcurpm)
-#define PL_reg_oldpos (my_perl->Treg_oldpos)
-#define PL_reg_oldsaved (my_perl->Treg_oldsaved)
-#define PL_reg_oldsavedlen (my_perl->Treg_oldsavedlen)
-#define PL_reg_poscache (my_perl->Treg_poscache)
-#define PL_reg_poscache_size (my_perl->Treg_poscache_size)
-#define PL_reg_re (my_perl->Treg_re)
-#define PL_reg_start_tmp (my_perl->Treg_start_tmp)
-#define PL_reg_start_tmpl (my_perl->Treg_start_tmpl)
-#define PL_reg_starttry (my_perl->Treg_starttry)
-#define PL_reg_sv (my_perl->Treg_sv)
-#define PL_reg_whilem_seen (my_perl->Treg_whilem_seen)
-#define PL_regbol (my_perl->Tregbol)
-#define PL_regcc (my_perl->Tregcc)
-#define PL_regcode (my_perl->Tregcode)
-#define PL_regcomp_parse (my_perl->Tregcomp_parse)
-#define PL_regcomp_rx (my_perl->Tregcomp_rx)
-#define PL_regcompp (my_perl->Tregcompp)
-#define PL_regdata (my_perl->Tregdata)
-#define PL_regdummy (my_perl->Tregdummy)
-#define PL_regendp (my_perl->Tregendp)
-#define PL_regeol (my_perl->Tregeol)
-#define PL_regexecp (my_perl->Tregexecp)
-#define PL_regflags (my_perl->Tregflags)
-#define PL_regfree (my_perl->Tregfree)
-#define PL_regindent (my_perl->Tregindent)
-#define PL_reginput (my_perl->Treginput)
-#define PL_regint_start (my_perl->Tregint_start)
-#define PL_regint_string (my_perl->Tregint_string)
-#define PL_reginterp_cnt (my_perl->Treginterp_cnt)
-#define PL_reglastparen (my_perl->Treglastparen)
-#define PL_regnarrate (my_perl->Tregnarrate)
-#define PL_regnaughty (my_perl->Tregnaughty)
-#define PL_regnpar (my_perl->Tregnpar)
-#define PL_regprecomp (my_perl->Tregprecomp)
-#define PL_regprev (my_perl->Tregprev)
-#define PL_regprogram (my_perl->Tregprogram)
-#define PL_regsawback (my_perl->Tregsawback)
-#define PL_regseen (my_perl->Tregseen)
-#define PL_regsize (my_perl->Tregsize)
-#define PL_regstartp (my_perl->Tregstartp)
-#define PL_regtill (my_perl->Tregtill)
-#define PL_regxend (my_perl->Tregxend)
-#define PL_restartop (my_perl->Trestartop)
-#define PL_retstack (my_perl->Tretstack)
-#define PL_retstack_ix (my_perl->Tretstack_ix)
-#define PL_retstack_max (my_perl->Tretstack_max)
-#define PL_rs (my_perl->Trs)
-#define PL_savestack (my_perl->Tsavestack)
-#define PL_savestack_ix (my_perl->Tsavestack_ix)
-#define PL_savestack_max (my_perl->Tsavestack_max)
-#define PL_scopestack (my_perl->Tscopestack)
-#define PL_scopestack_ix (my_perl->Tscopestack_ix)
-#define PL_scopestack_max (my_perl->Tscopestack_max)
-#define PL_screamfirst (my_perl->Tscreamfirst)
-#define PL_screamnext (my_perl->Tscreamnext)
-#define PL_secondgv (my_perl->Tsecondgv)
-#define PL_seen_evals (my_perl->Tseen_evals)
-#define PL_seen_zerolen (my_perl->Tseen_zerolen)
-#define PL_sortcop (my_perl->Tsortcop)
-#define PL_sortcxix (my_perl->Tsortcxix)
-#define PL_sortstash (my_perl->Tsortstash)
-#define PL_stack_base (my_perl->Tstack_base)
-#define PL_stack_max (my_perl->Tstack_max)
-#define PL_stack_sp (my_perl->Tstack_sp)
-#define PL_start_env (my_perl->Tstart_env)
-#define PL_statbuf (my_perl->Tstatbuf)
-#define PL_statcache (my_perl->Tstatcache)
-#define PL_statgv (my_perl->Tstatgv)
-#define PL_statname (my_perl->Tstatname)
-#define PL_tainted (my_perl->Ttainted)
-#define PL_timesbuf (my_perl->Ttimesbuf)
-#define PL_tmps_floor (my_perl->Ttmps_floor)
-#define PL_tmps_ix (my_perl->Ttmps_ix)
-#define PL_tmps_max (my_perl->Ttmps_max)
-#define PL_tmps_stack (my_perl->Ttmps_stack)
-#define PL_top_env (my_perl->Ttop_env)
-#define PL_toptarget (my_perl->Ttoptarget)
-#define PL_watchaddr (my_perl->Twatchaddr)
-#define PL_watchok (my_perl->Twatchok)
+ #3, #4, #5, and #6 are supported directly, while #2 is a special
+ case of #3 (supported by redefining vTHX appropriately).
+*/
-#else /* !PERL_IMPLICIT_CONTEXT */
+#if defined(MULTIPLICITY)
+/* cases 2, 3 and 5 above */
-/* traditional MULTIPLICITY (intepreter is in a global) */
+# if defined(PERL_IMPLICIT_CONTEXT)
+# define vTHX aTHX
+# else
+# define vTHX PERL_GET_INTERP
+# endif
-#define PL_Sv (PERL_GET_INTERP->TSv)
-#define PL_Xpv (PERL_GET_INTERP->TXpv)
-#define PL_av_fetch_sv (PERL_GET_INTERP->Tav_fetch_sv)
-#define PL_bodytarget (PERL_GET_INTERP->Tbodytarget)
-#define PL_bostr (PERL_GET_INTERP->Tbostr)
-#define PL_chopset (PERL_GET_INTERP->Tchopset)
-#define PL_colors (PERL_GET_INTERP->Tcolors)
-#define PL_colorset (PERL_GET_INTERP->Tcolorset)
-#define PL_curcop (PERL_GET_INTERP->Tcurcop)
-#define PL_curpad (PERL_GET_INTERP->Tcurpad)
-#define PL_curpm (PERL_GET_INTERP->Tcurpm)
-#define PL_curstack (PERL_GET_INTERP->Tcurstack)
-#define PL_curstackinfo (PERL_GET_INTERP->Tcurstackinfo)
-#define PL_curstash (PERL_GET_INTERP->Tcurstash)
-#define PL_defoutgv (PERL_GET_INTERP->Tdefoutgv)
-#define PL_defstash (PERL_GET_INTERP->Tdefstash)
-#define PL_delaymagic (PERL_GET_INTERP->Tdelaymagic)
-#define PL_dirty (PERL_GET_INTERP->Tdirty)
-#define PL_dumpindent (PERL_GET_INTERP->Tdumpindent)
-#define PL_extralen (PERL_GET_INTERP->Textralen)
-#define PL_firstgv (PERL_GET_INTERP->Tfirstgv)
-#define PL_formtarget (PERL_GET_INTERP->Tformtarget)
-#define PL_hv_fetch_ent_mh (PERL_GET_INTERP->Thv_fetch_ent_mh)
-#define PL_hv_fetch_sv (PERL_GET_INTERP->Thv_fetch_sv)
-#define PL_in_eval (PERL_GET_INTERP->Tin_eval)
-#define PL_last_in_gv (PERL_GET_INTERP->Tlast_in_gv)
-#define PL_lastgotoprobe (PERL_GET_INTERP->Tlastgotoprobe)
-#define PL_lastscream (PERL_GET_INTERP->Tlastscream)
-#define PL_localizing (PERL_GET_INTERP->Tlocalizing)
-#define PL_mainstack (PERL_GET_INTERP->Tmainstack)
-#define PL_markstack (PERL_GET_INTERP->Tmarkstack)
-#define PL_markstack_max (PERL_GET_INTERP->Tmarkstack_max)
-#define PL_markstack_ptr (PERL_GET_INTERP->Tmarkstack_ptr)
-#define PL_maxscream (PERL_GET_INTERP->Tmaxscream)
-#define PL_modcount (PERL_GET_INTERP->Tmodcount)
-#define PL_na (PERL_GET_INTERP->Tna)
-#define PL_nrs (PERL_GET_INTERP->Tnrs)
-#define PL_ofs (PERL_GET_INTERP->Tofs)
-#define PL_ofslen (PERL_GET_INTERP->Tofslen)
-#define PL_op (PERL_GET_INTERP->Top)
-#define PL_opsave (PERL_GET_INTERP->Topsave)
-#define PL_protect (PERL_GET_INTERP->Tprotect)
-#define PL_reg_call_cc (PERL_GET_INTERP->Treg_call_cc)
-#define PL_reg_curpm (PERL_GET_INTERP->Treg_curpm)
-#define PL_reg_eval_set (PERL_GET_INTERP->Treg_eval_set)
-#define PL_reg_flags (PERL_GET_INTERP->Treg_flags)
-#define PL_reg_ganch (PERL_GET_INTERP->Treg_ganch)
-#define PL_reg_leftiter (PERL_GET_INTERP->Treg_leftiter)
-#define PL_reg_magic (PERL_GET_INTERP->Treg_magic)
-#define PL_reg_maxiter (PERL_GET_INTERP->Treg_maxiter)
-#define PL_reg_oldcurpm (PERL_GET_INTERP->Treg_oldcurpm)
-#define PL_reg_oldpos (PERL_GET_INTERP->Treg_oldpos)
-#define PL_reg_oldsaved (PERL_GET_INTERP->Treg_oldsaved)
-#define PL_reg_oldsavedlen (PERL_GET_INTERP->Treg_oldsavedlen)
-#define PL_reg_poscache (PERL_GET_INTERP->Treg_poscache)
-#define PL_reg_poscache_size (PERL_GET_INTERP->Treg_poscache_size)
-#define PL_reg_re (PERL_GET_INTERP->Treg_re)
-#define PL_reg_start_tmp (PERL_GET_INTERP->Treg_start_tmp)
-#define PL_reg_start_tmpl (PERL_GET_INTERP->Treg_start_tmpl)
-#define PL_reg_starttry (PERL_GET_INTERP->Treg_starttry)
-#define PL_reg_sv (PERL_GET_INTERP->Treg_sv)
-#define PL_reg_whilem_seen (PERL_GET_INTERP->Treg_whilem_seen)
-#define PL_regbol (PERL_GET_INTERP->Tregbol)
-#define PL_regcc (PERL_GET_INTERP->Tregcc)
-#define PL_regcode (PERL_GET_INTERP->Tregcode)
-#define PL_regcomp_parse (PERL_GET_INTERP->Tregcomp_parse)
-#define PL_regcomp_rx (PERL_GET_INTERP->Tregcomp_rx)
-#define PL_regcompp (PERL_GET_INTERP->Tregcompp)
-#define PL_regdata (PERL_GET_INTERP->Tregdata)
-#define PL_regdummy (PERL_GET_INTERP->Tregdummy)
-#define PL_regendp (PERL_GET_INTERP->Tregendp)
-#define PL_regeol (PERL_GET_INTERP->Tregeol)
-#define PL_regexecp (PERL_GET_INTERP->Tregexecp)
-#define PL_regflags (PERL_GET_INTERP->Tregflags)
-#define PL_regfree (PERL_GET_INTERP->Tregfree)
-#define PL_regindent (PERL_GET_INTERP->Tregindent)
-#define PL_reginput (PERL_GET_INTERP->Treginput)
-#define PL_regint_start (PERL_GET_INTERP->Tregint_start)
-#define PL_regint_string (PERL_GET_INTERP->Tregint_string)
-#define PL_reginterp_cnt (PERL_GET_INTERP->Treginterp_cnt)
-#define PL_reglastparen (PERL_GET_INTERP->Treglastparen)
-#define PL_regnarrate (PERL_GET_INTERP->Tregnarrate)
-#define PL_regnaughty (PERL_GET_INTERP->Tregnaughty)
-#define PL_regnpar (PERL_GET_INTERP->Tregnpar)
-#define PL_regprecomp (PERL_GET_INTERP->Tregprecomp)
-#define PL_regprev (PERL_GET_INTERP->Tregprev)
-#define PL_regprogram (PERL_GET_INTERP->Tregprogram)
-#define PL_regsawback (PERL_GET_INTERP->Tregsawback)
-#define PL_regseen (PERL_GET_INTERP->Tregseen)
-#define PL_regsize (PERL_GET_INTERP->Tregsize)
-#define PL_regstartp (PERL_GET_INTERP->Tregstartp)
-#define PL_regtill (PERL_GET_INTERP->Tregtill)
-#define PL_regxend (PERL_GET_INTERP->Tregxend)
-#define PL_restartop (PERL_GET_INTERP->Trestartop)
-#define PL_retstack (PERL_GET_INTERP->Tretstack)
-#define PL_retstack_ix (PERL_GET_INTERP->Tretstack_ix)
-#define PL_retstack_max (PERL_GET_INTERP->Tretstack_max)
-#define PL_rs (PERL_GET_INTERP->Trs)
-#define PL_savestack (PERL_GET_INTERP->Tsavestack)
-#define PL_savestack_ix (PERL_GET_INTERP->Tsavestack_ix)
-#define PL_savestack_max (PERL_GET_INTERP->Tsavestack_max)
-#define PL_scopestack (PERL_GET_INTERP->Tscopestack)
-#define PL_scopestack_ix (PERL_GET_INTERP->Tscopestack_ix)
-#define PL_scopestack_max (PERL_GET_INTERP->Tscopestack_max)
-#define PL_screamfirst (PERL_GET_INTERP->Tscreamfirst)
-#define PL_screamnext (PERL_GET_INTERP->Tscreamnext)
-#define PL_secondgv (PERL_GET_INTERP->Tsecondgv)
-#define PL_seen_evals (PERL_GET_INTERP->Tseen_evals)
-#define PL_seen_zerolen (PERL_GET_INTERP->Tseen_zerolen)
-#define PL_sortcop (PERL_GET_INTERP->Tsortcop)
-#define PL_sortcxix (PERL_GET_INTERP->Tsortcxix)
-#define PL_sortstash (PERL_GET_INTERP->Tsortstash)
-#define PL_stack_base (PERL_GET_INTERP->Tstack_base)
-#define PL_stack_max (PERL_GET_INTERP->Tstack_max)
-#define PL_stack_sp (PERL_GET_INTERP->Tstack_sp)
-#define PL_start_env (PERL_GET_INTERP->Tstart_env)
-#define PL_statbuf (PERL_GET_INTERP->Tstatbuf)
-#define PL_statcache (PERL_GET_INTERP->Tstatcache)
-#define PL_statgv (PERL_GET_INTERP->Tstatgv)
-#define PL_statname (PERL_GET_INTERP->Tstatname)
-#define PL_tainted (PERL_GET_INTERP->Ttainted)
-#define PL_timesbuf (PERL_GET_INTERP->Ttimesbuf)
-#define PL_tmps_floor (PERL_GET_INTERP->Ttmps_floor)
-#define PL_tmps_ix (PERL_GET_INTERP->Ttmps_ix)
-#define PL_tmps_max (PERL_GET_INTERP->Ttmps_max)
-#define PL_tmps_stack (PERL_GET_INTERP->Ttmps_stack)
-#define PL_top_env (PERL_GET_INTERP->Ttop_env)
-#define PL_toptarget (PERL_GET_INTERP->Ttoptarget)
-#define PL_watchaddr (PERL_GET_INTERP->Twatchaddr)
-#define PL_watchok (PERL_GET_INTERP->Twatchok)
+#define PL_Sv (vTHX->TSv)
+#define PL_Xpv (vTHX->TXpv)
+#define PL_av_fetch_sv (vTHX->Tav_fetch_sv)
+#define PL_bodytarget (vTHX->Tbodytarget)
+#define PL_bostr (vTHX->Tbostr)
+#define PL_chopset (vTHX->Tchopset)
+#define PL_colors (vTHX->Tcolors)
+#define PL_colorset (vTHX->Tcolorset)
+#define PL_curcop (vTHX->Tcurcop)
+#define PL_curpad (vTHX->Tcurpad)
+#define PL_curpm (vTHX->Tcurpm)
+#define PL_curstack (vTHX->Tcurstack)
+#define PL_curstackinfo (vTHX->Tcurstackinfo)
+#define PL_curstash (vTHX->Tcurstash)
+#define PL_defoutgv (vTHX->Tdefoutgv)
+#define PL_defstash (vTHX->Tdefstash)
+#define PL_delaymagic (vTHX->Tdelaymagic)
+#define PL_dirty (vTHX->Tdirty)
+#define PL_dumpindent (vTHX->Tdumpindent)
+#define PL_extralen (vTHX->Textralen)
+#define PL_firstgv (vTHX->Tfirstgv)
+#define PL_formtarget (vTHX->Tformtarget)
+#define PL_hv_fetch_ent_mh (vTHX->Thv_fetch_ent_mh)
+#define PL_hv_fetch_sv (vTHX->Thv_fetch_sv)
+#define PL_in_eval (vTHX->Tin_eval)
+#define PL_last_in_gv (vTHX->Tlast_in_gv)
+#define PL_lastgotoprobe (vTHX->Tlastgotoprobe)
+#define PL_lastscream (vTHX->Tlastscream)
+#define PL_localizing (vTHX->Tlocalizing)
+#define PL_mainstack (vTHX->Tmainstack)
+#define PL_markstack (vTHX->Tmarkstack)
+#define PL_markstack_max (vTHX->Tmarkstack_max)
+#define PL_markstack_ptr (vTHX->Tmarkstack_ptr)
+#define PL_maxscream (vTHX->Tmaxscream)
+#define PL_modcount (vTHX->Tmodcount)
+#define PL_na (vTHX->Tna)
+#define PL_nrs (vTHX->Tnrs)
+#define PL_ofs (vTHX->Tofs)
+#define PL_ofslen (vTHX->Tofslen)
+#define PL_op (vTHX->Top)
+#define PL_opsave (vTHX->Topsave)
+#define PL_protect (vTHX->Tprotect)
+#define PL_reg_call_cc (vTHX->Treg_call_cc)
+#define PL_reg_curpm (vTHX->Treg_curpm)
+#define PL_reg_eval_set (vTHX->Treg_eval_set)
+#define PL_reg_flags (vTHX->Treg_flags)
+#define PL_reg_ganch (vTHX->Treg_ganch)
+#define PL_reg_leftiter (vTHX->Treg_leftiter)
+#define PL_reg_magic (vTHX->Treg_magic)
+#define PL_reg_maxiter (vTHX->Treg_maxiter)
+#define PL_reg_oldcurpm (vTHX->Treg_oldcurpm)
+#define PL_reg_oldpos (vTHX->Treg_oldpos)
+#define PL_reg_oldsaved (vTHX->Treg_oldsaved)
+#define PL_reg_oldsavedlen (vTHX->Treg_oldsavedlen)
+#define PL_reg_poscache (vTHX->Treg_poscache)
+#define PL_reg_poscache_size (vTHX->Treg_poscache_size)
+#define PL_reg_re (vTHX->Treg_re)
+#define PL_reg_start_tmp (vTHX->Treg_start_tmp)
+#define PL_reg_start_tmpl (vTHX->Treg_start_tmpl)
+#define PL_reg_starttry (vTHX->Treg_starttry)
+#define PL_reg_sv (vTHX->Treg_sv)
+#define PL_reg_whilem_seen (vTHX->Treg_whilem_seen)
+#define PL_regbol (vTHX->Tregbol)
+#define PL_regcc (vTHX->Tregcc)
+#define PL_regcode (vTHX->Tregcode)
+#define PL_regcomp_parse (vTHX->Tregcomp_parse)
+#define PL_regcomp_rx (vTHX->Tregcomp_rx)
+#define PL_regcompp (vTHX->Tregcompp)
+#define PL_regdata (vTHX->Tregdata)
+#define PL_regdummy (vTHX->Tregdummy)
+#define PL_regendp (vTHX->Tregendp)
+#define PL_regeol (vTHX->Tregeol)
+#define PL_regexecp (vTHX->Tregexecp)
+#define PL_regflags (vTHX->Tregflags)
+#define PL_regfree (vTHX->Tregfree)
+#define PL_regindent (vTHX->Tregindent)
+#define PL_reginput (vTHX->Treginput)
+#define PL_regint_start (vTHX->Tregint_start)
+#define PL_regint_string (vTHX->Tregint_string)
+#define PL_reginterp_cnt (vTHX->Treginterp_cnt)
+#define PL_reglastparen (vTHX->Treglastparen)
+#define PL_regnarrate (vTHX->Tregnarrate)
+#define PL_regnaughty (vTHX->Tregnaughty)
+#define PL_regnpar (vTHX->Tregnpar)
+#define PL_regprecomp (vTHX->Tregprecomp)
+#define PL_regprev (vTHX->Tregprev)
+#define PL_regprogram (vTHX->Tregprogram)
+#define PL_regsawback (vTHX->Tregsawback)
+#define PL_regseen (vTHX->Tregseen)
+#define PL_regsize (vTHX->Tregsize)
+#define PL_regstartp (vTHX->Tregstartp)
+#define PL_regtill (vTHX->Tregtill)
+#define PL_regxend (vTHX->Tregxend)
+#define PL_restartop (vTHX->Trestartop)
+#define PL_retstack (vTHX->Tretstack)
+#define PL_retstack_ix (vTHX->Tretstack_ix)
+#define PL_retstack_max (vTHX->Tretstack_max)
+#define PL_rs (vTHX->Trs)
+#define PL_savestack (vTHX->Tsavestack)
+#define PL_savestack_ix (vTHX->Tsavestack_ix)
+#define PL_savestack_max (vTHX->Tsavestack_max)
+#define PL_scopestack (vTHX->Tscopestack)
+#define PL_scopestack_ix (vTHX->Tscopestack_ix)
+#define PL_scopestack_max (vTHX->Tscopestack_max)
+#define PL_screamfirst (vTHX->Tscreamfirst)
+#define PL_screamnext (vTHX->Tscreamnext)
+#define PL_secondgv (vTHX->Tsecondgv)
+#define PL_seen_evals (vTHX->Tseen_evals)
+#define PL_seen_zerolen (vTHX->Tseen_zerolen)
+#define PL_sortcop (vTHX->Tsortcop)
+#define PL_sortcxix (vTHX->Tsortcxix)
+#define PL_sortstash (vTHX->Tsortstash)
+#define PL_stack_base (vTHX->Tstack_base)
+#define PL_stack_max (vTHX->Tstack_max)
+#define PL_stack_sp (vTHX->Tstack_sp)
+#define PL_start_env (vTHX->Tstart_env)
+#define PL_statbuf (vTHX->Tstatbuf)
+#define PL_statcache (vTHX->Tstatcache)
+#define PL_statgv (vTHX->Tstatgv)
+#define PL_statname (vTHX->Tstatname)
+#define PL_tainted (vTHX->Ttainted)
+#define PL_timesbuf (vTHX->Ttimesbuf)
+#define PL_tmps_floor (vTHX->Ttmps_floor)
+#define PL_tmps_ix (vTHX->Ttmps_ix)
+#define PL_tmps_max (vTHX->Ttmps_max)
+#define PL_tmps_stack (vTHX->Ttmps_stack)
+#define PL_top_env (vTHX->Ttop_env)
+#define PL_toptarget (vTHX->Ttoptarget)
+#define PL_watchaddr (vTHX->Twatchaddr)
+#define PL_watchok (vTHX->Twatchok)
-#endif /* !PERL_IMPLICIT_CONTEXT */
-#endif /* !USE_THREADS */
+# if defined(PERL_OBJECT)
+# include "error: PERL_OBJECT + MULTIPLICITY don't go together"
+# endif
-/* These are always per-interpreter if there is more than one */
+# if defined(USE_THREADS)
+/* case 5 above */
#define PL_Argv (PERL_GET_INTERP->IArgv)
#define PL_Cmd (PERL_GET_INTERP->ICmd)
#define PL_yynerrs (PERL_GET_INTERP->Iyynerrs)
#define PL_yyval (PERL_GET_INTERP->Iyyval)
+# else /* !USE_THREADS */
+/* cases 2 and 3 above */
+
+#define PL_Argv (vTHX->IArgv)
+#define PL_Cmd (vTHX->ICmd)
+#define PL_DBcv (vTHX->IDBcv)
+#define PL_DBgv (vTHX->IDBgv)
+#define PL_DBline (vTHX->IDBline)
+#define PL_DBsignal (vTHX->IDBsignal)
+#define PL_DBsingle (vTHX->IDBsingle)
+#define PL_DBsub (vTHX->IDBsub)
+#define PL_DBtrace (vTHX->IDBtrace)
+#define PL_Dir (vTHX->IDir)
+#define PL_Env (vTHX->IEnv)
+#define PL_LIO (vTHX->ILIO)
+#define PL_Mem (vTHX->IMem)
+#define PL_Proc (vTHX->IProc)
+#define PL_Sock (vTHX->ISock)
+#define PL_StdIO (vTHX->IStdIO)
+#define PL_amagic_generation (vTHX->Iamagic_generation)
+#define PL_ampergv (vTHX->Iampergv)
+#define PL_an (vTHX->Ian)
+#define PL_archpat_auto (vTHX->Iarchpat_auto)
+#define PL_argvgv (vTHX->Iargvgv)
+#define PL_argvoutgv (vTHX->Iargvoutgv)
+#define PL_basetime (vTHX->Ibasetime)
+#define PL_beginav (vTHX->Ibeginav)
+#define PL_bitcount (vTHX->Ibitcount)
+#define PL_bufend (vTHX->Ibufend)
+#define PL_bufptr (vTHX->Ibufptr)
+#define PL_cddir (vTHX->Icddir)
+#define PL_collation_ix (vTHX->Icollation_ix)
+#define PL_collation_name (vTHX->Icollation_name)
+#define PL_collation_standard (vTHX->Icollation_standard)
+#define PL_collxfrm_base (vTHX->Icollxfrm_base)
+#define PL_collxfrm_mult (vTHX->Icollxfrm_mult)
+#define PL_compcv (vTHX->Icompcv)
+#define PL_compiling (vTHX->Icompiling)
+#define PL_comppad (vTHX->Icomppad)
+#define PL_comppad_name (vTHX->Icomppad_name)
+#define PL_comppad_name_fill (vTHX->Icomppad_name_fill)
+#define PL_comppad_name_floor (vTHX->Icomppad_name_floor)
+#define PL_cop_seqmax (vTHX->Icop_seqmax)
+#define PL_copline (vTHX->Icopline)
+#define PL_cred_mutex (vTHX->Icred_mutex)
+#define PL_cryptseen (vTHX->Icryptseen)
+#define PL_cshlen (vTHX->Icshlen)
+#define PL_cshname (vTHX->Icshname)
+#define PL_curcopdb (vTHX->Icurcopdb)
+#define PL_curstname (vTHX->Icurstname)
+#define PL_curthr (vTHX->Icurthr)
+#define PL_dbargs (vTHX->Idbargs)
+#define PL_debdelim (vTHX->Idebdelim)
+#define PL_debname (vTHX->Idebname)
+#define PL_debstash (vTHX->Idebstash)
+#define PL_debug (vTHX->Idebug)
+#define PL_defgv (vTHX->Idefgv)
+#define PL_diehook (vTHX->Idiehook)
+#define PL_dlevel (vTHX->Idlevel)
+#define PL_dlmax (vTHX->Idlmax)
+#define PL_doextract (vTHX->Idoextract)
+#define PL_doswitches (vTHX->Idoswitches)
+#define PL_dowarn (vTHX->Idowarn)
+#define PL_e_script (vTHX->Ie_script)
+#define PL_efloatbuf (vTHX->Iefloatbuf)
+#define PL_efloatsize (vTHX->Iefloatsize)
+#define PL_egid (vTHX->Iegid)
+#define PL_endav (vTHX->Iendav)
+#define PL_envgv (vTHX->Ienvgv)
+#define PL_errgv (vTHX->Ierrgv)
+#define PL_error_count (vTHX->Ierror_count)
+#define PL_euid (vTHX->Ieuid)
+#define PL_eval_cond (vTHX->Ieval_cond)
+#define PL_eval_mutex (vTHX->Ieval_mutex)
+#define PL_eval_owner (vTHX->Ieval_owner)
+#define PL_eval_root (vTHX->Ieval_root)
+#define PL_eval_start (vTHX->Ieval_start)
+#define PL_evalseq (vTHX->Ievalseq)
+#define PL_exitlist (vTHX->Iexitlist)
+#define PL_exitlistlen (vTHX->Iexitlistlen)
+#define PL_expect (vTHX->Iexpect)
+#define PL_fdpid (vTHX->Ifdpid)
+#define PL_filemode (vTHX->Ifilemode)
+#define PL_filter_debug (vTHX->Ifilter_debug)
+#define PL_forkprocess (vTHX->Iforkprocess)
+#define PL_formfeed (vTHX->Iformfeed)
+#define PL_generation (vTHX->Igeneration)
+#define PL_gensym (vTHX->Igensym)
+#define PL_gid (vTHX->Igid)
+#define PL_glob_index (vTHX->Iglob_index)
+#define PL_globalstash (vTHX->Iglobalstash)
+#define PL_he_root (vTHX->Ihe_root)
+#define PL_hintgv (vTHX->Ihintgv)
+#define PL_hints (vTHX->Ihints)
+#define PL_in_clean_all (vTHX->Iin_clean_all)
+#define PL_in_clean_objs (vTHX->Iin_clean_objs)
+#define PL_in_my (vTHX->Iin_my)
+#define PL_in_my_stash (vTHX->Iin_my_stash)
+#define PL_incgv (vTHX->Iincgv)
+#define PL_initav (vTHX->Iinitav)
+#define PL_inplace (vTHX->Iinplace)
+#define PL_last_lop (vTHX->Ilast_lop)
+#define PL_last_lop_op (vTHX->Ilast_lop_op)
+#define PL_last_swash_hv (vTHX->Ilast_swash_hv)
+#define PL_last_swash_key (vTHX->Ilast_swash_key)
+#define PL_last_swash_klen (vTHX->Ilast_swash_klen)
+#define PL_last_swash_slen (vTHX->Ilast_swash_slen)
+#define PL_last_swash_tmps (vTHX->Ilast_swash_tmps)
+#define PL_last_uni (vTHX->Ilast_uni)
+#define PL_lastfd (vTHX->Ilastfd)
+#define PL_lastsize (vTHX->Ilastsize)
+#define PL_lastspbase (vTHX->Ilastspbase)
+#define PL_laststatval (vTHX->Ilaststatval)
+#define PL_laststype (vTHX->Ilaststype)
+#define PL_leftgv (vTHX->Ileftgv)
+#define PL_lex_brackets (vTHX->Ilex_brackets)
+#define PL_lex_brackstack (vTHX->Ilex_brackstack)
+#define PL_lex_casemods (vTHX->Ilex_casemods)
+#define PL_lex_casestack (vTHX->Ilex_casestack)
+#define PL_lex_defer (vTHX->Ilex_defer)
+#define PL_lex_dojoin (vTHX->Ilex_dojoin)
+#define PL_lex_expect (vTHX->Ilex_expect)
+#define PL_lex_fakebrack (vTHX->Ilex_fakebrack)
+#define PL_lex_formbrack (vTHX->Ilex_formbrack)
+#define PL_lex_inpat (vTHX->Ilex_inpat)
+#define PL_lex_inwhat (vTHX->Ilex_inwhat)
+#define PL_lex_op (vTHX->Ilex_op)
+#define PL_lex_repl (vTHX->Ilex_repl)
+#define PL_lex_starts (vTHX->Ilex_starts)
+#define PL_lex_state (vTHX->Ilex_state)
+#define PL_lex_stuff (vTHX->Ilex_stuff)
+#define PL_lineary (vTHX->Ilineary)
+#define PL_linestart (vTHX->Ilinestart)
+#define PL_linestr (vTHX->Ilinestr)
+#define PL_localpatches (vTHX->Ilocalpatches)
+#define PL_main_cv (vTHX->Imain_cv)
+#define PL_main_root (vTHX->Imain_root)
+#define PL_main_start (vTHX->Imain_start)
+#define PL_malloc_mutex (vTHX->Imalloc_mutex)
+#define PL_max_intro_pending (vTHX->Imax_intro_pending)
+#define PL_maxo (vTHX->Imaxo)
+#define PL_maxsysfd (vTHX->Imaxsysfd)
+#define PL_mess_sv (vTHX->Imess_sv)
+#define PL_min_intro_pending (vTHX->Imin_intro_pending)
+#define PL_minus_F (vTHX->Iminus_F)
+#define PL_minus_a (vTHX->Iminus_a)
+#define PL_minus_c (vTHX->Iminus_c)
+#define PL_minus_l (vTHX->Iminus_l)
+#define PL_minus_n (vTHX->Iminus_n)
+#define PL_minus_p (vTHX->Iminus_p)
+#define PL_modglobal (vTHX->Imodglobal)
+#define PL_multi_close (vTHX->Imulti_close)
+#define PL_multi_end (vTHX->Imulti_end)
+#define PL_multi_open (vTHX->Imulti_open)
+#define PL_multi_start (vTHX->Imulti_start)
+#define PL_multiline (vTHX->Imultiline)
+#define PL_mystrk (vTHX->Imystrk)
+#define PL_nexttoke (vTHX->Inexttoke)
+#define PL_nexttype (vTHX->Inexttype)
+#define PL_nextval (vTHX->Inextval)
+#define PL_nice_chunk (vTHX->Inice_chunk)
+#define PL_nice_chunk_size (vTHX->Inice_chunk_size)
+#define PL_nomemok (vTHX->Inomemok)
+#define PL_nthreads (vTHX->Inthreads)
+#define PL_nthreads_cond (vTHX->Inthreads_cond)
+#define PL_numeric_local (vTHX->Inumeric_local)
+#define PL_numeric_name (vTHX->Inumeric_name)
+#define PL_numeric_radix (vTHX->Inumeric_radix)
+#define PL_numeric_standard (vTHX->Inumeric_standard)
+#define PL_ofmt (vTHX->Iofmt)
+#define PL_oldbufptr (vTHX->Ioldbufptr)
+#define PL_oldlastpm (vTHX->Ioldlastpm)
+#define PL_oldname (vTHX->Ioldname)
+#define PL_oldoldbufptr (vTHX->Ioldoldbufptr)
+#define PL_op_mask (vTHX->Iop_mask)
+#define PL_op_seqmax (vTHX->Iop_seqmax)
+#define PL_origalen (vTHX->Iorigalen)
+#define PL_origargc (vTHX->Iorigargc)
+#define PL_origargv (vTHX->Iorigargv)
+#define PL_origenviron (vTHX->Iorigenviron)
+#define PL_origfilename (vTHX->Iorigfilename)
+#define PL_ors (vTHX->Iors)
+#define PL_orslen (vTHX->Iorslen)
+#define PL_osname (vTHX->Iosname)
+#define PL_pad_reset_pending (vTHX->Ipad_reset_pending)
+#define PL_padix (vTHX->Ipadix)
+#define PL_padix_floor (vTHX->Ipadix_floor)
+#define PL_parsehook (vTHX->Iparsehook)
+#define PL_patchlevel (vTHX->Ipatchlevel)
+#define PL_pending_ident (vTHX->Ipending_ident)
+#define PL_perl_destruct_level (vTHX->Iperl_destruct_level)
+#define PL_perldb (vTHX->Iperldb)
+#define PL_pidstatus (vTHX->Ipidstatus)
+#define PL_preambleav (vTHX->Ipreambleav)
+#define PL_preambled (vTHX->Ipreambled)
+#define PL_preprocess (vTHX->Ipreprocess)
+#define PL_profiledata (vTHX->Iprofiledata)
+#define PL_replgv (vTHX->Ireplgv)
+#define PL_rightgv (vTHX->Irightgv)
+#define PL_rsfp (vTHX->Irsfp)
+#define PL_rsfp_filters (vTHX->Irsfp_filters)
+#define PL_runops (vTHX->Irunops)
+#define PL_sawampersand (vTHX->Isawampersand)
+#define PL_sawstudy (vTHX->Isawstudy)
+#define PL_sawvec (vTHX->Isawvec)
+#define PL_sh_path (vTHX->Ish_path)
+#define PL_siggv (vTHX->Isiggv)
+#define PL_sighandlerp (vTHX->Isighandlerp)
+#define PL_splitstr (vTHX->Isplitstr)
+#define PL_srand_called (vTHX->Isrand_called)
+#define PL_statusvalue (vTHX->Istatusvalue)
+#define PL_statusvalue_vms (vTHX->Istatusvalue_vms)
+#define PL_stdingv (vTHX->Istdingv)
+#define PL_strchop (vTHX->Istrchop)
+#define PL_strtab (vTHX->Istrtab)
+#define PL_strtab_mutex (vTHX->Istrtab_mutex)
+#define PL_sub_generation (vTHX->Isub_generation)
+#define PL_sublex_info (vTHX->Isublex_info)
+#define PL_subline (vTHX->Isubline)
+#define PL_subname (vTHX->Isubname)
+#define PL_sv_arenaroot (vTHX->Isv_arenaroot)
+#define PL_sv_count (vTHX->Isv_count)
+#define PL_sv_mutex (vTHX->Isv_mutex)
+#define PL_sv_no (vTHX->Isv_no)
+#define PL_sv_objcount (vTHX->Isv_objcount)
+#define PL_sv_root (vTHX->Isv_root)
+#define PL_sv_undef (vTHX->Isv_undef)
+#define PL_sv_yes (vTHX->Isv_yes)
+#define PL_svref_mutex (vTHX->Isvref_mutex)
+#define PL_sys_intern (vTHX->Isys_intern)
+#define PL_tainting (vTHX->Itainting)
+#define PL_thisexpr (vTHX->Ithisexpr)
+#define PL_thr_key (vTHX->Ithr_key)
+#define PL_threadnum (vTHX->Ithreadnum)
+#define PL_threads_mutex (vTHX->Ithreads_mutex)
+#define PL_threadsv_names (vTHX->Ithreadsv_names)
+#define PL_thrsv (vTHX->Ithrsv)
+#define PL_tokenbuf (vTHX->Itokenbuf)
+#define PL_uid (vTHX->Iuid)
+#define PL_unsafe (vTHX->Iunsafe)
+#define PL_utf8_alnum (vTHX->Iutf8_alnum)
+#define PL_utf8_alnumc (vTHX->Iutf8_alnumc)
+#define PL_utf8_alpha (vTHX->Iutf8_alpha)
+#define PL_utf8_ascii (vTHX->Iutf8_ascii)
+#define PL_utf8_cntrl (vTHX->Iutf8_cntrl)
+#define PL_utf8_digit (vTHX->Iutf8_digit)
+#define PL_utf8_graph (vTHX->Iutf8_graph)
+#define PL_utf8_lower (vTHX->Iutf8_lower)
+#define PL_utf8_mark (vTHX->Iutf8_mark)
+#define PL_utf8_print (vTHX->Iutf8_print)
+#define PL_utf8_punct (vTHX->Iutf8_punct)
+#define PL_utf8_space (vTHX->Iutf8_space)
+#define PL_utf8_tolower (vTHX->Iutf8_tolower)
+#define PL_utf8_totitle (vTHX->Iutf8_totitle)
+#define PL_utf8_toupper (vTHX->Iutf8_toupper)
+#define PL_utf8_upper (vTHX->Iutf8_upper)
+#define PL_utf8_xdigit (vTHX->Iutf8_xdigit)
+#define PL_uudmap (vTHX->Iuudmap)
+#define PL_warnhook (vTHX->Iwarnhook)
+#define PL_xiv_arenaroot (vTHX->Ixiv_arenaroot)
+#define PL_xiv_root (vTHX->Ixiv_root)
+#define PL_xnv_root (vTHX->Ixnv_root)
+#define PL_xpv_root (vTHX->Ixpv_root)
+#define PL_xrv_root (vTHX->Ixrv_root)
+#define PL_yychar (vTHX->Iyychar)
+#define PL_yydebug (vTHX->Iyydebug)
+#define PL_yyerrflag (vTHX->Iyyerrflag)
+#define PL_yylval (vTHX->Iyylval)
+#define PL_yynerrs (vTHX->Iyynerrs)
+#define PL_yyval (vTHX->Iyyval)
+
+# endif /* USE_THREADS */
+
#else /* !MULTIPLICITY */
+/* cases 1, 4 and 6 above */
#define PL_IArgv PL_Argv
#define PL_ICmd PL_Cmd
#define PL_Iyynerrs PL_yynerrs
#define PL_Iyyval PL_yyval
-#ifndef USE_THREADS
+# if defined(USE_THREADS)
+/* case 4 above */
+
+#define PL_Sv (aTHX->TSv)
+#define PL_Xpv (aTHX->TXpv)
+#define PL_av_fetch_sv (aTHX->Tav_fetch_sv)
+#define PL_bodytarget (aTHX->Tbodytarget)
+#define PL_bostr (aTHX->Tbostr)
+#define PL_chopset (aTHX->Tchopset)
+#define PL_colors (aTHX->Tcolors)
+#define PL_colorset (aTHX->Tcolorset)
+#define PL_curcop (aTHX->Tcurcop)
+#define PL_curpad (aTHX->Tcurpad)
+#define PL_curpm (aTHX->Tcurpm)
+#define PL_curstack (aTHX->Tcurstack)
+#define PL_curstackinfo (aTHX->Tcurstackinfo)
+#define PL_curstash (aTHX->Tcurstash)
+#define PL_defoutgv (aTHX->Tdefoutgv)
+#define PL_defstash (aTHX->Tdefstash)
+#define PL_delaymagic (aTHX->Tdelaymagic)
+#define PL_dirty (aTHX->Tdirty)
+#define PL_dumpindent (aTHX->Tdumpindent)
+#define PL_extralen (aTHX->Textralen)
+#define PL_firstgv (aTHX->Tfirstgv)
+#define PL_formtarget (aTHX->Tformtarget)
+#define PL_hv_fetch_ent_mh (aTHX->Thv_fetch_ent_mh)
+#define PL_hv_fetch_sv (aTHX->Thv_fetch_sv)
+#define PL_in_eval (aTHX->Tin_eval)
+#define PL_last_in_gv (aTHX->Tlast_in_gv)
+#define PL_lastgotoprobe (aTHX->Tlastgotoprobe)
+#define PL_lastscream (aTHX->Tlastscream)
+#define PL_localizing (aTHX->Tlocalizing)
+#define PL_mainstack (aTHX->Tmainstack)
+#define PL_markstack (aTHX->Tmarkstack)
+#define PL_markstack_max (aTHX->Tmarkstack_max)
+#define PL_markstack_ptr (aTHX->Tmarkstack_ptr)
+#define PL_maxscream (aTHX->Tmaxscream)
+#define PL_modcount (aTHX->Tmodcount)
+#define PL_na (aTHX->Tna)
+#define PL_nrs (aTHX->Tnrs)
+#define PL_ofs (aTHX->Tofs)
+#define PL_ofslen (aTHX->Tofslen)
+#define PL_op (aTHX->Top)
+#define PL_opsave (aTHX->Topsave)
+#define PL_protect (aTHX->Tprotect)
+#define PL_reg_call_cc (aTHX->Treg_call_cc)
+#define PL_reg_curpm (aTHX->Treg_curpm)
+#define PL_reg_eval_set (aTHX->Treg_eval_set)
+#define PL_reg_flags (aTHX->Treg_flags)
+#define PL_reg_ganch (aTHX->Treg_ganch)
+#define PL_reg_leftiter (aTHX->Treg_leftiter)
+#define PL_reg_magic (aTHX->Treg_magic)
+#define PL_reg_maxiter (aTHX->Treg_maxiter)
+#define PL_reg_oldcurpm (aTHX->Treg_oldcurpm)
+#define PL_reg_oldpos (aTHX->Treg_oldpos)
+#define PL_reg_oldsaved (aTHX->Treg_oldsaved)
+#define PL_reg_oldsavedlen (aTHX->Treg_oldsavedlen)
+#define PL_reg_poscache (aTHX->Treg_poscache)
+#define PL_reg_poscache_size (aTHX->Treg_poscache_size)
+#define PL_reg_re (aTHX->Treg_re)
+#define PL_reg_start_tmp (aTHX->Treg_start_tmp)
+#define PL_reg_start_tmpl (aTHX->Treg_start_tmpl)
+#define PL_reg_starttry (aTHX->Treg_starttry)
+#define PL_reg_sv (aTHX->Treg_sv)
+#define PL_reg_whilem_seen (aTHX->Treg_whilem_seen)
+#define PL_regbol (aTHX->Tregbol)
+#define PL_regcc (aTHX->Tregcc)
+#define PL_regcode (aTHX->Tregcode)
+#define PL_regcomp_parse (aTHX->Tregcomp_parse)
+#define PL_regcomp_rx (aTHX->Tregcomp_rx)
+#define PL_regcompp (aTHX->Tregcompp)
+#define PL_regdata (aTHX->Tregdata)
+#define PL_regdummy (aTHX->Tregdummy)
+#define PL_regendp (aTHX->Tregendp)
+#define PL_regeol (aTHX->Tregeol)
+#define PL_regexecp (aTHX->Tregexecp)
+#define PL_regflags (aTHX->Tregflags)
+#define PL_regfree (aTHX->Tregfree)
+#define PL_regindent (aTHX->Tregindent)
+#define PL_reginput (aTHX->Treginput)
+#define PL_regint_start (aTHX->Tregint_start)
+#define PL_regint_string (aTHX->Tregint_string)
+#define PL_reginterp_cnt (aTHX->Treginterp_cnt)
+#define PL_reglastparen (aTHX->Treglastparen)
+#define PL_regnarrate (aTHX->Tregnarrate)
+#define PL_regnaughty (aTHX->Tregnaughty)
+#define PL_regnpar (aTHX->Tregnpar)
+#define PL_regprecomp (aTHX->Tregprecomp)
+#define PL_regprev (aTHX->Tregprev)
+#define PL_regprogram (aTHX->Tregprogram)
+#define PL_regsawback (aTHX->Tregsawback)
+#define PL_regseen (aTHX->Tregseen)
+#define PL_regsize (aTHX->Tregsize)
+#define PL_regstartp (aTHX->Tregstartp)
+#define PL_regtill (aTHX->Tregtill)
+#define PL_regxend (aTHX->Tregxend)
+#define PL_restartop (aTHX->Trestartop)
+#define PL_retstack (aTHX->Tretstack)
+#define PL_retstack_ix (aTHX->Tretstack_ix)
+#define PL_retstack_max (aTHX->Tretstack_max)
+#define PL_rs (aTHX->Trs)
+#define PL_savestack (aTHX->Tsavestack)
+#define PL_savestack_ix (aTHX->Tsavestack_ix)
+#define PL_savestack_max (aTHX->Tsavestack_max)
+#define PL_scopestack (aTHX->Tscopestack)
+#define PL_scopestack_ix (aTHX->Tscopestack_ix)
+#define PL_scopestack_max (aTHX->Tscopestack_max)
+#define PL_screamfirst (aTHX->Tscreamfirst)
+#define PL_screamnext (aTHX->Tscreamnext)
+#define PL_secondgv (aTHX->Tsecondgv)
+#define PL_seen_evals (aTHX->Tseen_evals)
+#define PL_seen_zerolen (aTHX->Tseen_zerolen)
+#define PL_sortcop (aTHX->Tsortcop)
+#define PL_sortcxix (aTHX->Tsortcxix)
+#define PL_sortstash (aTHX->Tsortstash)
+#define PL_stack_base (aTHX->Tstack_base)
+#define PL_stack_max (aTHX->Tstack_max)
+#define PL_stack_sp (aTHX->Tstack_sp)
+#define PL_start_env (aTHX->Tstart_env)
+#define PL_statbuf (aTHX->Tstatbuf)
+#define PL_statcache (aTHX->Tstatcache)
+#define PL_statgv (aTHX->Tstatgv)
+#define PL_statname (aTHX->Tstatname)
+#define PL_tainted (aTHX->Ttainted)
+#define PL_timesbuf (aTHX->Ttimesbuf)
+#define PL_tmps_floor (aTHX->Ttmps_floor)
+#define PL_tmps_ix (aTHX->Ttmps_ix)
+#define PL_tmps_max (aTHX->Ttmps_max)
+#define PL_tmps_stack (aTHX->Ttmps_stack)
+#define PL_top_env (aTHX->Ttop_env)
+#define PL_toptarget (aTHX->Ttoptarget)
+#define PL_watchaddr (aTHX->Twatchaddr)
+#define PL_watchok (aTHX->Twatchok)
+
+# else /* !USE_THREADS */
+/* cases 1 and 6 above */
#define PL_TSv PL_Sv
#define PL_TXpv PL_Xpv
#define PL_Twatchaddr PL_watchaddr
#define PL_Twatchok PL_watchok
-#endif /* USE_THREADS */
-
-/* Hide what would have been interpreter-specific symbols? */
+# endif /* USE_THREADS */
+#endif /* MULTIPLICITY */
-
-#ifndef USE_THREADS
-
-
-#endif /* USE_THREADS */
-#endif /* MULTIPLICITY */
-
-/* Now same trickey for per-thread variables */
-
-#ifdef USE_THREADS
-
-#define PL_Sv (thr->TSv)
-#define PL_Xpv (thr->TXpv)
-#define PL_av_fetch_sv (thr->Tav_fetch_sv)
-#define PL_bodytarget (thr->Tbodytarget)
-#define PL_bostr (thr->Tbostr)
-#define PL_chopset (thr->Tchopset)
-#define PL_colors (thr->Tcolors)
-#define PL_colorset (thr->Tcolorset)
-#define PL_curcop (thr->Tcurcop)
-#define PL_curpad (thr->Tcurpad)
-#define PL_curpm (thr->Tcurpm)
-#define PL_curstack (thr->Tcurstack)
-#define PL_curstackinfo (thr->Tcurstackinfo)
-#define PL_curstash (thr->Tcurstash)
-#define PL_defoutgv (thr->Tdefoutgv)
-#define PL_defstash (thr->Tdefstash)
-#define PL_delaymagic (thr->Tdelaymagic)
-#define PL_dirty (thr->Tdirty)
-#define PL_dumpindent (thr->Tdumpindent)
-#define PL_extralen (thr->Textralen)
-#define PL_firstgv (thr->Tfirstgv)
-#define PL_formtarget (thr->Tformtarget)
-#define PL_hv_fetch_ent_mh (thr->Thv_fetch_ent_mh)
-#define PL_hv_fetch_sv (thr->Thv_fetch_sv)
-#define PL_in_eval (thr->Tin_eval)
-#define PL_last_in_gv (thr->Tlast_in_gv)
-#define PL_lastgotoprobe (thr->Tlastgotoprobe)
-#define PL_lastscream (thr->Tlastscream)
-#define PL_localizing (thr->Tlocalizing)
-#define PL_mainstack (thr->Tmainstack)
-#define PL_markstack (thr->Tmarkstack)
-#define PL_markstack_max (thr->Tmarkstack_max)
-#define PL_markstack_ptr (thr->Tmarkstack_ptr)
-#define PL_maxscream (thr->Tmaxscream)
-#define PL_modcount (thr->Tmodcount)
-#define PL_na (thr->Tna)
-#define PL_nrs (thr->Tnrs)
-#define PL_ofs (thr->Tofs)
-#define PL_ofslen (thr->Tofslen)
-#define PL_op (thr->Top)
-#define PL_opsave (thr->Topsave)
-#define PL_protect (thr->Tprotect)
-#define PL_reg_call_cc (thr->Treg_call_cc)
-#define PL_reg_curpm (thr->Treg_curpm)
-#define PL_reg_eval_set (thr->Treg_eval_set)
-#define PL_reg_flags (thr->Treg_flags)
-#define PL_reg_ganch (thr->Treg_ganch)
-#define PL_reg_leftiter (thr->Treg_leftiter)
-#define PL_reg_magic (thr->Treg_magic)
-#define PL_reg_maxiter (thr->Treg_maxiter)
-#define PL_reg_oldcurpm (thr->Treg_oldcurpm)
-#define PL_reg_oldpos (thr->Treg_oldpos)
-#define PL_reg_oldsaved (thr->Treg_oldsaved)
-#define PL_reg_oldsavedlen (thr->Treg_oldsavedlen)
-#define PL_reg_poscache (thr->Treg_poscache)
-#define PL_reg_poscache_size (thr->Treg_poscache_size)
-#define PL_reg_re (thr->Treg_re)
-#define PL_reg_start_tmp (thr->Treg_start_tmp)
-#define PL_reg_start_tmpl (thr->Treg_start_tmpl)
-#define PL_reg_starttry (thr->Treg_starttry)
-#define PL_reg_sv (thr->Treg_sv)
-#define PL_reg_whilem_seen (thr->Treg_whilem_seen)
-#define PL_regbol (thr->Tregbol)
-#define PL_regcc (thr->Tregcc)
-#define PL_regcode (thr->Tregcode)
-#define PL_regcomp_parse (thr->Tregcomp_parse)
-#define PL_regcomp_rx (thr->Tregcomp_rx)
-#define PL_regcompp (thr->Tregcompp)
-#define PL_regdata (thr->Tregdata)
-#define PL_regdummy (thr->Tregdummy)
-#define PL_regendp (thr->Tregendp)
-#define PL_regeol (thr->Tregeol)
-#define PL_regexecp (thr->Tregexecp)
-#define PL_regflags (thr->Tregflags)
-#define PL_regfree (thr->Tregfree)
-#define PL_regindent (thr->Tregindent)
-#define PL_reginput (thr->Treginput)
-#define PL_regint_start (thr->Tregint_start)
-#define PL_regint_string (thr->Tregint_string)
-#define PL_reginterp_cnt (thr->Treginterp_cnt)
-#define PL_reglastparen (thr->Treglastparen)
-#define PL_regnarrate (thr->Tregnarrate)
-#define PL_regnaughty (thr->Tregnaughty)
-#define PL_regnpar (thr->Tregnpar)
-#define PL_regprecomp (thr->Tregprecomp)
-#define PL_regprev (thr->Tregprev)
-#define PL_regprogram (thr->Tregprogram)
-#define PL_regsawback (thr->Tregsawback)
-#define PL_regseen (thr->Tregseen)
-#define PL_regsize (thr->Tregsize)
-#define PL_regstartp (thr->Tregstartp)
-#define PL_regtill (thr->Tregtill)
-#define PL_regxend (thr->Tregxend)
-#define PL_restartop (thr->Trestartop)
-#define PL_retstack (thr->Tretstack)
-#define PL_retstack_ix (thr->Tretstack_ix)
-#define PL_retstack_max (thr->Tretstack_max)
-#define PL_rs (thr->Trs)
-#define PL_savestack (thr->Tsavestack)
-#define PL_savestack_ix (thr->Tsavestack_ix)
-#define PL_savestack_max (thr->Tsavestack_max)
-#define PL_scopestack (thr->Tscopestack)
-#define PL_scopestack_ix (thr->Tscopestack_ix)
-#define PL_scopestack_max (thr->Tscopestack_max)
-#define PL_screamfirst (thr->Tscreamfirst)
-#define PL_screamnext (thr->Tscreamnext)
-#define PL_secondgv (thr->Tsecondgv)
-#define PL_seen_evals (thr->Tseen_evals)
-#define PL_seen_zerolen (thr->Tseen_zerolen)
-#define PL_sortcop (thr->Tsortcop)
-#define PL_sortcxix (thr->Tsortcxix)
-#define PL_sortstash (thr->Tsortstash)
-#define PL_stack_base (thr->Tstack_base)
-#define PL_stack_max (thr->Tstack_max)
-#define PL_stack_sp (thr->Tstack_sp)
-#define PL_start_env (thr->Tstart_env)
-#define PL_statbuf (thr->Tstatbuf)
-#define PL_statcache (thr->Tstatcache)
-#define PL_statgv (thr->Tstatgv)
-#define PL_statname (thr->Tstatname)
-#define PL_tainted (thr->Ttainted)
-#define PL_timesbuf (thr->Ttimesbuf)
-#define PL_tmps_floor (thr->Ttmps_floor)
-#define PL_tmps_ix (thr->Ttmps_ix)
-#define PL_tmps_max (thr->Ttmps_max)
-#define PL_tmps_stack (thr->Ttmps_stack)
-#define PL_top_env (thr->Ttop_env)
-#define PL_toptarget (thr->Ttoptarget)
-#define PL_watchaddr (thr->Twatchaddr)
-#define PL_watchok (thr->Twatchok)
-
-#endif /* USE_THREADS */
-
-#ifdef PERL_GLOBAL_STRUCT
+#if defined(PERL_GLOBAL_STRUCT)
#define PL_No (PL_Vars.GNo)
#define PL_Yes (PL_Vars.GYes)
#define PL_Ghexdigit PL_hexdigit
#define PL_Gpatleave PL_patleave
-
#endif /* PERL_GLOBAL_STRUCT */
-
#ifdef PERL_POLLUTE /* disabled by default in 5.006 */
#define DBsingle PL_DBsingle