This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
introduce illegal symbols into null package so that gv_fetchpv(...,TRUE)
[perl5.git] / embedvar.h
index 42d96de..889b4d4 100644 (file)
 
 /* (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_magic           (my_perl->Treg_magic)
-#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_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_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_magic           (PERL_GET_INTERP->Treg_magic)
-#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_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_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_efloatbuf           (vTHX->Tefloatbuf)
+#define PL_efloatsize          (vTHX->Tefloatsize)
+#define PL_errors              (vTHX->Terrors)
+#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_Env                 (PERL_GET_INTERP->IEnv)
 #define PL_LIO                 (PERL_GET_INTERP->ILIO)
 #define PL_Mem                 (PERL_GET_INTERP->IMem)
+#define PL_MemParse            (PERL_GET_INTERP->IMemParse)
+#define PL_MemShared           (PERL_GET_INTERP->IMemShared)
 #define PL_Proc                        (PERL_GET_INTERP->IProc)
 #define PL_Sock                        (PERL_GET_INTERP->ISock)
 #define PL_StdIO               (PERL_GET_INTERP->IStdIO)
 #define PL_amagic_generation   (PERL_GET_INTERP->Iamagic_generation)
-#define PL_ampergv             (PERL_GET_INTERP->Iampergv)
 #define PL_an                  (PERL_GET_INTERP->Ian)
-#define PL_archpat_auto                (PERL_GET_INTERP->Iarchpat_auto)
 #define PL_argvgv              (PERL_GET_INTERP->Iargvgv)
+#define PL_argvout_stack       (PERL_GET_INTERP->Iargvout_stack)
 #define PL_argvoutgv           (PERL_GET_INTERP->Iargvoutgv)
 #define PL_basetime            (PERL_GET_INTERP->Ibasetime)
 #define PL_beginav             (PERL_GET_INTERP->Ibeginav)
 #define PL_bitcount            (PERL_GET_INTERP->Ibitcount)
 #define PL_bufend              (PERL_GET_INTERP->Ibufend)
 #define PL_bufptr              (PERL_GET_INTERP->Ibufptr)
-#define PL_cddir               (PERL_GET_INTERP->Icddir)
+#define PL_checkav             (PERL_GET_INTERP->Icheckav)
 #define PL_collation_ix                (PERL_GET_INTERP->Icollation_ix)
 #define PL_collation_name      (PERL_GET_INTERP->Icollation_name)
 #define PL_collation_standard  (PERL_GET_INTERP->Icollation_standard)
 #define PL_curstname           (PERL_GET_INTERP->Icurstname)
 #define PL_curthr              (PERL_GET_INTERP->Icurthr)
 #define PL_dbargs              (PERL_GET_INTERP->Idbargs)
-#define PL_debdelim            (PERL_GET_INTERP->Idebdelim)
-#define PL_debname             (PERL_GET_INTERP->Idebname)
 #define PL_debstash            (PERL_GET_INTERP->Idebstash)
 #define PL_debug               (PERL_GET_INTERP->Idebug)
 #define PL_defgv               (PERL_GET_INTERP->Idefgv)
 #define PL_diehook             (PERL_GET_INTERP->Idiehook)
-#define PL_dlevel              (PERL_GET_INTERP->Idlevel)
-#define PL_dlmax               (PERL_GET_INTERP->Idlmax)
 #define PL_doextract           (PERL_GET_INTERP->Idoextract)
 #define PL_doswitches          (PERL_GET_INTERP->Idoswitches)
 #define PL_dowarn              (PERL_GET_INTERP->Idowarn)
 #define PL_e_script            (PERL_GET_INTERP->Ie_script)
-#define PL_efloatbuf           (PERL_GET_INTERP->Iefloatbuf)
-#define PL_efloatsize          (PERL_GET_INTERP->Iefloatsize)
 #define PL_egid                        (PERL_GET_INTERP->Iegid)
 #define PL_endav               (PERL_GET_INTERP->Iendav)
 #define PL_envgv               (PERL_GET_INTERP->Ienvgv)
 #define PL_eval_root           (PERL_GET_INTERP->Ieval_root)
 #define PL_eval_start          (PERL_GET_INTERP->Ieval_start)
 #define PL_evalseq             (PERL_GET_INTERP->Ievalseq)
+#define PL_exit_flags          (PERL_GET_INTERP->Iexit_flags)
 #define PL_exitlist            (PERL_GET_INTERP->Iexitlist)
 #define PL_exitlistlen         (PERL_GET_INTERP->Iexitlistlen)
 #define PL_expect              (PERL_GET_INTERP->Iexpect)
 #define PL_fdpid               (PERL_GET_INTERP->Ifdpid)
 #define PL_filemode            (PERL_GET_INTERP->Ifilemode)
-#define PL_filter_debug                (PERL_GET_INTERP->Ifilter_debug)
 #define PL_forkprocess         (PERL_GET_INTERP->Iforkprocess)
 #define PL_formfeed            (PERL_GET_INTERP->Iformfeed)
 #define PL_generation          (PERL_GET_INTERP->Igeneration)
 #define PL_last_swash_tmps     (PERL_GET_INTERP->Ilast_swash_tmps)
 #define PL_last_uni            (PERL_GET_INTERP->Ilast_uni)
 #define PL_lastfd              (PERL_GET_INTERP->Ilastfd)
-#define PL_lastsize            (PERL_GET_INTERP->Ilastsize)
-#define PL_lastspbase          (PERL_GET_INTERP->Ilastspbase)
 #define PL_laststatval         (PERL_GET_INTERP->Ilaststatval)
 #define PL_laststype           (PERL_GET_INTERP->Ilaststype)
-#define PL_leftgv              (PERL_GET_INTERP->Ileftgv)
 #define PL_lex_brackets                (PERL_GET_INTERP->Ilex_brackets)
 #define PL_lex_brackstack      (PERL_GET_INTERP->Ilex_brackstack)
 #define PL_lex_casemods                (PERL_GET_INTERP->Ilex_casemods)
 #define PL_lex_defer           (PERL_GET_INTERP->Ilex_defer)
 #define PL_lex_dojoin          (PERL_GET_INTERP->Ilex_dojoin)
 #define PL_lex_expect          (PERL_GET_INTERP->Ilex_expect)
-#define PL_lex_fakebrack       (PERL_GET_INTERP->Ilex_fakebrack)
 #define PL_lex_formbrack       (PERL_GET_INTERP->Ilex_formbrack)
 #define PL_lex_inpat           (PERL_GET_INTERP->Ilex_inpat)
 #define PL_lex_inwhat          (PERL_GET_INTERP->Ilex_inwhat)
 #define PL_main_cv             (PERL_GET_INTERP->Imain_cv)
 #define PL_main_root           (PERL_GET_INTERP->Imain_root)
 #define PL_main_start          (PERL_GET_INTERP->Imain_start)
-#define PL_malloc_mutex                (PERL_GET_INTERP->Imalloc_mutex)
 #define PL_max_intro_pending   (PERL_GET_INTERP->Imax_intro_pending)
 #define PL_maxo                        (PERL_GET_INTERP->Imaxo)
 #define PL_maxsysfd            (PERL_GET_INTERP->Imaxsysfd)
 #define PL_multi_open          (PERL_GET_INTERP->Imulti_open)
 #define PL_multi_start         (PERL_GET_INTERP->Imulti_start)
 #define PL_multiline           (PERL_GET_INTERP->Imultiline)
-#define PL_mystrk              (PERL_GET_INTERP->Imystrk)
 #define PL_nexttoke            (PERL_GET_INTERP->Inexttoke)
 #define PL_nexttype            (PERL_GET_INTERP->Inexttype)
 #define PL_nextval             (PERL_GET_INTERP->Inextval)
 #define PL_nomemok             (PERL_GET_INTERP->Inomemok)
 #define PL_nthreads            (PERL_GET_INTERP->Inthreads)
 #define PL_nthreads_cond       (PERL_GET_INTERP->Inthreads_cond)
+#define PL_nullstash           (PERL_GET_INTERP->Inullstash)
 #define PL_numeric_local       (PERL_GET_INTERP->Inumeric_local)
 #define PL_numeric_name                (PERL_GET_INTERP->Inumeric_name)
 #define PL_numeric_radix       (PERL_GET_INTERP->Inumeric_radix)
 #define PL_numeric_standard    (PERL_GET_INTERP->Inumeric_standard)
 #define PL_ofmt                        (PERL_GET_INTERP->Iofmt)
 #define PL_oldbufptr           (PERL_GET_INTERP->Ioldbufptr)
-#define PL_oldlastpm           (PERL_GET_INTERP->Ioldlastpm)
 #define PL_oldname             (PERL_GET_INTERP->Ioldname)
 #define PL_oldoldbufptr                (PERL_GET_INTERP->Ioldoldbufptr)
 #define PL_op_mask             (PERL_GET_INTERP->Iop_mask)
 #define PL_pad_reset_pending   (PERL_GET_INTERP->Ipad_reset_pending)
 #define PL_padix               (PERL_GET_INTERP->Ipadix)
 #define PL_padix_floor         (PERL_GET_INTERP->Ipadix_floor)
-#define PL_parsehook           (PERL_GET_INTERP->Iparsehook)
 #define PL_patchlevel          (PERL_GET_INTERP->Ipatchlevel)
 #define PL_pending_ident       (PERL_GET_INTERP->Ipending_ident)
 #define PL_perl_destruct_level (PERL_GET_INTERP->Iperl_destruct_level)
 #define PL_preambled           (PERL_GET_INTERP->Ipreambled)
 #define PL_preprocess          (PERL_GET_INTERP->Ipreprocess)
 #define PL_profiledata         (PERL_GET_INTERP->Iprofiledata)
+#define PL_psig_name           (PERL_GET_INTERP->Ipsig_name)
+#define PL_psig_ptr            (PERL_GET_INTERP->Ipsig_ptr)
+#define PL_ptr_table           (PERL_GET_INTERP->Iptr_table)
 #define PL_replgv              (PERL_GET_INTERP->Ireplgv)
-#define PL_rightgv             (PERL_GET_INTERP->Irightgv)
 #define PL_rsfp                        (PERL_GET_INTERP->Irsfp)
 #define PL_rsfp_filters                (PERL_GET_INTERP->Irsfp_filters)
 #define PL_runops              (PERL_GET_INTERP->Irunops)
 #define PL_sawampersand                (PERL_GET_INTERP->Isawampersand)
-#define PL_sawstudy            (PERL_GET_INTERP->Isawstudy)
-#define PL_sawvec              (PERL_GET_INTERP->Isawvec)
 #define PL_sh_path             (PERL_GET_INTERP->Ish_path)
-#define PL_siggv               (PERL_GET_INTERP->Isiggv)
 #define PL_sighandlerp         (PERL_GET_INTERP->Isighandlerp)
 #define PL_splitstr            (PERL_GET_INTERP->Isplitstr)
 #define PL_srand_called                (PERL_GET_INTERP->Isrand_called)
 #define PL_statusvalue         (PERL_GET_INTERP->Istatusvalue)
 #define PL_statusvalue_vms     (PERL_GET_INTERP->Istatusvalue_vms)
+#define PL_stderrgv            (PERL_GET_INTERP->Istderrgv)
 #define PL_stdingv             (PERL_GET_INTERP->Istdingv)
-#define PL_strchop             (PERL_GET_INTERP->Istrchop)
 #define PL_strtab              (PERL_GET_INTERP->Istrtab)
 #define PL_strtab_mutex                (PERL_GET_INTERP->Istrtab_mutex)
 #define PL_sub_generation      (PERL_GET_INTERP->Isub_generation)
 #define PL_svref_mutex         (PERL_GET_INTERP->Isvref_mutex)
 #define PL_sys_intern          (PERL_GET_INTERP->Isys_intern)
 #define PL_tainting            (PERL_GET_INTERP->Itainting)
-#define PL_thisexpr            (PERL_GET_INTERP->Ithisexpr)
-#define PL_thr_key             (PERL_GET_INTERP->Ithr_key)
 #define PL_threadnum           (PERL_GET_INTERP->Ithreadnum)
 #define PL_threads_mutex       (PERL_GET_INTERP->Ithreads_mutex)
 #define PL_threadsv_names      (PERL_GET_INTERP->Ithreadsv_names)
 #define PL_utf8_xdigit         (PERL_GET_INTERP->Iutf8_xdigit)
 #define PL_uudmap              (PERL_GET_INTERP->Iuudmap)
 #define PL_warnhook            (PERL_GET_INTERP->Iwarnhook)
+#define PL_widesyscalls                (PERL_GET_INTERP->Iwidesyscalls)
 #define PL_xiv_arenaroot       (PERL_GET_INTERP->Ixiv_arenaroot)
 #define PL_xiv_root            (PERL_GET_INTERP->Ixiv_root)
 #define PL_xnv_root            (PERL_GET_INTERP->Ixnv_root)
 #define PL_xpv_root            (PERL_GET_INTERP->Ixpv_root)
+#define PL_xpvav_root          (PERL_GET_INTERP->Ixpvav_root)
+#define PL_xpvbm_root          (PERL_GET_INTERP->Ixpvbm_root)
+#define PL_xpvcv_root          (PERL_GET_INTERP->Ixpvcv_root)
+#define PL_xpvhv_root          (PERL_GET_INTERP->Ixpvhv_root)
+#define PL_xpviv_root          (PERL_GET_INTERP->Ixpviv_root)
+#define PL_xpvlv_root          (PERL_GET_INTERP->Ixpvlv_root)
+#define PL_xpvmg_root          (PERL_GET_INTERP->Ixpvmg_root)
+#define PL_xpvnv_root          (PERL_GET_INTERP->Ixpvnv_root)
 #define PL_xrv_root            (PERL_GET_INTERP->Ixrv_root)
 #define PL_yychar              (PERL_GET_INTERP->Iyychar)
 #define PL_yydebug             (PERL_GET_INTERP->Iyydebug)
 #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_MemParse            (vTHX->IMemParse)
+#define PL_MemShared           (vTHX->IMemShared)
+#define PL_Proc                        (vTHX->IProc)
+#define PL_Sock                        (vTHX->ISock)
+#define PL_StdIO               (vTHX->IStdIO)
+#define PL_amagic_generation   (vTHX->Iamagic_generation)
+#define PL_an                  (vTHX->Ian)
+#define PL_argvgv              (vTHX->Iargvgv)
+#define PL_argvout_stack       (vTHX->Iargvout_stack)
+#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_checkav             (vTHX->Icheckav)
+#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_debstash            (vTHX->Idebstash)
+#define PL_debug               (vTHX->Idebug)
+#define PL_defgv               (vTHX->Idefgv)
+#define PL_diehook             (vTHX->Idiehook)
+#define PL_doextract           (vTHX->Idoextract)
+#define PL_doswitches          (vTHX->Idoswitches)
+#define PL_dowarn              (vTHX->Idowarn)
+#define PL_e_script            (vTHX->Ie_script)
+#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_exit_flags          (vTHX->Iexit_flags)
+#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_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_laststatval         (vTHX->Ilaststatval)
+#define PL_laststype           (vTHX->Ilaststype)
+#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_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_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_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_nullstash           (vTHX->Inullstash)
+#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_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_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_psig_name           (vTHX->Ipsig_name)
+#define PL_psig_ptr            (vTHX->Ipsig_ptr)
+#define PL_ptr_table           (vTHX->Iptr_table)
+#define PL_replgv              (vTHX->Ireplgv)
+#define PL_rsfp                        (vTHX->Irsfp)
+#define PL_rsfp_filters                (vTHX->Irsfp_filters)
+#define PL_runops              (vTHX->Irunops)
+#define PL_sawampersand                (vTHX->Isawampersand)
+#define PL_sh_path             (vTHX->Ish_path)
+#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_stderrgv            (vTHX->Istderrgv)
+#define PL_stdingv             (vTHX->Istdingv)
+#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_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_widesyscalls                (vTHX->Iwidesyscalls)
+#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_xpvav_root          (vTHX->Ixpvav_root)
+#define PL_xpvbm_root          (vTHX->Ixpvbm_root)
+#define PL_xpvcv_root          (vTHX->Ixpvcv_root)
+#define PL_xpvhv_root          (vTHX->Ixpvhv_root)
+#define PL_xpviv_root          (vTHX->Ixpviv_root)
+#define PL_xpvlv_root          (vTHX->Ixpvlv_root)
+#define PL_xpvmg_root          (vTHX->Ixpvmg_root)
+#define PL_xpvnv_root          (vTHX->Ixpvnv_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 */
 
+#  if defined(PERL_OBJECT)
+/* case 6 above */
+
+#define PL_Sv                  (aTHXo->interp.TSv)
+#define PL_Xpv                 (aTHXo->interp.TXpv)
+#define PL_av_fetch_sv         (aTHXo->interp.Tav_fetch_sv)
+#define PL_bodytarget          (aTHXo->interp.Tbodytarget)
+#define PL_bostr               (aTHXo->interp.Tbostr)
+#define PL_chopset             (aTHXo->interp.Tchopset)
+#define PL_colors              (aTHXo->interp.Tcolors)
+#define PL_colorset            (aTHXo->interp.Tcolorset)
+#define PL_curcop              (aTHXo->interp.Tcurcop)
+#define PL_curpad              (aTHXo->interp.Tcurpad)
+#define PL_curpm               (aTHXo->interp.Tcurpm)
+#define PL_curstack            (aTHXo->interp.Tcurstack)
+#define PL_curstackinfo                (aTHXo->interp.Tcurstackinfo)
+#define PL_curstash            (aTHXo->interp.Tcurstash)
+#define PL_defoutgv            (aTHXo->interp.Tdefoutgv)
+#define PL_defstash            (aTHXo->interp.Tdefstash)
+#define PL_delaymagic          (aTHXo->interp.Tdelaymagic)
+#define PL_dirty               (aTHXo->interp.Tdirty)
+#define PL_dumpindent          (aTHXo->interp.Tdumpindent)
+#define PL_efloatbuf           (aTHXo->interp.Tefloatbuf)
+#define PL_efloatsize          (aTHXo->interp.Tefloatsize)
+#define PL_errors              (aTHXo->interp.Terrors)
+#define PL_extralen            (aTHXo->interp.Textralen)
+#define PL_firstgv             (aTHXo->interp.Tfirstgv)
+#define PL_formtarget          (aTHXo->interp.Tformtarget)
+#define PL_hv_fetch_ent_mh     (aTHXo->interp.Thv_fetch_ent_mh)
+#define PL_hv_fetch_sv         (aTHXo->interp.Thv_fetch_sv)
+#define PL_in_eval             (aTHXo->interp.Tin_eval)
+#define PL_last_in_gv          (aTHXo->interp.Tlast_in_gv)
+#define PL_lastgotoprobe       (aTHXo->interp.Tlastgotoprobe)
+#define PL_lastscream          (aTHXo->interp.Tlastscream)
+#define PL_localizing          (aTHXo->interp.Tlocalizing)
+#define PL_mainstack           (aTHXo->interp.Tmainstack)
+#define PL_markstack           (aTHXo->interp.Tmarkstack)
+#define PL_markstack_max       (aTHXo->interp.Tmarkstack_max)
+#define PL_markstack_ptr       (aTHXo->interp.Tmarkstack_ptr)
+#define PL_maxscream           (aTHXo->interp.Tmaxscream)
+#define PL_modcount            (aTHXo->interp.Tmodcount)
+#define PL_na                  (aTHXo->interp.Tna)
+#define PL_nrs                 (aTHXo->interp.Tnrs)
+#define PL_ofs                 (aTHXo->interp.Tofs)
+#define PL_ofslen              (aTHXo->interp.Tofslen)
+#define PL_op                  (aTHXo->interp.Top)
+#define PL_opsave              (aTHXo->interp.Topsave)
+#define PL_protect             (aTHXo->interp.Tprotect)
+#define PL_reg_call_cc         (aTHXo->interp.Treg_call_cc)
+#define PL_reg_curpm           (aTHXo->interp.Treg_curpm)
+#define PL_reg_eval_set                (aTHXo->interp.Treg_eval_set)
+#define PL_reg_flags           (aTHXo->interp.Treg_flags)
+#define PL_reg_ganch           (aTHXo->interp.Treg_ganch)
+#define PL_reg_leftiter                (aTHXo->interp.Treg_leftiter)
+#define PL_reg_magic           (aTHXo->interp.Treg_magic)
+#define PL_reg_maxiter         (aTHXo->interp.Treg_maxiter)
+#define PL_reg_oldcurpm                (aTHXo->interp.Treg_oldcurpm)
+#define PL_reg_oldpos          (aTHXo->interp.Treg_oldpos)
+#define PL_reg_oldsaved                (aTHXo->interp.Treg_oldsaved)
+#define PL_reg_oldsavedlen     (aTHXo->interp.Treg_oldsavedlen)
+#define PL_reg_poscache                (aTHXo->interp.Treg_poscache)
+#define PL_reg_poscache_size   (aTHXo->interp.Treg_poscache_size)
+#define PL_reg_re              (aTHXo->interp.Treg_re)
+#define PL_reg_start_tmp       (aTHXo->interp.Treg_start_tmp)
+#define PL_reg_start_tmpl      (aTHXo->interp.Treg_start_tmpl)
+#define PL_reg_starttry                (aTHXo->interp.Treg_starttry)
+#define PL_reg_sv              (aTHXo->interp.Treg_sv)
+#define PL_reg_whilem_seen     (aTHXo->interp.Treg_whilem_seen)
+#define PL_regbol              (aTHXo->interp.Tregbol)
+#define PL_regcc               (aTHXo->interp.Tregcc)
+#define PL_regcode             (aTHXo->interp.Tregcode)
+#define PL_regcomp_parse       (aTHXo->interp.Tregcomp_parse)
+#define PL_regcomp_rx          (aTHXo->interp.Tregcomp_rx)
+#define PL_regcompp            (aTHXo->interp.Tregcompp)
+#define PL_regdata             (aTHXo->interp.Tregdata)
+#define PL_regdummy            (aTHXo->interp.Tregdummy)
+#define PL_regendp             (aTHXo->interp.Tregendp)
+#define PL_regeol              (aTHXo->interp.Tregeol)
+#define PL_regexecp            (aTHXo->interp.Tregexecp)
+#define PL_regflags            (aTHXo->interp.Tregflags)
+#define PL_regfree             (aTHXo->interp.Tregfree)
+#define PL_regindent           (aTHXo->interp.Tregindent)
+#define PL_reginput            (aTHXo->interp.Treginput)
+#define PL_regint_start                (aTHXo->interp.Tregint_start)
+#define PL_regint_string       (aTHXo->interp.Tregint_string)
+#define PL_reginterp_cnt       (aTHXo->interp.Treginterp_cnt)
+#define PL_reglastparen                (aTHXo->interp.Treglastparen)
+#define PL_regnarrate          (aTHXo->interp.Tregnarrate)
+#define PL_regnaughty          (aTHXo->interp.Tregnaughty)
+#define PL_regnpar             (aTHXo->interp.Tregnpar)
+#define PL_regprecomp          (aTHXo->interp.Tregprecomp)
+#define PL_regprev             (aTHXo->interp.Tregprev)
+#define PL_regprogram          (aTHXo->interp.Tregprogram)
+#define PL_regsawback          (aTHXo->interp.Tregsawback)
+#define PL_regseen             (aTHXo->interp.Tregseen)
+#define PL_regsize             (aTHXo->interp.Tregsize)
+#define PL_regstartp           (aTHXo->interp.Tregstartp)
+#define PL_regtill             (aTHXo->interp.Tregtill)
+#define PL_regxend             (aTHXo->interp.Tregxend)
+#define PL_restartop           (aTHXo->interp.Trestartop)
+#define PL_retstack            (aTHXo->interp.Tretstack)
+#define PL_retstack_ix         (aTHXo->interp.Tretstack_ix)
+#define PL_retstack_max                (aTHXo->interp.Tretstack_max)
+#define PL_rs                  (aTHXo->interp.Trs)
+#define PL_savestack           (aTHXo->interp.Tsavestack)
+#define PL_savestack_ix                (aTHXo->interp.Tsavestack_ix)
+#define PL_savestack_max       (aTHXo->interp.Tsavestack_max)
+#define PL_scopestack          (aTHXo->interp.Tscopestack)
+#define PL_scopestack_ix       (aTHXo->interp.Tscopestack_ix)
+#define PL_scopestack_max      (aTHXo->interp.Tscopestack_max)
+#define PL_screamfirst         (aTHXo->interp.Tscreamfirst)
+#define PL_screamnext          (aTHXo->interp.Tscreamnext)
+#define PL_secondgv            (aTHXo->interp.Tsecondgv)
+#define PL_seen_evals          (aTHXo->interp.Tseen_evals)
+#define PL_seen_zerolen                (aTHXo->interp.Tseen_zerolen)
+#define PL_sortcop             (aTHXo->interp.Tsortcop)
+#define PL_sortcxix            (aTHXo->interp.Tsortcxix)
+#define PL_sortstash           (aTHXo->interp.Tsortstash)
+#define PL_stack_base          (aTHXo->interp.Tstack_base)
+#define PL_stack_max           (aTHXo->interp.Tstack_max)
+#define PL_stack_sp            (aTHXo->interp.Tstack_sp)
+#define PL_start_env           (aTHXo->interp.Tstart_env)
+#define PL_statbuf             (aTHXo->interp.Tstatbuf)
+#define PL_statcache           (aTHXo->interp.Tstatcache)
+#define PL_statgv              (aTHXo->interp.Tstatgv)
+#define PL_statname            (aTHXo->interp.Tstatname)
+#define PL_tainted             (aTHXo->interp.Ttainted)
+#define PL_timesbuf            (aTHXo->interp.Ttimesbuf)
+#define PL_tmps_floor          (aTHXo->interp.Ttmps_floor)
+#define PL_tmps_ix             (aTHXo->interp.Ttmps_ix)
+#define PL_tmps_max            (aTHXo->interp.Ttmps_max)
+#define PL_tmps_stack          (aTHXo->interp.Ttmps_stack)
+#define PL_top_env             (aTHXo->interp.Ttop_env)
+#define PL_toptarget           (aTHXo->interp.Ttoptarget)
+#define PL_watchaddr           (aTHXo->interp.Twatchaddr)
+#define PL_watchok             (aTHXo->interp.Twatchok)
+#define PL_Argv                        (aTHXo->interp.IArgv)
+#define PL_Cmd                 (aTHXo->interp.ICmd)
+#define PL_DBcv                        (aTHXo->interp.IDBcv)
+#define PL_DBgv                        (aTHXo->interp.IDBgv)
+#define PL_DBline              (aTHXo->interp.IDBline)
+#define PL_DBsignal            (aTHXo->interp.IDBsignal)
+#define PL_DBsingle            (aTHXo->interp.IDBsingle)
+#define PL_DBsub               (aTHXo->interp.IDBsub)
+#define PL_DBtrace             (aTHXo->interp.IDBtrace)
+#define PL_Dir                 (aTHXo->interp.IDir)
+#define PL_Env                 (aTHXo->interp.IEnv)
+#define PL_LIO                 (aTHXo->interp.ILIO)
+#define PL_Mem                 (aTHXo->interp.IMem)
+#define PL_MemParse            (aTHXo->interp.IMemParse)
+#define PL_MemShared           (aTHXo->interp.IMemShared)
+#define PL_Proc                        (aTHXo->interp.IProc)
+#define PL_Sock                        (aTHXo->interp.ISock)
+#define PL_StdIO               (aTHXo->interp.IStdIO)
+#define PL_amagic_generation   (aTHXo->interp.Iamagic_generation)
+#define PL_an                  (aTHXo->interp.Ian)
+#define PL_argvgv              (aTHXo->interp.Iargvgv)
+#define PL_argvout_stack       (aTHXo->interp.Iargvout_stack)
+#define PL_argvoutgv           (aTHXo->interp.Iargvoutgv)
+#define PL_basetime            (aTHXo->interp.Ibasetime)
+#define PL_beginav             (aTHXo->interp.Ibeginav)
+#define PL_bitcount            (aTHXo->interp.Ibitcount)
+#define PL_bufend              (aTHXo->interp.Ibufend)
+#define PL_bufptr              (aTHXo->interp.Ibufptr)
+#define PL_checkav             (aTHXo->interp.Icheckav)
+#define PL_collation_ix                (aTHXo->interp.Icollation_ix)
+#define PL_collation_name      (aTHXo->interp.Icollation_name)
+#define PL_collation_standard  (aTHXo->interp.Icollation_standard)
+#define PL_collxfrm_base       (aTHXo->interp.Icollxfrm_base)
+#define PL_collxfrm_mult       (aTHXo->interp.Icollxfrm_mult)
+#define PL_compcv              (aTHXo->interp.Icompcv)
+#define PL_compiling           (aTHXo->interp.Icompiling)
+#define PL_comppad             (aTHXo->interp.Icomppad)
+#define PL_comppad_name                (aTHXo->interp.Icomppad_name)
+#define PL_comppad_name_fill   (aTHXo->interp.Icomppad_name_fill)
+#define PL_comppad_name_floor  (aTHXo->interp.Icomppad_name_floor)
+#define PL_cop_seqmax          (aTHXo->interp.Icop_seqmax)
+#define PL_copline             (aTHXo->interp.Icopline)
+#define PL_cred_mutex          (aTHXo->interp.Icred_mutex)
+#define PL_cryptseen           (aTHXo->interp.Icryptseen)
+#define PL_cshlen              (aTHXo->interp.Icshlen)
+#define PL_cshname             (aTHXo->interp.Icshname)
+#define PL_curcopdb            (aTHXo->interp.Icurcopdb)
+#define PL_curstname           (aTHXo->interp.Icurstname)
+#define PL_curthr              (aTHXo->interp.Icurthr)
+#define PL_dbargs              (aTHXo->interp.Idbargs)
+#define PL_debstash            (aTHXo->interp.Idebstash)
+#define PL_debug               (aTHXo->interp.Idebug)
+#define PL_defgv               (aTHXo->interp.Idefgv)
+#define PL_diehook             (aTHXo->interp.Idiehook)
+#define PL_doextract           (aTHXo->interp.Idoextract)
+#define PL_doswitches          (aTHXo->interp.Idoswitches)
+#define PL_dowarn              (aTHXo->interp.Idowarn)
+#define PL_e_script            (aTHXo->interp.Ie_script)
+#define PL_egid                        (aTHXo->interp.Iegid)
+#define PL_endav               (aTHXo->interp.Iendav)
+#define PL_envgv               (aTHXo->interp.Ienvgv)
+#define PL_errgv               (aTHXo->interp.Ierrgv)
+#define PL_error_count         (aTHXo->interp.Ierror_count)
+#define PL_euid                        (aTHXo->interp.Ieuid)
+#define PL_eval_cond           (aTHXo->interp.Ieval_cond)
+#define PL_eval_mutex          (aTHXo->interp.Ieval_mutex)
+#define PL_eval_owner          (aTHXo->interp.Ieval_owner)
+#define PL_eval_root           (aTHXo->interp.Ieval_root)
+#define PL_eval_start          (aTHXo->interp.Ieval_start)
+#define PL_evalseq             (aTHXo->interp.Ievalseq)
+#define PL_exit_flags          (aTHXo->interp.Iexit_flags)
+#define PL_exitlist            (aTHXo->interp.Iexitlist)
+#define PL_exitlistlen         (aTHXo->interp.Iexitlistlen)
+#define PL_expect              (aTHXo->interp.Iexpect)
+#define PL_fdpid               (aTHXo->interp.Ifdpid)
+#define PL_filemode            (aTHXo->interp.Ifilemode)
+#define PL_forkprocess         (aTHXo->interp.Iforkprocess)
+#define PL_formfeed            (aTHXo->interp.Iformfeed)
+#define PL_generation          (aTHXo->interp.Igeneration)
+#define PL_gensym              (aTHXo->interp.Igensym)
+#define PL_gid                 (aTHXo->interp.Igid)
+#define PL_glob_index          (aTHXo->interp.Iglob_index)
+#define PL_globalstash         (aTHXo->interp.Iglobalstash)
+#define PL_he_root             (aTHXo->interp.Ihe_root)
+#define PL_hintgv              (aTHXo->interp.Ihintgv)
+#define PL_hints               (aTHXo->interp.Ihints)
+#define PL_in_clean_all                (aTHXo->interp.Iin_clean_all)
+#define PL_in_clean_objs       (aTHXo->interp.Iin_clean_objs)
+#define PL_in_my               (aTHXo->interp.Iin_my)
+#define PL_in_my_stash         (aTHXo->interp.Iin_my_stash)
+#define PL_incgv               (aTHXo->interp.Iincgv)
+#define PL_initav              (aTHXo->interp.Iinitav)
+#define PL_inplace             (aTHXo->interp.Iinplace)
+#define PL_last_lop            (aTHXo->interp.Ilast_lop)
+#define PL_last_lop_op         (aTHXo->interp.Ilast_lop_op)
+#define PL_last_swash_hv       (aTHXo->interp.Ilast_swash_hv)
+#define PL_last_swash_key      (aTHXo->interp.Ilast_swash_key)
+#define PL_last_swash_klen     (aTHXo->interp.Ilast_swash_klen)
+#define PL_last_swash_slen     (aTHXo->interp.Ilast_swash_slen)
+#define PL_last_swash_tmps     (aTHXo->interp.Ilast_swash_tmps)
+#define PL_last_uni            (aTHXo->interp.Ilast_uni)
+#define PL_lastfd              (aTHXo->interp.Ilastfd)
+#define PL_laststatval         (aTHXo->interp.Ilaststatval)
+#define PL_laststype           (aTHXo->interp.Ilaststype)
+#define PL_lex_brackets                (aTHXo->interp.Ilex_brackets)
+#define PL_lex_brackstack      (aTHXo->interp.Ilex_brackstack)
+#define PL_lex_casemods                (aTHXo->interp.Ilex_casemods)
+#define PL_lex_casestack       (aTHXo->interp.Ilex_casestack)
+#define PL_lex_defer           (aTHXo->interp.Ilex_defer)
+#define PL_lex_dojoin          (aTHXo->interp.Ilex_dojoin)
+#define PL_lex_expect          (aTHXo->interp.Ilex_expect)
+#define PL_lex_formbrack       (aTHXo->interp.Ilex_formbrack)
+#define PL_lex_inpat           (aTHXo->interp.Ilex_inpat)
+#define PL_lex_inwhat          (aTHXo->interp.Ilex_inwhat)
+#define PL_lex_op              (aTHXo->interp.Ilex_op)
+#define PL_lex_repl            (aTHXo->interp.Ilex_repl)
+#define PL_lex_starts          (aTHXo->interp.Ilex_starts)
+#define PL_lex_state           (aTHXo->interp.Ilex_state)
+#define PL_lex_stuff           (aTHXo->interp.Ilex_stuff)
+#define PL_lineary             (aTHXo->interp.Ilineary)
+#define PL_linestart           (aTHXo->interp.Ilinestart)
+#define PL_linestr             (aTHXo->interp.Ilinestr)
+#define PL_localpatches                (aTHXo->interp.Ilocalpatches)
+#define PL_main_cv             (aTHXo->interp.Imain_cv)
+#define PL_main_root           (aTHXo->interp.Imain_root)
+#define PL_main_start          (aTHXo->interp.Imain_start)
+#define PL_max_intro_pending   (aTHXo->interp.Imax_intro_pending)
+#define PL_maxo                        (aTHXo->interp.Imaxo)
+#define PL_maxsysfd            (aTHXo->interp.Imaxsysfd)
+#define PL_mess_sv             (aTHXo->interp.Imess_sv)
+#define PL_min_intro_pending   (aTHXo->interp.Imin_intro_pending)
+#define PL_minus_F             (aTHXo->interp.Iminus_F)
+#define PL_minus_a             (aTHXo->interp.Iminus_a)
+#define PL_minus_c             (aTHXo->interp.Iminus_c)
+#define PL_minus_l             (aTHXo->interp.Iminus_l)
+#define PL_minus_n             (aTHXo->interp.Iminus_n)
+#define PL_minus_p             (aTHXo->interp.Iminus_p)
+#define PL_modglobal           (aTHXo->interp.Imodglobal)
+#define PL_multi_close         (aTHXo->interp.Imulti_close)
+#define PL_multi_end           (aTHXo->interp.Imulti_end)
+#define PL_multi_open          (aTHXo->interp.Imulti_open)
+#define PL_multi_start         (aTHXo->interp.Imulti_start)
+#define PL_multiline           (aTHXo->interp.Imultiline)
+#define PL_nexttoke            (aTHXo->interp.Inexttoke)
+#define PL_nexttype            (aTHXo->interp.Inexttype)
+#define PL_nextval             (aTHXo->interp.Inextval)
+#define PL_nice_chunk          (aTHXo->interp.Inice_chunk)
+#define PL_nice_chunk_size     (aTHXo->interp.Inice_chunk_size)
+#define PL_nomemok             (aTHXo->interp.Inomemok)
+#define PL_nthreads            (aTHXo->interp.Inthreads)
+#define PL_nthreads_cond       (aTHXo->interp.Inthreads_cond)
+#define PL_nullstash           (aTHXo->interp.Inullstash)
+#define PL_numeric_local       (aTHXo->interp.Inumeric_local)
+#define PL_numeric_name                (aTHXo->interp.Inumeric_name)
+#define PL_numeric_radix       (aTHXo->interp.Inumeric_radix)
+#define PL_numeric_standard    (aTHXo->interp.Inumeric_standard)
+#define PL_ofmt                        (aTHXo->interp.Iofmt)
+#define PL_oldbufptr           (aTHXo->interp.Ioldbufptr)
+#define PL_oldname             (aTHXo->interp.Ioldname)
+#define PL_oldoldbufptr                (aTHXo->interp.Ioldoldbufptr)
+#define PL_op_mask             (aTHXo->interp.Iop_mask)
+#define PL_op_seqmax           (aTHXo->interp.Iop_seqmax)
+#define PL_origalen            (aTHXo->interp.Iorigalen)
+#define PL_origargc            (aTHXo->interp.Iorigargc)
+#define PL_origargv            (aTHXo->interp.Iorigargv)
+#define PL_origenviron         (aTHXo->interp.Iorigenviron)
+#define PL_origfilename                (aTHXo->interp.Iorigfilename)
+#define PL_ors                 (aTHXo->interp.Iors)
+#define PL_orslen              (aTHXo->interp.Iorslen)
+#define PL_osname              (aTHXo->interp.Iosname)
+#define PL_pad_reset_pending   (aTHXo->interp.Ipad_reset_pending)
+#define PL_padix               (aTHXo->interp.Ipadix)
+#define PL_padix_floor         (aTHXo->interp.Ipadix_floor)
+#define PL_patchlevel          (aTHXo->interp.Ipatchlevel)
+#define PL_pending_ident       (aTHXo->interp.Ipending_ident)
+#define PL_perl_destruct_level (aTHXo->interp.Iperl_destruct_level)
+#define PL_perldb              (aTHXo->interp.Iperldb)
+#define PL_pidstatus           (aTHXo->interp.Ipidstatus)
+#define PL_preambleav          (aTHXo->interp.Ipreambleav)
+#define PL_preambled           (aTHXo->interp.Ipreambled)
+#define PL_preprocess          (aTHXo->interp.Ipreprocess)
+#define PL_profiledata         (aTHXo->interp.Iprofiledata)
+#define PL_psig_name           (aTHXo->interp.Ipsig_name)
+#define PL_psig_ptr            (aTHXo->interp.Ipsig_ptr)
+#define PL_ptr_table           (aTHXo->interp.Iptr_table)
+#define PL_replgv              (aTHXo->interp.Ireplgv)
+#define PL_rsfp                        (aTHXo->interp.Irsfp)
+#define PL_rsfp_filters                (aTHXo->interp.Irsfp_filters)
+#define PL_runops              (aTHXo->interp.Irunops)
+#define PL_sawampersand                (aTHXo->interp.Isawampersand)
+#define PL_sh_path             (aTHXo->interp.Ish_path)
+#define PL_sighandlerp         (aTHXo->interp.Isighandlerp)
+#define PL_splitstr            (aTHXo->interp.Isplitstr)
+#define PL_srand_called                (aTHXo->interp.Isrand_called)
+#define PL_statusvalue         (aTHXo->interp.Istatusvalue)
+#define PL_statusvalue_vms     (aTHXo->interp.Istatusvalue_vms)
+#define PL_stderrgv            (aTHXo->interp.Istderrgv)
+#define PL_stdingv             (aTHXo->interp.Istdingv)
+#define PL_strtab              (aTHXo->interp.Istrtab)
+#define PL_strtab_mutex                (aTHXo->interp.Istrtab_mutex)
+#define PL_sub_generation      (aTHXo->interp.Isub_generation)
+#define PL_sublex_info         (aTHXo->interp.Isublex_info)
+#define PL_subline             (aTHXo->interp.Isubline)
+#define PL_subname             (aTHXo->interp.Isubname)
+#define PL_sv_arenaroot                (aTHXo->interp.Isv_arenaroot)
+#define PL_sv_count            (aTHXo->interp.Isv_count)
+#define PL_sv_mutex            (aTHXo->interp.Isv_mutex)
+#define PL_sv_no               (aTHXo->interp.Isv_no)
+#define PL_sv_objcount         (aTHXo->interp.Isv_objcount)
+#define PL_sv_root             (aTHXo->interp.Isv_root)
+#define PL_sv_undef            (aTHXo->interp.Isv_undef)
+#define PL_sv_yes              (aTHXo->interp.Isv_yes)
+#define PL_svref_mutex         (aTHXo->interp.Isvref_mutex)
+#define PL_sys_intern          (aTHXo->interp.Isys_intern)
+#define PL_tainting            (aTHXo->interp.Itainting)
+#define PL_threadnum           (aTHXo->interp.Ithreadnum)
+#define PL_threads_mutex       (aTHXo->interp.Ithreads_mutex)
+#define PL_threadsv_names      (aTHXo->interp.Ithreadsv_names)
+#define PL_thrsv               (aTHXo->interp.Ithrsv)
+#define PL_tokenbuf            (aTHXo->interp.Itokenbuf)
+#define PL_uid                 (aTHXo->interp.Iuid)
+#define PL_unsafe              (aTHXo->interp.Iunsafe)
+#define PL_utf8_alnum          (aTHXo->interp.Iutf8_alnum)
+#define PL_utf8_alnumc         (aTHXo->interp.Iutf8_alnumc)
+#define PL_utf8_alpha          (aTHXo->interp.Iutf8_alpha)
+#define PL_utf8_ascii          (aTHXo->interp.Iutf8_ascii)
+#define PL_utf8_cntrl          (aTHXo->interp.Iutf8_cntrl)
+#define PL_utf8_digit          (aTHXo->interp.Iutf8_digit)
+#define PL_utf8_graph          (aTHXo->interp.Iutf8_graph)
+#define PL_utf8_lower          (aTHXo->interp.Iutf8_lower)
+#define PL_utf8_mark           (aTHXo->interp.Iutf8_mark)
+#define PL_utf8_print          (aTHXo->interp.Iutf8_print)
+#define PL_utf8_punct          (aTHXo->interp.Iutf8_punct)
+#define PL_utf8_space          (aTHXo->interp.Iutf8_space)
+#define PL_utf8_tolower                (aTHXo->interp.Iutf8_tolower)
+#define PL_utf8_totitle                (aTHXo->interp.Iutf8_totitle)
+#define PL_utf8_toupper                (aTHXo->interp.Iutf8_toupper)
+#define PL_utf8_upper          (aTHXo->interp.Iutf8_upper)
+#define PL_utf8_xdigit         (aTHXo->interp.Iutf8_xdigit)
+#define PL_uudmap              (aTHXo->interp.Iuudmap)
+#define PL_warnhook            (aTHXo->interp.Iwarnhook)
+#define PL_widesyscalls                (aTHXo->interp.Iwidesyscalls)
+#define PL_xiv_arenaroot       (aTHXo->interp.Ixiv_arenaroot)
+#define PL_xiv_root            (aTHXo->interp.Ixiv_root)
+#define PL_xnv_root            (aTHXo->interp.Ixnv_root)
+#define PL_xpv_root            (aTHXo->interp.Ixpv_root)
+#define PL_xpvav_root          (aTHXo->interp.Ixpvav_root)
+#define PL_xpvbm_root          (aTHXo->interp.Ixpvbm_root)
+#define PL_xpvcv_root          (aTHXo->interp.Ixpvcv_root)
+#define PL_xpvhv_root          (aTHXo->interp.Ixpvhv_root)
+#define PL_xpviv_root          (aTHXo->interp.Ixpviv_root)
+#define PL_xpvlv_root          (aTHXo->interp.Ixpvlv_root)
+#define PL_xpvmg_root          (aTHXo->interp.Ixpvmg_root)
+#define PL_xpvnv_root          (aTHXo->interp.Ixpvnv_root)
+#define PL_xrv_root            (aTHXo->interp.Ixrv_root)
+#define PL_yychar              (aTHXo->interp.Iyychar)
+#define PL_yydebug             (aTHXo->interp.Iyydebug)
+#define PL_yyerrflag           (aTHXo->interp.Iyyerrflag)
+#define PL_yylval              (aTHXo->interp.Iyylval)
+#define PL_yynerrs             (aTHXo->interp.Iyynerrs)
+#define PL_yyval               (aTHXo->interp.Iyyval)
+
+#  else        /* !PERL_OBJECT */
+
+/* cases 1 and 4 above */
+
 #define PL_IArgv               PL_Argv
 #define PL_ICmd                        PL_Cmd
 #define PL_IDBcv               PL_DBcv
 #define PL_IEnv                        PL_Env
 #define PL_ILIO                        PL_LIO
 #define PL_IMem                        PL_Mem
+#define PL_IMemParse           PL_MemParse
+#define PL_IMemShared          PL_MemShared
 #define PL_IProc               PL_Proc
 #define PL_ISock               PL_Sock
 #define PL_IStdIO              PL_StdIO
 #define PL_Iamagic_generation  PL_amagic_generation
-#define PL_Iampergv            PL_ampergv
 #define PL_Ian                 PL_an
-#define PL_Iarchpat_auto       PL_archpat_auto
 #define PL_Iargvgv             PL_argvgv
+#define PL_Iargvout_stack      PL_argvout_stack
 #define PL_Iargvoutgv          PL_argvoutgv
 #define PL_Ibasetime           PL_basetime
 #define PL_Ibeginav            PL_beginav
 #define PL_Ibitcount           PL_bitcount
 #define PL_Ibufend             PL_bufend
 #define PL_Ibufptr             PL_bufptr
-#define PL_Icddir              PL_cddir
+#define PL_Icheckav            PL_checkav
 #define PL_Icollation_ix       PL_collation_ix
 #define PL_Icollation_name     PL_collation_name
 #define PL_Icollation_standard PL_collation_standard
 #define PL_Icurstname          PL_curstname
 #define PL_Icurthr             PL_curthr
 #define PL_Idbargs             PL_dbargs
-#define PL_Idebdelim           PL_debdelim
-#define PL_Idebname            PL_debname
 #define PL_Idebstash           PL_debstash
 #define PL_Idebug              PL_debug
 #define PL_Idefgv              PL_defgv
 #define PL_Idiehook            PL_diehook
-#define PL_Idlevel             PL_dlevel
-#define PL_Idlmax              PL_dlmax
 #define PL_Idoextract          PL_doextract
 #define PL_Idoswitches         PL_doswitches
 #define PL_Idowarn             PL_dowarn
 #define PL_Ie_script           PL_e_script
-#define PL_Iefloatbuf          PL_efloatbuf
-#define PL_Iefloatsize         PL_efloatsize
 #define PL_Iegid               PL_egid
 #define PL_Iendav              PL_endav
 #define PL_Ienvgv              PL_envgv
 #define PL_Ieval_root          PL_eval_root
 #define PL_Ieval_start         PL_eval_start
 #define PL_Ievalseq            PL_evalseq
+#define PL_Iexit_flags         PL_exit_flags
 #define PL_Iexitlist           PL_exitlist
 #define PL_Iexitlistlen                PL_exitlistlen
 #define PL_Iexpect             PL_expect
 #define PL_Ifdpid              PL_fdpid
 #define PL_Ifilemode           PL_filemode
-#define PL_Ifilter_debug       PL_filter_debug
 #define PL_Iforkprocess                PL_forkprocess
 #define PL_Iformfeed           PL_formfeed
 #define PL_Igeneration         PL_generation
 #define PL_Ilast_swash_tmps    PL_last_swash_tmps
 #define PL_Ilast_uni           PL_last_uni
 #define PL_Ilastfd             PL_lastfd
-#define PL_Ilastsize           PL_lastsize
-#define PL_Ilastspbase         PL_lastspbase
 #define PL_Ilaststatval                PL_laststatval
 #define PL_Ilaststype          PL_laststype
-#define PL_Ileftgv             PL_leftgv
 #define PL_Ilex_brackets       PL_lex_brackets
 #define PL_Ilex_brackstack     PL_lex_brackstack
 #define PL_Ilex_casemods       PL_lex_casemods
 #define PL_Ilex_defer          PL_lex_defer
 #define PL_Ilex_dojoin         PL_lex_dojoin
 #define PL_Ilex_expect         PL_lex_expect
-#define PL_Ilex_fakebrack      PL_lex_fakebrack
 #define PL_Ilex_formbrack      PL_lex_formbrack
 #define PL_Ilex_inpat          PL_lex_inpat
 #define PL_Ilex_inwhat         PL_lex_inwhat
 #define PL_Imain_cv            PL_main_cv
 #define PL_Imain_root          PL_main_root
 #define PL_Imain_start         PL_main_start
-#define PL_Imalloc_mutex       PL_malloc_mutex
 #define PL_Imax_intro_pending  PL_max_intro_pending
 #define PL_Imaxo               PL_maxo
 #define PL_Imaxsysfd           PL_maxsysfd
 #define PL_Imulti_open         PL_multi_open
 #define PL_Imulti_start                PL_multi_start
 #define PL_Imultiline          PL_multiline
-#define PL_Imystrk             PL_mystrk
 #define PL_Inexttoke           PL_nexttoke
 #define PL_Inexttype           PL_nexttype
 #define PL_Inextval            PL_nextval
 #define PL_Inomemok            PL_nomemok
 #define PL_Inthreads           PL_nthreads
 #define PL_Inthreads_cond      PL_nthreads_cond
+#define PL_Inullstash          PL_nullstash
 #define PL_Inumeric_local      PL_numeric_local
 #define PL_Inumeric_name       PL_numeric_name
 #define PL_Inumeric_radix      PL_numeric_radix
 #define PL_Inumeric_standard   PL_numeric_standard
 #define PL_Iofmt               PL_ofmt
 #define PL_Ioldbufptr          PL_oldbufptr
-#define PL_Ioldlastpm          PL_oldlastpm
 #define PL_Ioldname            PL_oldname
 #define PL_Ioldoldbufptr       PL_oldoldbufptr
 #define PL_Iop_mask            PL_op_mask
 #define PL_Ipad_reset_pending  PL_pad_reset_pending
 #define PL_Ipadix              PL_padix
 #define PL_Ipadix_floor                PL_padix_floor
-#define PL_Iparsehook          PL_parsehook
 #define PL_Ipatchlevel         PL_patchlevel
 #define PL_Ipending_ident      PL_pending_ident
 #define PL_Iperl_destruct_level        PL_perl_destruct_level
 #define PL_Ipreambled          PL_preambled
 #define PL_Ipreprocess         PL_preprocess
 #define PL_Iprofiledata                PL_profiledata
+#define PL_Ipsig_name          PL_psig_name
+#define PL_Ipsig_ptr           PL_psig_ptr
+#define PL_Iptr_table          PL_ptr_table
 #define PL_Ireplgv             PL_replgv
-#define PL_Irightgv            PL_rightgv
 #define PL_Irsfp               PL_rsfp
 #define PL_Irsfp_filters       PL_rsfp_filters
 #define PL_Irunops             PL_runops
 #define PL_Isawampersand       PL_sawampersand
-#define PL_Isawstudy           PL_sawstudy
-#define PL_Isawvec             PL_sawvec
 #define PL_Ish_path            PL_sh_path
-#define PL_Isiggv              PL_siggv
 #define PL_Isighandlerp                PL_sighandlerp
 #define PL_Isplitstr           PL_splitstr
 #define PL_Isrand_called       PL_srand_called
 #define PL_Istatusvalue                PL_statusvalue
 #define PL_Istatusvalue_vms    PL_statusvalue_vms
+#define PL_Istderrgv           PL_stderrgv
 #define PL_Istdingv            PL_stdingv
-#define PL_Istrchop            PL_strchop
 #define PL_Istrtab             PL_strtab
 #define PL_Istrtab_mutex       PL_strtab_mutex
 #define PL_Isub_generation     PL_sub_generation
 #define PL_Isvref_mutex                PL_svref_mutex
 #define PL_Isys_intern         PL_sys_intern
 #define PL_Itainting           PL_tainting
-#define PL_Ithisexpr           PL_thisexpr
-#define PL_Ithr_key            PL_thr_key
 #define PL_Ithreadnum          PL_threadnum
 #define PL_Ithreads_mutex      PL_threads_mutex
 #define PL_Ithreadsv_names     PL_threadsv_names
 #define PL_Iutf8_xdigit                PL_utf8_xdigit
 #define PL_Iuudmap             PL_uudmap
 #define PL_Iwarnhook           PL_warnhook
+#define PL_Iwidesyscalls       PL_widesyscalls
 #define PL_Ixiv_arenaroot      PL_xiv_arenaroot
 #define PL_Ixiv_root           PL_xiv_root
 #define PL_Ixnv_root           PL_xnv_root
 #define PL_Ixpv_root           PL_xpv_root
+#define PL_Ixpvav_root         PL_xpvav_root
+#define PL_Ixpvbm_root         PL_xpvbm_root
+#define PL_Ixpvcv_root         PL_xpvcv_root
+#define PL_Ixpvhv_root         PL_xpvhv_root
+#define PL_Ixpviv_root         PL_xpviv_root
+#define PL_Ixpvlv_root         PL_xpvlv_root
+#define PL_Ixpvmg_root         PL_xpvmg_root
+#define PL_Ixpvnv_root         PL_xpvnv_root
 #define PL_Ixrv_root           PL_xrv_root
 #define PL_Iyychar             PL_yychar
 #define PL_Iyydebug            PL_yydebug
 #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_efloatbuf           (aTHX->Tefloatbuf)
+#define PL_efloatsize          (aTHX->Tefloatsize)
+#define PL_errors              (aTHX->Terrors)
+#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 */
+/* case 1 above */
 
 #define PL_TSv                 PL_Sv
 #define PL_TXpv                        PL_Xpv
 #define PL_Tdelaymagic         PL_delaymagic
 #define PL_Tdirty              PL_dirty
 #define PL_Tdumpindent         PL_dumpindent
+#define PL_Tefloatbuf          PL_efloatbuf
+#define PL_Tefloatsize         PL_efloatsize
+#define PL_Terrors             PL_errors
 #define PL_Textralen           PL_extralen
 #define PL_Tfirstgv            PL_firstgv
 #define PL_Tformtarget         PL_formtarget
 #define PL_Treg_eval_set       PL_reg_eval_set
 #define PL_Treg_flags          PL_reg_flags
 #define PL_Treg_ganch          PL_reg_ganch
+#define PL_Treg_leftiter       PL_reg_leftiter
 #define PL_Treg_magic          PL_reg_magic
+#define PL_Treg_maxiter                PL_reg_maxiter
 #define PL_Treg_oldcurpm       PL_reg_oldcurpm
 #define PL_Treg_oldpos         PL_reg_oldpos
 #define PL_Treg_oldsaved       PL_reg_oldsaved
 #define PL_Treg_oldsavedlen    PL_reg_oldsavedlen
+#define PL_Treg_poscache       PL_reg_poscache
+#define PL_Treg_poscache_size  PL_reg_poscache_size
 #define PL_Treg_re             PL_reg_re
 #define PL_Treg_start_tmp      PL_reg_start_tmp
 #define PL_Treg_start_tmpl     PL_reg_start_tmpl
 #define PL_Treg_starttry       PL_reg_starttry
 #define PL_Treg_sv             PL_reg_sv
+#define PL_Treg_whilem_seen    PL_reg_whilem_seen
 #define PL_Tregbol             PL_regbol
 #define PL_Tregcc              PL_regcc
 #define PL_Tregcode            PL_regcode
 #define PL_Twatchaddr          PL_watchaddr
 #define PL_Twatchok            PL_watchok
 
-#endif /* USE_THREADS */
-
-/* Hide what would have been interpreter-specific symbols? */
-
-
-#ifndef USE_THREADS
-
-
-#endif /* USE_THREADS */
-#endif /* MULTIPLICITY */
+#    endif     /* USE_THREADS */
+#  endif       /* PERL_OBJECT */
+#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_magic           (thr->Treg_magic)
-#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_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_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_curinterp           (PL_Vars.Gcurinterp)
 #define PL_do_undump           (PL_Vars.Gdo_undump)
 #define PL_hexdigit            (PL_Vars.Ghexdigit)
+#define PL_malloc_mutex                (PL_Vars.Gmalloc_mutex)
+#define PL_op_mutex            (PL_Vars.Gop_mutex)
 #define PL_patleave            (PL_Vars.Gpatleave)
+#define PL_thr_key             (PL_Vars.Gthr_key)
 
 #else /* !PERL_GLOBAL_STRUCT */
 
 #define PL_Gcurinterp          PL_curinterp
 #define PL_Gdo_undump          PL_do_undump
 #define PL_Ghexdigit           PL_hexdigit
+#define PL_Gmalloc_mutex       PL_malloc_mutex
+#define PL_Gop_mutex           PL_op_mutex
 #define PL_Gpatleave           PL_patleave
-
+#define PL_Gthr_key            PL_thr_key
 
 #endif /* PERL_GLOBAL_STRUCT */
 
-
-#ifdef PERL_POLLUTE            /* disabled by default in 5.006 */
+#ifdef PERL_POLLUTE            /* disabled by default in 5.6.0 */
 
 #define DBsingle               PL_DBsingle
 #define DBsub                  PL_DBsub