summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embed.h493
-rwxr-xr-xembed.pl155
-rw-r--r--embedvar.h609
-rw-r--r--global.sym27
-rw-r--r--interp.sym4
-rw-r--r--intrpvar.h86
-rw-r--r--perl.h84
-rw-r--r--perlvars.h20
-rw-r--r--regcomp.c5
-rw-r--r--thrdvar.h59
-rw-r--r--thread.h119
-rw-r--r--win32/Makefile3
-rw-r--r--win32/makedef.pl32
13 files changed, 912 insertions, 784 deletions
diff --git a/embed.h b/embed.h
index caa19369f9..8a475a9e39 100644
--- a/embed.h
+++ b/embed.h
@@ -1,6 +1,6 @@
/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from global.sym and interp.sym.
- Any changes made here will be lost!
+ This file is built by embed.pl from global.sym, intrpvar.h,
+ and thrdvar.h. Any changes made here will be lost!
*/
/* (Doing namespace management portably in C is really gross.) */
@@ -23,8 +23,6 @@
#define Error Perl_Error
#define Gv_AMupdate Perl_Gv_AMupdate
#define No Perl_No
-#define Sv Perl_Sv
-#define Xpv Perl_Xpv
#define Yes Perl_Yes
#define abs_amg Perl_abs_amg
#define add_amg Perl_add_amg
@@ -141,7 +139,6 @@
#define cshlen Perl_cshlen
#define cshname Perl_cshname
#define curinterp Perl_curinterp
-#define curpad Perl_curpad
#define cv_ckproto Perl_cv_ckproto
#define cv_clone Perl_cv_clone
#define cv_const_sv Perl_cv_const_sv
@@ -210,6 +207,9 @@
#define eq_amg Perl_eq_amg
#define error_count Perl_error_count
#define euid Perl_euid
+#define eval_cond Perl_eval_cond
+#define eval_mutex Perl_eval_mutex
+#define eval_owner Perl_eval_owner
#define evalseq Perl_evalseq
#define exp_amg Perl_exp_amg
#define expect Perl_expect
@@ -373,10 +373,7 @@
#define magic_wipepack Perl_magic_wipepack
#define magicname Perl_magicname
#define malloc_mutex Perl_malloc_mutex
-#define markstack Perl_markstack
#define markstack_grow Perl_markstack_grow
-#define markstack_max Perl_markstack_max
-#define markstack_ptr Perl_markstack_ptr
#define max_intro_pending Perl_max_intro_pending
#define maxo Perl_maxo
#define mem_collxfrm Perl_mem_collxfrm
@@ -506,13 +503,11 @@
#define oopsAV Perl_oopsAV
#define oopsCV Perl_oopsCV
#define oopsHV Perl_oopsHV
-#define op Perl_op
#define op_desc Perl_op_desc
#define op_free Perl_op_free
#define op_name Perl_op_name
#define op_seqmax Perl_op_seqmax
#define opargs Perl_opargs
-#define opsave Perl_opsave
#define origalen Perl_origalen
#define origenviron Perl_origenviron
#define osname Perl_osname
@@ -911,9 +906,6 @@
#define repeat_amg Perl_repeat_amg
#define repeat_ass_amg Perl_repeat_ass_amg
#define repeatcpy Perl_repeatcpy
-#define retstack Perl_retstack
-#define retstack_ix Perl_retstack_ix
-#define retstack_max Perl_retstack_max
#define rninstr Perl_rninstr
#define rsfp Perl_rsfp
#define rsfp_filters Perl_rsfp_filters
@@ -965,10 +957,7 @@
#define save_threadsv Perl_save_threadsv
#define savepv Perl_savepv
#define savepvn Perl_savepvn
-#define savestack Perl_savestack
#define savestack_grow Perl_savestack_grow
-#define savestack_ix Perl_savestack_ix
-#define savestack_max Perl_savestack_max
#define saw_return Perl_saw_return
#define sawparens Perl_sawparens
#define scalar Perl_scalar
@@ -991,9 +980,6 @@
#define scan_word Perl_scan_word
#define scmp_amg Perl_scmp_amg
#define scope Perl_scope
-#define scopestack Perl_scopestack
-#define scopestack_ix Perl_scopestack_ix
-#define scopestack_max Perl_scopestack_max
#define screaminstr Perl_screaminstr
#define scrgv Perl_scrgv
#define seq_amg Perl_seq_amg
@@ -1015,12 +1001,8 @@
#define slt_amg Perl_slt_amg
#define sne_amg Perl_sne_amg
#define sqrt_amg Perl_sqrt_amg
-#define stack_base Perl_stack_base
#define stack_grow Perl_stack_grow
-#define stack_max Perl_stack_max
-#define stack_sp Perl_stack_sp
#define start_subparse Perl_start_subparse
-#define statbuf Perl_statbuf
#define string_amg Perl_string_amg
#define sub_crush_depth Perl_sub_crush_depth
#define sub_generation Perl_sub_generation
@@ -1067,6 +1049,7 @@
#define sv_len Perl_sv_len
#define sv_magic Perl_sv_magic
#define sv_mortalcopy Perl_sv_mortalcopy
+#define sv_mutex Perl_sv_mutex
#define sv_newmortal Perl_sv_newmortal
#define sv_newref Perl_sv_newref
#define sv_no Perl_sv_no
@@ -1111,7 +1094,6 @@
#define thr_key Perl_thr_key
#define threads_mutex Perl_threads_mutex
#define threadsv_names Perl_threadsv_names
-#define timesbuf Perl_timesbuf
#define tokenbuf Perl_tokenbuf
#define too_few_arguments Perl_too_few_arguments
#define too_many_arguments Perl_too_many_arguments
@@ -1144,6 +1126,7 @@
#define vtbl_pack Perl_vtbl_pack
#define vtbl_packelem Perl_vtbl_packelem
#define vtbl_pos Perl_vtbl_pos
+#define vtbl_regexp Perl_vtbl_regexp
#define vtbl_sig Perl_vtbl_sig
#define vtbl_sigelem Perl_vtbl_sigelem
#define vtbl_substr Perl_vtbl_substr
@@ -1191,465 +1174,3 @@
#endif /* EMBED */
-/* Put interpreter-specific symbols into a struct? */
-
-#ifdef MULTIPLICITY
-
-#define Argv (curinterp->IArgv)
-#define Cmd (curinterp->ICmd)
-#define DBgv (curinterp->IDBgv)
-#define DBline (curinterp->IDBline)
-#define DBsignal (curinterp->IDBsignal)
-#define DBsingle (curinterp->IDBsingle)
-#define DBsub (curinterp->IDBsub)
-#define DBtrace (curinterp->IDBtrace)
-#define allgvs (curinterp->Iallgvs)
-#define ampergv (curinterp->Iampergv)
-#define argvgv (curinterp->Iargvgv)
-#define argvoutgv (curinterp->Iargvoutgv)
-#define basetime (curinterp->Ibasetime)
-#define beginav (curinterp->Ibeginav)
-#define bodytarget (curinterp->Ibodytarget)
-#define cddir (curinterp->Icddir)
-#define chopset (curinterp->Ichopset)
-#define copline (curinterp->Icopline)
-#define curblock (curinterp->Icurblock)
-#define curcop (curinterp->Icurcop)
-#define curcopdb (curinterp->Icurcopdb)
-#define curcsv (curinterp->Icurcsv)
-#define curpm (curinterp->Icurpm)
-#define curstack (curinterp->Icurstack)
-#define curstash (curinterp->Icurstash)
-#define curstname (curinterp->Icurstname)
-#define cxstack (curinterp->Icxstack)
-#define cxstack_ix (curinterp->Icxstack_ix)
-#define cxstack_max (curinterp->Icxstack_max)
-#define dbargs (curinterp->Idbargs)
-#define debdelim (curinterp->Idebdelim)
-#define debname (curinterp->Idebname)
-#define debstash (curinterp->Idebstash)
-#define defgv (curinterp->Idefgv)
-#define defoutgv (curinterp->Idefoutgv)
-#define defstash (curinterp->Idefstash)
-#define delaymagic (curinterp->Idelaymagic)
-#define diehook (curinterp->Idiehook)
-#define dirty (curinterp->Idirty)
-#define dlevel (curinterp->Idlevel)
-#define dlmax (curinterp->Idlmax)
-#define doextract (curinterp->Idoextract)
-#define doswitches (curinterp->Idoswitches)
-#define dowarn (curinterp->Idowarn)
-#define dumplvl (curinterp->Idumplvl)
-#define e_fp (curinterp->Ie_fp)
-#define e_tmpname (curinterp->Ie_tmpname)
-#define endav (curinterp->Iendav)
-#define envgv (curinterp->Ienvgv)
-#define errgv (curinterp->Ierrgv)
-#define eval_root (curinterp->Ieval_root)
-#define eval_start (curinterp->Ieval_start)
-#define fdpid (curinterp->Ifdpid)
-#define filemode (curinterp->Ifilemode)
-#define firstgv (curinterp->Ifirstgv)
-#define forkprocess (curinterp->Iforkprocess)
-#define formfeed (curinterp->Iformfeed)
-#define formtarget (curinterp->Iformtarget)
-#define gensym (curinterp->Igensym)
-#define globalstash (curinterp->Iglobalstash)
-#define in_eval (curinterp->Iin_eval)
-#define incgv (curinterp->Iincgv)
-#define initav (curinterp->Iinitav)
-#define inplace (curinterp->Iinplace)
-#define last_in_gv (curinterp->Ilast_in_gv)
-#define lastfd (curinterp->Ilastfd)
-#define lastretstr (curinterp->Ilastretstr)
-#define lastscream (curinterp->Ilastscream)
-#define lastsize (curinterp->Ilastsize)
-#define lastspbase (curinterp->Ilastspbase)
-#define laststatval (curinterp->Ilaststatval)
-#define laststype (curinterp->Ilaststype)
-#define leftgv (curinterp->Ileftgv)
-#define lineary (curinterp->Ilineary)
-#define localizing (curinterp->Ilocalizing)
-#define localpatches (curinterp->Ilocalpatches)
-#define main_cv (curinterp->Imain_cv)
-#define main_root (curinterp->Imain_root)
-#define main_start (curinterp->Imain_start)
-#define mainstack (curinterp->Imainstack)
-#define maxscream (curinterp->Imaxscream)
-#define maxsysfd (curinterp->Imaxsysfd)
-#define mess_sv (curinterp->Imess_sv)
-#define minus_F (curinterp->Iminus_F)
-#define minus_a (curinterp->Iminus_a)
-#define minus_c (curinterp->Iminus_c)
-#define minus_l (curinterp->Iminus_l)
-#define minus_n (curinterp->Iminus_n)
-#define minus_p (curinterp->Iminus_p)
-#define multiline (curinterp->Imultiline)
-#define mystrk (curinterp->Imystrk)
-#define nrs (curinterp->Inrs)
-#define ofmt (curinterp->Iofmt)
-#define ofs (curinterp->Iofs)
-#define ofslen (curinterp->Iofslen)
-#define oldlastpm (curinterp->Ioldlastpm)
-#define oldname (curinterp->Ioldname)
-#define op_mask (curinterp->Iop_mask)
-#define origargc (curinterp->Iorigargc)
-#define origargv (curinterp->Iorigargv)
-#define origfilename (curinterp->Iorigfilename)
-#define ors (curinterp->Iors)
-#define orslen (curinterp->Iorslen)
-#define parsehook (curinterp->Iparsehook)
-#define patchlevel (curinterp->Ipatchlevel)
-#define perl_destruct_level (curinterp->Iperl_destruct_level)
-#define perldb (curinterp->Iperldb)
-#define preambleav (curinterp->Ipreambleav)
-#define preambled (curinterp->Ipreambled)
-#define preprocess (curinterp->Ipreprocess)
-#define restartop (curinterp->Irestartop)
-#define rightgv (curinterp->Irightgv)
-#define rs (curinterp->Irs)
-#define sawampersand (curinterp->Isawampersand)
-#define sawstudy (curinterp->Isawstudy)
-#define sawvec (curinterp->Isawvec)
-#define screamfirst (curinterp->Iscreamfirst)
-#define screamnext (curinterp->Iscreamnext)
-#define secondgv (curinterp->Isecondgv)
-#define siggv (curinterp->Isiggv)
-#define signalstack (curinterp->Isignalstack)
-#define sortcop (curinterp->Isortcop)
-#define sortstack (curinterp->Isortstack)
-#define sortstash (curinterp->Isortstash)
-#define splitstr (curinterp->Isplitstr)
-#define start_env (curinterp->Istart_env)
-#define statcache (curinterp->Istatcache)
-#define statgv (curinterp->Istatgv)
-#define statname (curinterp->Istatname)
-#define statusvalue (curinterp->Istatusvalue)
-#define statusvalue_vms (curinterp->Istatusvalue_vms)
-#define stdingv (curinterp->Istdingv)
-#define strchop (curinterp->Istrchop)
-#define strtab (curinterp->Istrtab)
-#define sv_arenaroot (curinterp->Isv_arenaroot)
-#define sv_count (curinterp->Isv_count)
-#define sv_objcount (curinterp->Isv_objcount)
-#define sv_root (curinterp->Isv_root)
-#define tainted (curinterp->Itainted)
-#define tainting (curinterp->Itainting)
-#define thrsv (curinterp->Ithrsv)
-#define tmps_floor (curinterp->Itmps_floor)
-#define tmps_ix (curinterp->Itmps_ix)
-#define tmps_max (curinterp->Itmps_max)
-#define tmps_stack (curinterp->Itmps_stack)
-#define top_env (curinterp->Itop_env)
-#define toptarget (curinterp->Itoptarget)
-#define unsafe (curinterp->Iunsafe)
-#define warnhook (curinterp->Iwarnhook)
-
-#else /* !MULTIPLICITY */
-
-#define IArgv Argv
-#define ICmd Cmd
-#define IDBgv DBgv
-#define IDBline DBline
-#define IDBsignal DBsignal
-#define IDBsingle DBsingle
-#define IDBsub DBsub
-#define IDBtrace DBtrace
-#define Iallgvs allgvs
-#define Iampergv ampergv
-#define Iargvgv argvgv
-#define Iargvoutgv argvoutgv
-#define Ibasetime basetime
-#define Ibeginav beginav
-#define Ibodytarget bodytarget
-#define Icddir cddir
-#define Ichopset chopset
-#define Icopline copline
-#define Icurblock curblock
-#define Icurcop curcop
-#define Icurcopdb curcopdb
-#define Icurcsv curcsv
-#define Icurpm curpm
-#define Icurstack curstack
-#define Icurstash curstash
-#define Icurstname curstname
-#define Icxstack cxstack
-#define Icxstack_ix cxstack_ix
-#define Icxstack_max cxstack_max
-#define Idbargs dbargs
-#define Idebdelim debdelim
-#define Idebname debname
-#define Idebstash debstash
-#define Idefgv defgv
-#define Idefoutgv defoutgv
-#define Idefstash defstash
-#define Idelaymagic delaymagic
-#define Idiehook diehook
-#define Idirty dirty
-#define Idlevel dlevel
-#define Idlmax dlmax
-#define Idoextract doextract
-#define Idoswitches doswitches
-#define Idowarn dowarn
-#define Idumplvl dumplvl
-#define Ie_fp e_fp
-#define Ie_tmpname e_tmpname
-#define Iendav endav
-#define Ienvgv envgv
-#define Ierrgv errgv
-#define Ieval_root eval_root
-#define Ieval_start eval_start
-#define Ifdpid fdpid
-#define Ifilemode filemode
-#define Ifirstgv firstgv
-#define Iforkprocess forkprocess
-#define Iformfeed formfeed
-#define Iformtarget formtarget
-#define Igensym gensym
-#define Iglobalstash globalstash
-#define Iin_eval in_eval
-#define Iincgv incgv
-#define Iinitav initav
-#define Iinplace inplace
-#define Ilast_in_gv last_in_gv
-#define Ilastfd lastfd
-#define Ilastretstr lastretstr
-#define Ilastscream lastscream
-#define Ilastsize lastsize
-#define Ilastspbase lastspbase
-#define Ilaststatval laststatval
-#define Ilaststype laststype
-#define Ileftgv leftgv
-#define Ilineary lineary
-#define Ilocalizing localizing
-#define Ilocalpatches localpatches
-#define Imain_cv main_cv
-#define Imain_root main_root
-#define Imain_start main_start
-#define Imainstack mainstack
-#define Imaxscream maxscream
-#define Imaxsysfd maxsysfd
-#define Imess_sv mess_sv
-#define Iminus_F minus_F
-#define Iminus_a minus_a
-#define Iminus_c minus_c
-#define Iminus_l minus_l
-#define Iminus_n minus_n
-#define Iminus_p minus_p
-#define Imultiline multiline
-#define Imystrk mystrk
-#define Inrs nrs
-#define Iofmt ofmt
-#define Iofs ofs
-#define Iofslen ofslen
-#define Ioldlastpm oldlastpm
-#define Ioldname oldname
-#define Iop_mask op_mask
-#define Iorigargc origargc
-#define Iorigargv origargv
-#define Iorigfilename origfilename
-#define Iors ors
-#define Iorslen orslen
-#define Iparsehook parsehook
-#define Ipatchlevel patchlevel
-#define Iperl_destruct_level perl_destruct_level
-#define Iperldb perldb
-#define Ipreambleav preambleav
-#define Ipreambled preambled
-#define Ipreprocess preprocess
-#define Irestartop restartop
-#define Irightgv rightgv
-#define Irs rs
-#define Isawampersand sawampersand
-#define Isawstudy sawstudy
-#define Isawvec sawvec
-#define Iscreamfirst screamfirst
-#define Iscreamnext screamnext
-#define Isecondgv secondgv
-#define Isiggv siggv
-#define Isignalstack signalstack
-#define Isortcop sortcop
-#define Isortstack sortstack
-#define Isortstash sortstash
-#define Isplitstr splitstr
-#define Istart_env start_env
-#define Istatcache statcache
-#define Istatgv statgv
-#define Istatname statname
-#define Istatusvalue statusvalue
-#define Istatusvalue_vms statusvalue_vms
-#define Istdingv stdingv
-#define Istrchop strchop
-#define Istrtab strtab
-#define Isv_arenaroot sv_arenaroot
-#define Isv_count sv_count
-#define Isv_objcount sv_objcount
-#define Isv_root sv_root
-#define Itainted tainted
-#define Itainting tainting
-#define Ithrsv thrsv
-#define Itmps_floor tmps_floor
-#define Itmps_ix tmps_ix
-#define Itmps_max tmps_max
-#define Itmps_stack tmps_stack
-#define Itop_env top_env
-#define Itoptarget toptarget
-#define Iunsafe unsafe
-#define Iwarnhook warnhook
-
-/* Hide interpreter-specific symbols? */
-
-#ifdef EMBED
-
-#define Argv Perl_Argv
-#define Cmd Perl_Cmd
-#define DBgv Perl_DBgv
-#define DBline Perl_DBline
-#define DBsignal Perl_DBsignal
-#define DBsingle Perl_DBsingle
-#define DBsub Perl_DBsub
-#define DBtrace Perl_DBtrace
-#define allgvs Perl_allgvs
-#define ampergv Perl_ampergv
-#define argvgv Perl_argvgv
-#define argvoutgv Perl_argvoutgv
-#define basetime Perl_basetime
-#define beginav Perl_beginav
-#define bodytarget Perl_bodytarget
-#define cddir Perl_cddir
-#define chopset Perl_chopset
-#define copline Perl_copline
-#define curblock Perl_curblock
-#define curcop Perl_curcop
-#define curcopdb Perl_curcopdb
-#define curcsv Perl_curcsv
-#define curpm Perl_curpm
-#define curstack Perl_curstack
-#define curstash Perl_curstash
-#define curstname Perl_curstname
-#define cxstack Perl_cxstack
-#define cxstack_ix Perl_cxstack_ix
-#define cxstack_max Perl_cxstack_max
-#define dbargs Perl_dbargs
-#define debdelim Perl_debdelim
-#define debname Perl_debname
-#define debstash Perl_debstash
-#define defgv Perl_defgv
-#define defoutgv Perl_defoutgv
-#define defstash Perl_defstash
-#define delaymagic Perl_delaymagic
-#define diehook Perl_diehook
-#define dirty Perl_dirty
-#define dlevel Perl_dlevel
-#define dlmax Perl_dlmax
-#define doextract Perl_doextract
-#define doswitches Perl_doswitches
-#define dowarn Perl_dowarn
-#define dumplvl Perl_dumplvl
-#define e_fp Perl_e_fp
-#define e_tmpname Perl_e_tmpname
-#define endav Perl_endav
-#define envgv Perl_envgv
-#define errgv Perl_errgv
-#define eval_root Perl_eval_root
-#define eval_start Perl_eval_start
-#define fdpid Perl_fdpid
-#define filemode Perl_filemode
-#define firstgv Perl_firstgv
-#define forkprocess Perl_forkprocess
-#define formfeed Perl_formfeed
-#define formtarget Perl_formtarget
-#define gensym Perl_gensym
-#define globalstash Perl_globalstash
-#define in_eval Perl_in_eval
-#define incgv Perl_incgv
-#define initav Perl_initav
-#define inplace Perl_inplace
-#define last_in_gv Perl_last_in_gv
-#define lastfd Perl_lastfd
-#define lastretstr Perl_lastretstr
-#define lastscream Perl_lastscream
-#define lastsize Perl_lastsize
-#define lastspbase Perl_lastspbase
-#define laststatval Perl_laststatval
-#define laststype Perl_laststype
-#define leftgv Perl_leftgv
-#define lineary Perl_lineary
-#define localizing Perl_localizing
-#define localpatches Perl_localpatches
-#define main_cv Perl_main_cv
-#define main_root Perl_main_root
-#define main_start Perl_main_start
-#define mainstack Perl_mainstack
-#define maxscream Perl_maxscream
-#define maxsysfd Perl_maxsysfd
-#define mess_sv Perl_mess_sv
-#define minus_F Perl_minus_F
-#define minus_a Perl_minus_a
-#define minus_c Perl_minus_c
-#define minus_l Perl_minus_l
-#define minus_n Perl_minus_n
-#define minus_p Perl_minus_p
-#define multiline Perl_multiline
-#define mystrk Perl_mystrk
-#define nrs Perl_nrs
-#define ofmt Perl_ofmt
-#define ofs Perl_ofs
-#define ofslen Perl_ofslen
-#define oldlastpm Perl_oldlastpm
-#define oldname Perl_oldname
-#define op_mask Perl_op_mask
-#define origargc Perl_origargc
-#define origargv Perl_origargv
-#define origfilename Perl_origfilename
-#define ors Perl_ors
-#define orslen Perl_orslen
-#define parsehook Perl_parsehook
-#define patchlevel Perl_patchlevel
-#define perl_destruct_level Perl_perl_destruct_level
-#define perldb Perl_perldb
-#define preambleav Perl_preambleav
-#define preambled Perl_preambled
-#define preprocess Perl_preprocess
-#define restartop Perl_restartop
-#define rightgv Perl_rightgv
-#define rs Perl_rs
-#define sawampersand Perl_sawampersand
-#define sawstudy Perl_sawstudy
-#define sawvec Perl_sawvec
-#define screamfirst Perl_screamfirst
-#define screamnext Perl_screamnext
-#define secondgv Perl_secondgv
-#define siggv Perl_siggv
-#define signalstack Perl_signalstack
-#define sortcop Perl_sortcop
-#define sortstack Perl_sortstack
-#define sortstash Perl_sortstash
-#define splitstr Perl_splitstr
-#define start_env Perl_start_env
-#define statcache Perl_statcache
-#define statgv Perl_statgv
-#define statname Perl_statname
-#define statusvalue Perl_statusvalue
-#define statusvalue_vms Perl_statusvalue_vms
-#define stdingv Perl_stdingv
-#define strchop Perl_strchop
-#define strtab Perl_strtab
-#define sv_arenaroot Perl_sv_arenaroot
-#define sv_count Perl_sv_count
-#define sv_objcount Perl_sv_objcount
-#define sv_root Perl_sv_root
-#define tainted Perl_tainted
-#define tainting Perl_tainting
-#define thrsv Perl_thrsv
-#define tmps_floor Perl_tmps_floor
-#define tmps_ix Perl_tmps_ix
-#define tmps_max Perl_tmps_max
-#define tmps_stack Perl_tmps_stack
-#define top_env Perl_top_env
-#define toptarget Perl_toptarget
-#define unsafe Perl_unsafe
-#define warnhook Perl_warnhook
-
-#endif /* EMBED */
-#endif /* MULTIPLICITY */
diff --git a/embed.pl b/embed.pl
index 68a15df1bd..c981b4298d 100755
--- a/embed.pl
+++ b/embed.pl
@@ -20,6 +20,54 @@ sub readsyms (\%$) {
readsyms %global, 'global.sym';
readsyms %interp, 'interp.sym';
+sub readvars(\%$$) {
+ my ($syms, $file,$pre) = @_;
+ %$syms = ();
+ local (*FILE, $_);
+ open(FILE, "< $file")
+ or die "embed.pl: Can't open $file: $!\n";
+ while (<FILE>) {
+ s/[ \t]*#.*//; # Delete comments.
+ if (/PERLVARI?\($pre(\w+)/) {
+ $$syms{$1} = $pre;
+ }
+ }
+ close(FILE);
+}
+
+my %intrp;
+my %thread;
+
+readvars %intrp, 'intrpvar.h','I';
+readvars %thread, 'thrdvar.h','T';
+#readvars %global, 'perlvars.h','';
+
+foreach my $sym (sort keys %intrp)
+ {
+ warn "$sym not in interp.sym\n" unless exists $interp{$sym};
+ if (exists $global{$sym})
+ {
+ delete $global{$sym};
+ warn "$sym in global.sym as well as interp\n";
+ }
+ }
+
+foreach my $sym (keys %interp)
+ {
+ warn "extra $sym in interp.sym\n"
+ unless exists $intrp{$sym} || exists $thread{$sym};
+ }
+
+foreach my $sym (sort keys %thread)
+ {
+ warn "$sym in intrpvar.h\n" if exists $intrp{$sym};
+ if (exists $global{$sym})
+ {
+ delete $global{$sym};
+ warn "$sym in global.sym as well as thread\n";
+ }
+ }
+
sub hide ($$) {
my ($from, $to) = @_;
my $t = int(length($from) / 8);
@@ -29,13 +77,13 @@ sub embed ($) {
my ($sym) = @_;
hide($sym, "Perl_$sym");
}
-sub multon ($) {
- my ($sym) = @_;
- hide($sym, "(curinterp->I$sym)");
+sub multon ($$$) {
+ my ($sym,$pre,$ptr) = @_;
+ hide($sym, "($ptr->$pre$sym)");
}
-sub multoff ($) {
- my ($sym) = @_;
- hide("I$sym", $sym);
+sub multoff ($$) {
+ my ($sym,$pre) = @_;
+ hide("$pre$sym", $sym);
}
unlink 'embed.h';
@@ -44,8 +92,8 @@ open(EM, '> embed.h')
print EM <<'END';
/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from global.sym and interp.sym.
- Any changes made here will be lost!
+ This file is built by embed.pl from global.sym, intrpvar.h,
+ and thrdvar.h. Any changes made here will be lost!
*/
/* (Doing namespace management portably in C is really gross.) */
@@ -70,19 +118,57 @@ for $sym (sort keys %global) {
print EM embed($sym);
}
-
print EM <<'END';
#endif /* EMBED */
+END
+
+close(EM);
+
+unlink 'embedvar.h';
+open(EM, '> embedvar.h')
+ or die "Can't create embedvar.h: $!\n";
+
+print EM <<'END';
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+ This file is built by embed.pl from global.sym, intrpvar.h,
+ and thrdvar.h. Any changes made here will be lost!
+*/
+
+/* (Doing namespace management portably in C is really gross.) */
+
+/* EMBED has no run-time penalty, but helps keep the Perl namespace
+ from colliding with that used by other libraries pulled in
+ by extensions or by embedding perl. Allow a cc -DNO_EMBED
+ override, however, to keep binary compatability with previous
+ versions of perl.
+*/
+
+
/* Put interpreter-specific symbols into a struct? */
#ifdef MULTIPLICITY
+#ifndef USE_THREADS
+/* If we do not have threads then per-thread vars are per-interpreter */
+
END
-for $sym (sort keys %interp) {
- print EM multon($sym);
+for $sym (sort keys %thread) {
+ print EM multon($sym,'T','curinterp');
+}
+
+print EM <<'END';
+
+#endif /* !USE_THREADS */
+
+/* These are always per-interpreter if there is more than one */
+
+END
+
+for $sym (sort keys %intrp) {
+ print EM multon($sym,'I','curinterp');
}
print EM <<'END';
@@ -91,25 +177,64 @@ print EM <<'END';
END
-for $sym (sort keys %interp) {
- print EM multoff($sym);
+for $sym (sort keys %intrp) {
+ print EM multoff($sym,'I');
}
print EM <<'END';
-/* Hide interpreter-specific symbols? */
+#ifndef USE_THREADS
+
+END
+
+for $sym (sort keys %thread) {
+ print EM multoff($sym,'T');
+}
+
+print EM <<'END';
+
+#endif /* USE_THREADS */
+
+/* Hide what would have been interpreter-specific symbols? */
#ifdef EMBED
END
-for $sym (sort keys %interp) {
+for $sym (sort keys %intrp) {
+ print EM embed($sym);
+}
+
+print EM <<'END';
+
+#ifndef USE_THREADS
+
+END
+
+for $sym (sort keys %thread) {
print EM embed($sym);
}
print EM <<'END';
+#endif /* USE_THREADS */
#endif /* EMBED */
#endif /* MULTIPLICITY */
+
+/* Now same trickey for per-thread variables */
+
+#ifdef USE_THREADS
+
+END
+
+for $sym (sort keys %thread) {
+ print EM multon($sym,'T','thr');
+}
+
+print EM <<'END';
+
+#endif /* USE_THREADS */
+
END
+close(EM); \ No newline at end of file
diff --git a/embedvar.h b/embedvar.h
new file mode 100644
index 0000000000..b68624ab69
--- /dev/null
+++ b/embedvar.h
@@ -0,0 +1,609 @@
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+ This file is built by embed.pl from global.sym, intrpvar.h,
+ and thrdvar.h. Any changes made here will be lost!
+*/
+
+/* (Doing namespace management portably in C is really gross.) */
+
+/* EMBED has no run-time penalty, but helps keep the Perl namespace
+ from colliding with that used by other libraries pulled in
+ by extensions or by embedding perl. Allow a cc -DNO_EMBED
+ override, however, to keep binary compatability with previous
+ versions of perl.
+*/
+
+
+/* Put interpreter-specific symbols into a struct? */
+
+#ifdef MULTIPLICITY
+
+#ifndef USE_THREADS
+/* If we do not have threads then per-thread vars are per-interpreter */
+
+#define Sv (curinterp->TSv)
+#define Xpv (curinterp->TXpv)
+#define bodytarget (curinterp->Tbodytarget)
+#define chopset (curinterp->Tchopset)
+#define curcop (curinterp->Tcurcop)
+#define curpad (curinterp->Tcurpad)
+#define curpm (curinterp->Tcurpm)
+#define curstack (curinterp->Tcurstack)
+#define curstash (curinterp->Tcurstash)
+#define cxstack (curinterp->Tcxstack)
+#define cxstack_ix (curinterp->Tcxstack_ix)
+#define cxstack_max (curinterp->Tcxstack_max)
+#define defoutgv (curinterp->Tdefoutgv)
+#define defstash (curinterp->Tdefstash)
+#define delaymagic (curinterp->Tdelaymagic)
+#define dirty (curinterp->Tdirty)
+#define formtarget (curinterp->Tformtarget)
+#define in_eval (curinterp->Tin_eval)
+#define last_in_gv (curinterp->Tlast_in_gv)
+#define localizing (curinterp->Tlocalizing)
+#define mainstack (curinterp->Tmainstack)
+#define markstack (curinterp->Tmarkstack)
+#define markstack_max (curinterp->Tmarkstack_max)
+#define markstack_ptr (curinterp->Tmarkstack_ptr)
+#define nrs (curinterp->Tnrs)
+#define ofs (curinterp->Tofs)
+#define ofslen (curinterp->Tofslen)
+#define op (curinterp->Top)
+#define opsave (curinterp->Topsave)
+#define restartop (curinterp->Trestartop)
+#define retstack (curinterp->Tretstack)
+#define retstack_ix (curinterp->Tretstack_ix)
+#define retstack_max (curinterp->Tretstack_max)
+#define rs (curinterp->Trs)
+#define savestack (curinterp->Tsavestack)
+#define savestack_ix (curinterp->Tsavestack_ix)
+#define savestack_max (curinterp->Tsavestack_max)
+#define scopestack (curinterp->Tscopestack)
+#define scopestack_ix (curinterp->Tscopestack_ix)
+#define scopestack_max (curinterp->Tscopestack_max)
+#define stack_base (curinterp->Tstack_base)
+#define stack_max (curinterp->Tstack_max)
+#define stack_sp (curinterp->Tstack_sp)
+#define start_env (curinterp->Tstart_env)
+#define statbuf (curinterp->Tstatbuf)
+#define tainted (curinterp->Ttainted)
+#define timesbuf (curinterp->Ttimesbuf)
+#define tmps_floor (curinterp->Ttmps_floor)
+#define tmps_ix (curinterp->Ttmps_ix)
+#define tmps_max (curinterp->Ttmps_max)
+#define tmps_stack (curinterp->Ttmps_stack)
+#define top_env (curinterp->Ttop_env)
+#define toptarget (curinterp->Ttoptarget)
+
+#endif /* !USE_THREADS */
+
+/* These are always per-interpreter if there is more than one */
+
+#define Argv (curinterp->IArgv)
+#define Cmd (curinterp->ICmd)
+#define DBgv (curinterp->IDBgv)
+#define DBline (curinterp->IDBline)
+#define DBsignal (curinterp->IDBsignal)
+#define DBsingle (curinterp->IDBsingle)
+#define DBsub (curinterp->IDBsub)
+#define DBtrace (curinterp->IDBtrace)
+#define ampergv (curinterp->Iampergv)
+#define argvgv (curinterp->Iargvgv)
+#define argvoutgv (curinterp->Iargvoutgv)
+#define basetime (curinterp->Ibasetime)
+#define beginav (curinterp->Ibeginav)
+#define cddir (curinterp->Icddir)
+#define copline (curinterp->Icopline)
+#define curcopdb (curinterp->Icurcopdb)
+#define curstname (curinterp->Icurstname)
+#define dbargs (curinterp->Idbargs)
+#define debdelim (curinterp->Idebdelim)
+#define debname (curinterp->Idebname)
+#define debstash (curinterp->Idebstash)
+#define defgv (curinterp->Idefgv)
+#define diehook (curinterp->Idiehook)
+#define dlevel (curinterp->Idlevel)
+#define dlmax (curinterp->Idlmax)
+#define doextract (curinterp->Idoextract)
+#define doswitches (curinterp->Idoswitches)
+#define dowarn (curinterp->Idowarn)
+#define dumplvl (curinterp->Idumplvl)
+#define e_fp (curinterp->Ie_fp)
+#define e_tmpname (curinterp->Ie_tmpname)
+#define endav (curinterp->Iendav)
+#define envgv (curinterp->Ienvgv)
+#define errgv (curinterp->Ierrgv)
+#define eval_root (curinterp->Ieval_root)
+#define eval_start (curinterp->Ieval_start)
+#define fdpid (curinterp->Ifdpid)
+#define filemode (curinterp->Ifilemode)
+#define firstgv (curinterp->Ifirstgv)
+#define forkprocess (curinterp->Iforkprocess)
+#define formfeed (curinterp->Iformfeed)
+#define gensym (curinterp->Igensym)
+#define globalstash (curinterp->Iglobalstash)
+#define incgv (curinterp->Iincgv)
+#define initav (curinterp->Iinitav)
+#define inplace (curinterp->Iinplace)
+#define lastfd (curinterp->Ilastfd)
+#define lastscream (curinterp->Ilastscream)
+#define lastsize (curinterp->Ilastsize)
+#define lastspbase (curinterp->Ilastspbase)
+#define laststatval (curinterp->Ilaststatval)
+#define laststype (curinterp->Ilaststype)
+#define leftgv (curinterp->Ileftgv)
+#define lineary (curinterp->Ilineary)
+#define localpatches (curinterp->Ilocalpatches)
+#define main_cv (curinterp->Imain_cv)
+#define main_root (curinterp->Imain_root)
+#define main_start (curinterp->Imain_start)
+#define maxscream (curinterp->Imaxscream)
+#define maxsysfd (curinterp->Imaxsysfd)
+#define mess_sv (curinterp->Imess_sv)
+#define minus_F (curinterp->Iminus_F)
+#define minus_a (curinterp->Iminus_a)
+#define minus_c (curinterp->Iminus_c)
+#define minus_l (curinterp->Iminus_l)
+#define minus_n (curinterp->Iminus_n)
+#define minus_p (curinterp->Iminus_p)
+#define multiline (curinterp->Imultiline)
+#define mystrk (curinterp->Imystrk)
+#define ofmt (curinterp->Iofmt)
+#define oldlastpm (curinterp->Ioldlastpm)
+#define oldname (curinterp->Ioldname)
+#define op_mask (curinterp->Iop_mask)
+#define origargc (curinterp->Iorigargc)
+#define origargv (curinterp->Iorigargv)
+#define origfilename (curinterp->Iorigfilename)
+#define ors (curinterp->Iors)
+#define orslen (curinterp->Iorslen)
+#define parsehook (curinterp->Iparsehook)
+#define patchlevel (curinterp->Ipatchlevel)
+#define perl_destruct_level (curinterp->Iperl_destruct_level)
+#define perldb (curinterp->Iperldb)
+#define preambleav (curinterp->Ipreambleav)
+#define preambled (curinterp->Ipreambled)
+#define preprocess (curinterp->Ipreprocess)
+#define rightgv (curinterp->Irightgv)
+#define sawampersand (curinterp->Isawampersand)
+#define sawstudy (curinterp->Isawstudy)
+#define sawvec (curinterp->Isawvec)
+#define screamfirst (curinterp->Iscreamfirst)
+#define screamnext (curinterp->Iscreamnext)
+#define secondgv (curinterp->Isecondgv)
+#define siggv (curinterp->Isiggv)
+#define signalstack (curinterp->Isignalstack)
+#define sortcop (curinterp->Isortcop)
+#define sortstack (curinterp->Isortstack)
+#define sortstash (curinterp->Isortstash)
+#define splitstr (curinterp->Isplitstr)
+#define statcache (curinterp->Istatcache)
+#define statgv (curinterp->Istatgv)
+#define statname (curinterp->Istatname)
+#define statusvalue (curinterp->Istatusvalue)
+#define statusvalue_vms (curinterp->Istatusvalue_vms)
+#define stdingv (curinterp->Istdingv)
+#define strchop (curinterp->Istrchop)
+#define strtab (curinterp->Istrtab)
+#define sv_arenaroot (curinterp->Isv_arenaroot)
+#define sv_count (curinterp->Isv_count)
+#define sv_objcount (curinterp->Isv_objcount)
+#define sv_root (curinterp->Isv_root)
+#define tainting (curinterp->Itainting)
+#define thrsv (curinterp->Ithrsv)
+#define unsafe (curinterp->Iunsafe)
+#define warnhook (curinterp->Iwarnhook)
+
+#else /* !MULTIPLICITY */
+
+#define IArgv Argv
+#define ICmd Cmd
+#define IDBgv DBgv
+#define IDBline DBline
+#define IDBsignal DBsignal
+#define IDBsingle DBsingle
+#define IDBsub DBsub
+#define IDBtrace DBtrace
+#define Iampergv ampergv
+#define Iargvgv argvgv
+#define Iargvoutgv argvoutgv
+#define Ibasetime basetime
+#define Ibeginav beginav
+#define Icddir cddir
+#define Icopline copline
+#define Icurcopdb curcopdb
+#define Icurstname curstname
+#define Idbargs dbargs
+#define Idebdelim debdelim
+#define Idebname debname
+#define Idebstash debstash
+#define Idefgv defgv
+#define Idiehook diehook
+#define Idlevel dlevel
+#define Idlmax dlmax
+#define Idoextract doextract
+#define Idoswitches doswitches
+#define Idowarn dowarn
+#define Idumplvl dumplvl
+#define Ie_fp e_fp
+#define Ie_tmpname e_tmpname
+#define Iendav endav
+#define Ienvgv envgv
+#define Ierrgv errgv
+#define Ieval_root eval_root
+#define Ieval_start eval_start
+#define Ifdpid fdpid
+#define Ifilemode filemode
+#define Ifirstgv firstgv
+#define Iforkprocess forkprocess
+#define Iformfeed formfeed
+#define Igensym gensym
+#define Iglobalstash globalstash
+#define Iincgv incgv
+#define Iinitav initav
+#define Iinplace inplace
+#define Ilastfd lastfd
+#define Ilastscream lastscream
+#define Ilastsize lastsize
+#define Ilastspbase lastspbase
+#define Ilaststatval laststatval
+#define Ilaststype laststype
+#define Ileftgv leftgv
+#define Ilineary lineary
+#define Ilocalpatches localpatches
+#define Imain_cv main_cv
+#define Imain_root main_root
+#define Imain_start main_start
+#define Imaxscream maxscream
+#define Imaxsysfd maxsysfd
+#define Imess_sv mess_sv
+#define Iminus_F minus_F
+#define Iminus_a minus_a
+#define Iminus_c minus_c
+#define Iminus_l minus_l
+#define Iminus_n minus_n
+#define Iminus_p minus_p
+#define Imultiline multiline
+#define Imystrk mystrk
+#define Iofmt ofmt
+#define Ioldlastpm oldlastpm
+#define Ioldname oldname
+#define Iop_mask op_mask
+#define Iorigargc origargc
+#define Iorigargv origargv
+#define Iorigfilename origfilename
+#define Iors ors
+#define Iorslen orslen
+#define Iparsehook parsehook
+#define Ipatchlevel patchlevel
+#define Iperl_destruct_level perl_destruct_level
+#define Iperldb perldb
+#define Ipreambleav preambleav
+#define Ipreambled preambled
+#define Ipreprocess preprocess
+#define Irightgv rightgv
+#define Isawampersand sawampersand
+#define Isawstudy sawstudy
+#define Isawvec sawvec
+#define Iscreamfirst screamfirst
+#define Iscreamnext screamnext
+#define Isecondgv secondgv
+#define Isiggv siggv
+#define Isignalstack signalstack
+#define Isortcop sortcop
+#define Isortstack sortstack
+#define Isortstash sortstash
+#define Isplitstr splitstr
+#define Istatcache statcache
+#define Istatgv statgv
+#define Istatname statname
+#define Istatusvalue statusvalue
+#define Istatusvalue_vms statusvalue_vms
+#define Istdingv stdingv
+#define Istrchop strchop
+#define Istrtab strtab
+#define Isv_arenaroot sv_arenaroot
+#define Isv_count sv_count
+#define Isv_objcount sv_objcount
+#define Isv_root sv_root
+#define Itainting tainting
+#define Ithrsv thrsv
+#define Iunsafe unsafe
+#define Iwarnhook warnhook
+
+#ifndef USE_THREADS
+
+#define TSv Sv
+#define TXpv Xpv
+#define Tbodytarget bodytarget
+#define Tchopset chopset
+#define Tcurcop curcop
+#define Tcurpad curpad
+#define Tcurpm curpm
+#define Tcurstack curstack
+#define Tcurstash curstash
+#define Tcxstack cxstack
+#define Tcxstack_ix cxstack_ix
+#define Tcxstack_max cxstack_max
+#define Tdefoutgv defoutgv
+#define Tdefstash defstash
+#define Tdelaymagic delaymagic
+#define Tdirty dirty
+#define Tformtarget formtarget
+#define Tin_eval in_eval
+#define Tlast_in_gv last_in_gv
+#define Tlocalizing localizing
+#define Tmainstack mainstack
+#define Tmarkstack markstack
+#define Tmarkstack_max markstack_max
+#define Tmarkstack_ptr markstack_ptr
+#define Tnrs nrs
+#define Tofs ofs
+#define Tofslen ofslen
+#define Top op
+#define Topsave opsave
+#define Trestartop restartop
+#define Tretstack retstack
+#define Tretstack_ix retstack_ix
+#define Tretstack_max retstack_max
+#define Trs rs
+#define Tsavestack savestack
+#define Tsavestack_ix savestack_ix
+#define Tsavestack_max savestack_max
+#define Tscopestack scopestack
+#define Tscopestack_ix scopestack_ix
+#define Tscopestack_max scopestack_max
+#define Tstack_base stack_base
+#define Tstack_max stack_max
+#define Tstack_sp stack_sp
+#define Tstart_env start_env
+#define Tstatbuf statbuf
+#define Ttainted tainted
+#define Ttimesbuf timesbuf
+#define Ttmps_floor tmps_floor
+#define Ttmps_ix tmps_ix
+#define Ttmps_max tmps_max
+#define Ttmps_stack tmps_stack
+#define Ttop_env top_env
+#define Ttoptarget toptarget
+
+#endif /* USE_THREADS */
+
+/* Hide what would have been interpreter-specific symbols? */
+
+#ifdef EMBED
+
+#define Argv Perl_Argv
+#define Cmd Perl_Cmd
+#define DBgv Perl_DBgv
+#define DBline Perl_DBline
+#define DBsignal Perl_DBsignal
+#define DBsingle Perl_DBsingle
+#define DBsub Perl_DBsub
+#define DBtrace Perl_DBtrace
+#define ampergv Perl_ampergv
+#define argvgv Perl_argvgv
+#define argvoutgv Perl_argvoutgv
+#define basetime Perl_basetime
+#define beginav Perl_beginav
+#define cddir Perl_cddir
+#define copline Perl_copline
+#define curcopdb Perl_curcopdb
+#define curstname Perl_curstname
+#define dbargs Perl_dbargs
+#define debdelim Perl_debdelim
+#define debname Perl_debname
+#define debstash Perl_debstash
+#define defgv Perl_defgv
+#define diehook Perl_diehook
+#define dlevel Perl_dlevel
+#define dlmax Perl_dlmax
+#define doextract Perl_doextract
+#define doswitches Perl_doswitches
+#define dowarn Perl_dowarn
+#define dumplvl Perl_dumplvl
+#define e_fp Perl_e_fp
+#define e_tmpname Perl_e_tmpname
+#define endav Perl_endav
+#define envgv Perl_envgv
+#define errgv Perl_errgv
+#define eval_root Perl_eval_root
+#define eval_start Perl_eval_start
+#define fdpid Perl_fdpid
+#define filemode Perl_filemode
+#define firstgv Perl_firstgv
+#define forkprocess Perl_forkprocess
+#define formfeed Perl_formfeed
+#define gensym Perl_gensym
+#define globalstash Perl_globalstash
+#define incgv Perl_incgv
+#define initav Perl_initav
+#define inplace Perl_inplace
+#define lastfd Perl_lastfd
+#define lastscream Perl_lastscream
+#define lastsize Perl_lastsize
+#define lastspbase Perl_lastspbase
+#define laststatval Perl_laststatval
+#define laststype Perl_laststype
+#define leftgv Perl_leftgv
+#define lineary Perl_lineary
+#define localpatches Perl_localpatches
+#define main_cv Perl_main_cv
+#define main_root Perl_main_root
+#define main_start Perl_main_start
+#define maxscream Perl_maxscream
+#define maxsysfd Perl_maxsysfd
+#define mess_sv Perl_mess_sv
+#define minus_F Perl_minus_F
+#define minus_a Perl_minus_a
+#define minus_c Perl_minus_c
+#define minus_l Perl_minus_l
+#define minus_n Perl_minus_n
+#define minus_p Perl_minus_p
+#define multiline Perl_multiline
+#define mystrk Perl_mystrk
+#define ofmt Perl_ofmt
+#define oldlastpm Perl_oldlastpm
+#define oldname Perl_oldname
+#define op_mask Perl_op_mask
+#define origargc Perl_origargc
+#define origargv Perl_origargv
+#define origfilename Perl_origfilename
+#define ors Perl_ors
+#define orslen Perl_orslen
+#define parsehook Perl_parsehook
+#define patchlevel Perl_patchlevel
+#define perl_destruct_level Perl_perl_destruct_level
+#define perldb Perl_perldb
+#define preambleav Perl_preambleav
+#define preambled Perl_preambled
+#define preprocess Perl_preprocess
+#define rightgv Perl_rightgv
+#define sawampersand Perl_sawampersand
+#define sawstudy Perl_sawstudy
+#define sawvec Perl_sawvec
+#define screamfirst Perl_screamfirst
+#define screamnext Perl_screamnext
+#define secondgv Perl_secondgv
+#define siggv Perl_siggv
+#define signalstack Perl_signalstack
+#define sortcop Perl_sortcop
+#define sortstack Perl_sortstack
+#define sortstash Perl_sortstash
+#define splitstr Perl_splitstr
+#define statcache Perl_statcache
+#define statgv Perl_statgv
+#define statname Perl_statname
+#define statusvalue Perl_statusvalue
+#define statusvalue_vms Perl_statusvalue_vms
+#define stdingv Perl_stdingv
+#define strchop Perl_strchop
+#define strtab Perl_strtab
+#define sv_arenaroot Perl_sv_arenaroot
+#define sv_count Perl_sv_count
+#define sv_objcount Perl_sv_objcount
+#define sv_root Perl_sv_root
+#define tainting Perl_tainting
+#define thrsv Perl_thrsv
+#define unsafe Perl_unsafe
+#define warnhook Perl_warnhook
+
+#ifndef USE_THREADS
+
+#define Sv Perl_Sv
+#define Xpv Perl_Xpv
+#define bodytarget Perl_bodytarget
+#define chopset Perl_chopset
+#define curcop Perl_curcop
+#define curpad Perl_curpad
+#define curpm Perl_curpm
+#define curstack Perl_curstack
+#define curstash Perl_curstash
+#define cxstack Perl_cxstack
+#define cxstack_ix Perl_cxstack_ix
+#define cxstack_max Perl_cxstack_max
+#define defoutgv Perl_defoutgv
+#define defstash Perl_defstash
+#define delaymagic Perl_delaymagic
+#define dirty Perl_dirty
+#define formtarget Perl_formtarget
+#define in_eval Perl_in_eval
+#define last_in_gv Perl_last_in_gv
+#define localizing Perl_localizing
+#define mainstack Perl_mainstack
+#define markstack Perl_markstack
+#define markstack_max Perl_markstack_max
+#define markstack_ptr Perl_markstack_ptr
+#define nrs Perl_nrs
+#define ofs Perl_ofs
+#define ofslen Perl_ofslen
+#define op Perl_op
+#define opsave Perl_opsave
+#define restartop Perl_restartop
+#define retstack Perl_retstack
+#define retstack_ix Perl_retstack_ix
+#define retstack_max Perl_retstack_max
+#define rs Perl_rs
+#define savestack Perl_savestack
+#define savestack_ix Perl_savestack_ix
+#define savestack_max Perl_savestack_max
+#define scopestack Perl_scopestack
+#define scopestack_ix Perl_scopestack_ix
+#define scopestack_max Perl_scopestack_max
+#define stack_base Perl_stack_base
+#define stack_max Perl_stack_max
+#define stack_sp Perl_stack_sp
+#define start_env Perl_start_env
+#define statbuf Perl_statbuf
+#define tainted Perl_tainted
+#define timesbuf Perl_timesbuf
+#define tmps_floor Perl_tmps_floor
+#define tmps_ix Perl_tmps_ix
+#define tmps_max Perl_tmps_max
+#define tmps_stack Perl_tmps_stack
+#define top_env Perl_top_env
+#define toptarget Perl_toptarget
+
+#endif /* USE_THREADS */
+#endif /* EMBED */
+#endif /* MULTIPLICITY */
+
+/* Now same trickey for per-thread variables */
+
+#ifdef USE_THREADS
+
+#define Sv (thr->TSv)
+#define Xpv (thr->TXpv)
+#define bodytarget (thr->Tbodytarget)
+#define chopset (thr->Tchopset)
+#define curcop (thr->Tcurcop)
+#define curpad (thr->Tcurpad)
+#define curpm (thr->Tcurpm)
+#define curstack (thr->Tcurstack)
+#define curstash (thr->Tcurstash)
+#define cxstack (thr->Tcxstack)
+#define cxstack_ix (thr->Tcxstack_ix)
+#define cxstack_max (thr->Tcxstack_max)
+#define defoutgv (thr->Tdefoutgv)
+#define defstash (thr->Tdefstash)
+#define delaymagic (thr->Tdelaymagic)
+#define dirty (thr->Tdirty)
+#define formtarget (thr->Tformtarget)
+#define in_eval (thr->Tin_eval)
+#define last_in_gv (thr->Tlast_in_gv)
+#define localizing (thr->Tlocalizing)
+#define mainstack (thr->Tmainstack)
+#define markstack (thr->Tmarkstack)
+#define markstack_max (thr->Tmarkstack_max)
+#define markstack_ptr (thr->Tmarkstack_ptr)
+#define nrs (thr->Tnrs)
+#define ofs (thr->Tofs)
+#define ofslen (thr->Tofslen)
+#define op (thr->Top)
+#define opsave (thr->Topsave)
+#define restartop (thr->Trestartop)
+#define retstack (thr->Tretstack)
+#define retstack_ix (thr->Tretstack_ix)
+#define retstack_max (thr->Tretstack_max)
+#define rs (thr->Trs)
+#define savestack (thr->Tsavestack)
+#define savestack_ix (thr->Tsavestack_ix)
+#define savestack_max (thr->Tsavestack_max)
+#define scopestack (thr->Tscopestack)
+#define scopestack_ix (thr->Tscopestack_ix)
+#define scopestack_max (thr->Tscopestack_max)
+#define stack_base (thr->Tstack_base)
+#define stack_max (thr->Tstack_max)
+#define stack_sp (thr->Tstack_sp)
+#define start_env (thr->Tstart_env)
+#define statbuf (thr->Tstatbuf)
+#define tainted (thr->Ttainted)
+#define timesbuf (thr->Ttimesbuf)
+#define tmps_floor (thr->Ttmps_floor)
+#define tmps_ix (thr->Ttmps_ix)
+#define tmps_max (thr->Ttmps_max)
+#define tmps_stack (thr->Ttmps_stack)
+#define top_env (thr->Ttop_env)
+#define toptarget (thr->Ttoptarget)
+
+#endif /* USE_THREADS */
+
diff --git a/global.sym b/global.sym
index 0298c962f6..6e976600e6 100644
--- a/global.sym
+++ b/global.sym
@@ -7,8 +7,6 @@ threads_mutex
AMG_names
Error
No
-Sv
-Xpv
Yes
abs_amg
add_amg
@@ -45,7 +43,6 @@ cryptseen
cshlen
cshname
curinterp
-curpad
dc
debug
dec_amg
@@ -103,9 +100,6 @@ log_amg
lshift_amg
lshift_ass_amg
lt_amg
-markstack
-markstack_max
-markstack_ptr
max_intro_pending
maxo
min_intro_pending
@@ -151,12 +145,10 @@ numeric_standard
numer_amg
oldbufptr
oldoldbufptr
-op
op_desc
op_name
op_seqmax
opargs
-opsave
origalen
origenviron
osname
@@ -180,9 +172,6 @@ regnext
regprop
repeat_amg
repeat_ass_amg
-retstack
-retstack_ix
-retstack_max
rsfp
rsfp_filters
rshift_amg
@@ -190,14 +179,8 @@ rshift_ass_amg
runops
runops_debug
runops_standard
-savestack
-savestack_ix
-savestack_max
saw_return
scmp_amg
-scopestack
-scopestack_ix
-scopestack_max
scrgv
seq_amg
sge_amg
@@ -211,10 +194,6 @@ sle_amg
slt_amg
sne_amg
sqrt_amg
-stack_base
-stack_max
-stack_sp
-statbuf
string_amg
sub_generation
subline
@@ -227,7 +206,6 @@ sv_yes
thisexpr
threadsv_names
thr_key
-timesbuf
tokenbuf
uid
varies
@@ -253,6 +231,7 @@ vtbl_nkeys
vtbl_pack
vtbl_packelem
vtbl_pos
+vtbl_regexp
vtbl_sig
vtbl_sigelem
vtbl_substr
@@ -427,6 +406,9 @@ dump_op
dump_packsubs
dump_pm
dump_sub
+eval_cond
+eval_mutex
+eval_owner
fbm_compile
fbm_instr
fetch_gv
@@ -1123,6 +1105,7 @@ sv_isobject
sv_len
sv_magic
sv_mortalcopy
+sv_mutex
sv_newmortal
sv_newref
sv_peek
diff --git a/interp.sym b/interp.sym
index f50711b802..e95a9162c4 100644
--- a/interp.sym
+++ b/interp.sym
@@ -6,7 +6,6 @@ DBsignal
DBsingle
DBsub
DBtrace
-allgvs
ampergv
argvgv
argvoutgv
@@ -16,10 +15,8 @@ bodytarget
cddir
chopset
copline
-curblock
curcop
curcopdb
-curcsv
curpm
curstack
curstash
@@ -64,7 +61,6 @@ initav
inplace
last_in_gv
lastfd
-lastretstr
lastscream
lastsize
lastspbase
diff --git a/intrpvar.h b/intrpvar.h
index 0393b8f4d2..b724e414e6 100644
--- a/intrpvar.h
+++ b/intrpvar.h
@@ -5,19 +5,17 @@
/* pseudo environmental stuff */
PERLVAR(Iorigargc, int)
PERLVAR(Iorigargv, char **)
-PERLVAR(Ienvgv, GV *)
-PERLVAR(Isiggv, GV *)
-PERLVAR(Iincgv, GV *)
+PERLVAR(Ienvgv, GV *)
+PERLVAR(Isiggv, GV *)
+PERLVAR(Iincgv, GV *)
PERLVAR(Iorigfilename, char *)
PERLVAR(Idiehook, SV *)
PERLVAR(Iwarnhook, SV *)
PERLVAR(Iparsehook, SV *)
-/* switches */
-PERLVAR(Icddir, char *)
+PERLVAR(Icddir, char *) /* switches */
PERLVAR(Iminus_c, bool)
-PERLVAR(Ipatchlevel[10], char)
+PERLVAR(Ipatchlevel[10],char)
PERLVAR(Ilocalpatches, char **)
-PERLVAR(Inrs, SV *)
PERLVARI(Isplitstr, char *, " ")
PERLVAR(Ipreprocess, bool)
PERLVAR(Iminus_n, bool)
@@ -34,21 +32,18 @@ PERLVAR(Isawvec, bool)
PERLVAR(Iunsafe, bool)
PERLVAR(Iinplace, char *)
PERLVAR(Ie_tmpname, char *)
-PERLVAR(Ie_fp, PerlIO *)
+PERLVAR(Ie_fp, PerlIO *)
PERLVAR(Iperldb, U32)
- /* This value may be raised by extensions for testing purposes */
-PERLVARI(Iperl_destruct_level, int, 0) /* 0=none, 1=full, 2=full with checks */
+
+/* This value may be raised by extensions for testing purposes */
+/* 0=none, 1=full, 2=full with checks */
+PERLVARI(Iperl_destruct_level, int, 0)
/* magical thingies */
PERLVAR(Ibasetime, Time_t) /* $^T */
PERLVAR(Iformfeed, SV *) /* $^L */
-PERLVARI(Ichopset, char *, " \n-") /* $: */
-PERLVAR(Irs, SV *) /* $/ */
-PERLVAR(Iofs, char *) /* $, */
-PERLVAR(Iofslen, STRLEN)
-PERLVAR(Iors, char *) /* $\ */
-PERLVAR(Iorslen, STRLEN)
-PERLVAR(Iofmt, char *) /* $# */
+
+
PERLVARI(Imaxsysfd, I32, MAXSYSFD) /* top fd to pass to subprocesses */
PERLVAR(Imultiline, int) /* $*--do strings hold >1 line? */
PERLVAR(Istatusvalue, I32) /* $? */
@@ -56,35 +51,32 @@ PERLVAR(Istatusvalue, I32) /* $? */
PERLVAR(Istatusvalue_vms, U32)
#endif
-PERLVAR(Istatcache, struct stat) /* _ */
+PERLVAR(Istatcache, struct stat) /* _ */
PERLVAR(Istatgv, GV *)
PERLVARI(Istatname, SV *, Nullsv)
/* shortcuts to various I/O objects */
PERLVAR(Istdingv, GV *)
-PERLVAR(Ilast_in_gv, GV *)
-PERLVAR(Idefgv, GV *)
+PERLVAR(Idefgv, GV *)
PERLVAR(Iargvgv, GV *)
-PERLVAR(Idefoutgv, GV *)
PERLVAR(Iargvoutgv, GV *)
/* shortcuts to regexp stuff */
PERLVAR(Ileftgv, GV *)
PERLVAR(Iampergv, GV *)
PERLVAR(Irightgv, GV *)
-PERLVAR(Icurpm, PMOP *) /* what to do \ interps from */
PERLVAR(Iscreamfirst, I32 *)
PERLVAR(Iscreamnext, I32 *)
PERLVARI(Imaxscream, I32, -1)
PERLVAR(Ilastscream, SV *)
/* shortcuts to misc objects */
-PERLVAR(Ierrgv, GV *)
+PERLVAR(Ierrgv, GV *)
/* shortcuts to debugging objects */
-PERLVAR(IDBgv, GV *)
+PERLVAR(IDBgv, GV *)
PERLVAR(IDBline, GV *)
-PERLVAR(IDBsub, GV *)
+PERLVAR(IDBsub, GV *)
PERLVAR(IDBsingle, SV *)
PERLVAR(IDBtrace, SV *)
PERLVAR(IDBsignal, SV *)
@@ -92,21 +84,15 @@ PERLVAR(Ilineary, AV *) /* lines of script for debugger */
PERLVAR(Idbargs, AV *) /* args to call listed by caller function */
/* symbol tables */
-PERLVAR(Idefstash, HV *) /* main symbol table */
-PERLVAR(Icurstash, HV *) /* symbol table for current package */
PERLVAR(Idebstash, HV *) /* symbol table for perldb package */
PERLVAR(Iglobalstash, HV *) /* global keyword overrides imported here */
PERLVAR(Icurstname, SV *) /* name of current package */
PERLVAR(Ibeginav, AV *) /* names of BEGIN subroutines */
-PERLVAR(Iendav, AV *) /* names of END subroutines */
+PERLVAR(Iendav, AV *) /* names of END subroutines */
PERLVAR(Iinitav, AV *) /* names of INIT subroutines */
PERLVAR(Istrtab, HV *) /* shared string table */
/* memory management */
-PERLVAR(Itmps_stack, SV **)
-PERLVARI(Itmps_ix, I32, -1)
-PERLVARI(Itmps_floor, I32, -1)
-PERLVAR(Itmps_max, I32)
PERLVAR(Isv_count, I32) /* how many SV* are currently allocated */
PERLVAR(Isv_objcount, I32) /* how many objects are currently allocated */
PERLVAR(Isv_root, SV*) /* storage for SVs belonging to interp */
@@ -118,15 +104,9 @@ PERLVAR(Ilastsize, I32)
PERLVAR(Iforkprocess, int) /* so do_open |- can return proc# */
/* subprocess state */
-PERLVAR(Ifdpid, AV *) /* keep fd-to-pid mappings for my_popen */
+PERLVAR(Ifdpid, AV *) /* keep fd-to-pid mappings for my_popen */
/* internal state */
-PERLVAR(Iin_eval, VOL int) /* trap "fatal" errors? */
-PERLVAR(Irestartop, OP *) /* Are we propagating an error from croak? */
-PERLVAR(Idelaymagic, int) /* ($<,$>) = ... */
-PERLVAR(Idirty, bool) /* In the middle of tearing things down? */
-PERLVAR(Ilocalizing, U8) /* are we processing a local() list? */
-PERLVAR(Itainted, bool) /* using variables controlled by $< */
PERLVAR(Itainting, bool) /* doing taint checks */
PERLVARI(Iop_mask, char *, NULL) /* masked operations for safe evals */
@@ -144,31 +124,16 @@ PERLVAR(Ieval_root, OP *)
PERLVAR(Ieval_start, OP *)
/* runtime control stuff */
-PERLVARI(Icurcop, COP * VOL, &compiling)
PERLVARI(Icurcopdb, COP *, NULL)
PERLVARI(Icopline, line_t, NOLINE)
-PERLVAR(Icxstack, PERL_CONTEXT *)
-PERLVARI(Icxstack_ix, I32, -1)
-PERLVARI(Icxstack_max, I32, 128)
-PERLVAR(Istart_env, JMPENV) /* empty startup sigjmp() environment */
-PERLVAR(Itop_env, JMPENV *) /* ptr. to current sigjmp() environment */
-
-/* stack stuff */
-PERLVAR(Icurstack, AV *) /* THE STACK */
-PERLVAR(Imainstack, AV *) /* the stack when nothing funny is happening */
-
-/* format accumulators */
-PERLVAR(Iformtarget, SV *)
-PERLVAR(Ibodytarget, SV *)
-PERLVAR(Itoptarget, SV *)
/* statics moved here for shared library purposes */
PERLVAR(Istrchop, SV) /* return value from chop */
PERLVAR(Ifilemode, int) /* so nextargv() can preserve mode */
PERLVAR(Ilastfd, int) /* what to preserve mode on */
PERLVAR(Ioldname, char *) /* what to preserve mode on */
-PERLVAR(IArgv, char **) /* stuff to free from do_aexec, vfork safe */
-PERLVAR(ICmd, char *) /* stuff to free from do_aexec, vfork safe */
+PERLVAR(IArgv, char **) /* stuff to free from do_aexec, vfork safe */
+PERLVAR(ICmd, char *) /* stuff to free from do_aexec, vfork safe */
PERLVAR(Isortcop, OP *) /* user defined sort routine */
PERLVAR(Isortstash, HV *) /* which is in some package or other */
PERLVAR(Ifirstgv, GV *) /* $a */
@@ -185,9 +150,10 @@ PERLVARI(Ilaststatval, int, -1)
PERLVARI(Ilaststype, I32, OP_STAT)
PERLVAR(Imess_sv, SV *)
+PERLVAR(Iors, char *) /* $\ */
+PERLVAR(Iorslen, STRLEN)
+PERLVAR(Iofmt, char *) /* $# */
+
#ifdef USE_THREADS
-/* threads stuff */
-PERLVAR(Ithrsv, SV *) /* holds struct perl_thread for main thread */
+PERLVAR(Ithrsv, SV *) /* holds struct perl_thread for main thread */
#endif /* USE_THREADS */
-
-
diff --git a/perl.h b/perl.h
index 7761786496..c5298fa201 100644
--- a/perl.h
+++ b/perl.h
@@ -1608,51 +1608,56 @@ typedef enum {
#define HINT_STRICT_VARS 0x00000400
#define HINT_LOCALE 0x00000800
-
-/***********************************************/
-/* Global only to current interpreter instance */
-/***********************************************/
+/* Various states of an input record separator SV (rs, nrs) */
+#define RsSNARF(sv) (! SvOK(sv))
+#define RsSIMPLE(sv) (SvOK(sv) && SvCUR(sv))
+#define RsPARA(sv) (SvOK(sv) && ! SvCUR(sv))
#ifdef MULTIPLICITY
-#define IEXT
-#define IINIT(x)
+/* If we have multiple interpreters define a struct
+ holding variables which must be per-interpreter
+ If we don't have threads anything that would have
+ be per-thread is per-interpreter.
+*/
+
+#define PERLVAR(var,type) type var;
+#define PERLVARI(var,type,init) type var;
+
struct interpreter {
-#include "interpvar.h"
+#ifndef USE_THREADS
+#include "thrdvar.h"
+#endif
+#include "intrpvar.h"
};
-#undef IEXT
-#undef IINIT
+
+#undef PERLVAR
+#undef PERLVARI
+
#else
struct interpreter {
char broiled;
};
#endif
-
-/* Various states of an input record separator SV (rs, nrs) */
-#define RsSNARF(sv) (! SvOK(sv))
-#define RsSIMPLE(sv) (SvOK(sv) && SvCUR(sv))
-#define RsPARA(sv) (SvOK(sv) && ! SvCUR(sv))
-
-/* perlvars needs to be before thread.h until we sort out
- thread.h's #define stuff
+#ifdef USE_THREADS
+/* If we have threads define a struct with all the variables
+ * that have to be per-thread
*/
-#define PERLVAR(var,type) EXT type var;
-#define PERLVARI(var,type,init) EXT type var INIT(init);
-#include "perlvars.h"
-#undef PERLVAR
-#undef PERLVARI
-typedef struct perl_thread *Thread;
-#include "thread.h"
+#define PERLVAR(var,type) type var;
+#define PERLVARI(var,type,init) type var;
-#ifdef USE_THREADS
struct perl_thread {
-#define PERLVAR(var,type) type var;
#include "thrdvar.h"
-#undef PERLVAR
};
+
+#undef PERLVAR
+#undef PERLVARI
#endif
+typedef struct perl_thread *Thread;
+#include "thread.h"
+
#include "pp.h"
START_EXTERN_C
@@ -1667,7 +1672,30 @@ END_EXTERN_C
#define sv_setptrref(rv,ptr) sv_setref_iv(rv,Nullch,(IV)ptr)
#endif
-/* The following must follow proto.h */
+/* The following must follow proto.h as #defines mess up syntax */
+
+#include "embedvar.h"
+
+/* Now include all the 'global' variables
+ * If we don't have threads or multiple interpreters
+ * these include variables that would have been their struct-s
+ */
+
+#define PERLVAR(var,type) EXT type var;
+#define PERLVARI(var,type,init) EXT type var INIT(init);
+
+#include "perlvars.h"
+
+#ifndef MULTIPLICITY
+#include "intrpvar.h"
+#endif
+
+#ifndef USE_THREADS
+#include "thrdvar.h"
+#endif
+
+#undef PERLVAR
+#undef PERLVARI
#if defined(HASATTRIBUTE) && defined(WIN32)
/*
diff --git a/perlvars.h b/perlvars.h
index 97b199f5b3..e41423eb5b 100644
--- a/perlvars.h
+++ b/perlvars.h
@@ -53,6 +53,9 @@ PERLVAR(he_root, HE *) /* free he list--shared by interpreters */
PERLVAR(nice_chunk, char *) /* a nice chunk of memory to reuse */
PERLVAR(nice_chunk_size, U32) /* how nice the chunk of memory is */
+PERLVARI(runops, runops_proc_t *, RUNOPS_DEFAULT)
+
+#ifndef USE_THREADS
/* Stack for currently executing thread--context switch must handle this. */
PERLVAR(stack_base, SV **) /* stack->array_ary */
PERLVAR(stack_sp, SV **) /* stack pointer now */
@@ -65,7 +68,7 @@ PERLVAR(opsave, OP *) /* save current op register across longjmps */
#else
PERLVAR(op, OP *) /* current op--when not in a global register */
#endif
-PERLVARI(runops, runops_proc_t *, RUNOPS_DEFAULT)
+
PERLVAR(scopestack, I32 *) /* blocks we've entered */
PERLVAR(scopestack_ix, I32)
PERLVAR(scopestack_max, I32)
@@ -82,16 +85,22 @@ PERLVAR(markstack, I32 *) /* stackmarks we're remembering */
PERLVAR(markstack_ptr, I32 *) /* stackmarks we're remembering */
PERLVAR(markstack_max, I32 *) /* stackmarks we're remembering */
+
+
PERLVAR(curpad, SV **)
/* temp space */
PERLVAR(Sv, SV *)
PERLVAR(Xpv, XPV *)
-PERLVAR(tokenbuf[256], char)
+
PERLVAR(statbuf, struct stat)
#ifdef HAS_TIMES
PERLVAR(timesbuf, struct tms)
#endif
+
+#endif /* USE_THREADS */
+
+PERLVAR(tokenbuf[256], char)
#if defined(WIN32) && defined(__GNUC__)
PERLVAR(na, static STRLEN)
#else
@@ -197,10 +206,3 @@ PERLVARI(numeric_local, bool, TRUE) /* Assume local numerics */
#endif /* !USE_LOCALE_NUMERIC */
-#ifndef MULTIPLICITY
-#define IEXT EXT
-#define IINIT(x) INIT(x)
-#include "intrpvar.h"
-#undef IEXT
-#undef IINIT
-#endif \ No newline at end of file
diff --git a/regcomp.c b/regcomp.c
index adda2aa8f9..9039797ad4 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -60,9 +60,9 @@
#define REG_COMP_C
#include "regcomp.h"
-#ifdef USE_THREADS
+#ifdef op
#undef op
-#endif /* USE_THREADS */
+#endif /* op */
static regnode regdummy;
static char * regparse; /* Input-scan pointer. */
@@ -2663,3 +2663,4 @@ re_croak2(const char* pat1,const char* pat2, va_alist)
}
+
diff --git a/thrdvar.h b/thrdvar.h
index 8f61950416..4c698368a4 100644
--- a/thrdvar.h
+++ b/thrdvar.h
@@ -1,5 +1,6 @@
/* Per-thread variables */
/* Important ones in the first cache line (if alignment is done right) */
+
PERLVAR(Tstack_sp, SV **)
#ifdef OP_IN_REGISTER
PERLVAR(Topsave, OP *)
@@ -7,8 +8,8 @@ PERLVAR(Topsave, OP *)
PERLVAR(Top, OP *)
#endif
PERLVAR(Tcurpad, SV **)
-PERLVAR(Tstack_base, SV **)
+PERLVAR(Tstack_base, SV **)
PERLVAR(Tstack_max, SV **)
PERLVAR(Tscopestack, I32 *)
@@ -27,58 +28,59 @@ PERLVAR(Tmarkstack, I32 *)
PERLVAR(Tmarkstack_ptr, I32 *)
PERLVAR(Tmarkstack_max, I32 *)
-PERLVAR(TSv, SV *)
-PERLVAR(TXpv, XPV *)
+PERLVAR(TSv, SV *)
+PERLVAR(TXpv, XPV *)
PERLVAR(Tstatbuf, struct stat)
#ifdef HAS_TIMES
PERLVAR(Ttimesbuf, struct tms)
#endif
-/* XXX What about regexp stuff? */
-
/* Now the fields that used to be "per interpreter" (even when global) */
/* Fields used by magic variables such as $@, $/ and so on */
-PERLVAR(Ttainted, bool)
-PERLVAR(Tcurpm, PMOP *)
+PERLVAR(Ttainted, bool) /* using variables controlled by $< */
+PERLVAR(Tcurpm, PMOP *) /* what to do \ interps from */
PERLVAR(Tnrs, SV *)
-PERLVAR(Trs, SV *)
+PERLVAR(Trs, SV *) /* $/ */
PERLVAR(Tlast_in_gv, GV *)
-PERLVAR(Tofs, char *)
+PERLVAR(Tofs, char *) /* $, */
PERLVAR(Tofslen, STRLEN)
PERLVAR(Tdefoutgv, GV *)
-PERLVAR(Tchopset, char *)
+PERLVARI(Tchopset, char *, " \n-") /* $: */
PERLVAR(Tformtarget, SV *)
PERLVAR(Tbodytarget, SV *)
PERLVAR(Ttoptarget, SV *)
- /* Stashes */
-PERLVAR(Tdefstash, HV *)
-PERLVAR(Tcurstash, HV *)
+/* Stashes */
+PERLVAR(Tdefstash, HV *) /* main symbol table */
+PERLVAR(Tcurstash, HV *) /* symbol table for current package */
- /* Stacks */
+/* Stacks */
PERLVAR(Ttmps_stack, SV **)
-PERLVAR(Ttmps_ix, I32)
-PERLVAR(Ttmps_floor, I32)
+PERLVARI(Ttmps_ix, I32, -1)
+PERLVARI(Ttmps_floor, I32, -1)
PERLVAR(Ttmps_max, I32)
-PERLVAR(Tin_eval, int)
-PERLVAR(Trestartop, OP *)
-PERLVAR(Tdelaymagic, int)
-PERLVAR(Tdirty, bool)
-PERLVAR(Tlocalizing, U8)
-PERLVAR(Tcurcop, COP *)
+PERLVAR(Trestartop, OP *) /* Are we propagating an error from croak? */
+PERLVARI(Tcurcop, COP * VOL, &compiling)
+PERLVAR(Tin_eval, VOL int) /* trap "fatal" errors? */
+PERLVAR(Tdelaymagic, int) /* ($<,$>) = ... */
+PERLVAR(Tdirty, bool) /* In the middle of tearing things down? */
+PERLVAR(Tlocalizing, U8) /* are we processing a local() list? */
PERLVAR(Tcxstack, PERL_CONTEXT *)
-PERLVAR(Tcxstack_ix, I32)
-PERLVAR(Tcxstack_max, I32)
+PERLVARI(Tcxstack_ix, I32, -1)
+PERLVARI(Tcxstack_max, I32, 128)
-PERLVAR(Tcurstack, AV *)
-PERLVAR(Tmainstack, AV *)
-PERLVAR(Ttop_env, JMPENV *)
-PERLVAR(Tstart_env, JMPENV) /* Top of top_env longjmp() chain */
+PERLVAR(Tcurstack, AV *) /* THE STACK */
+PERLVAR(Tmainstack, AV *) /* the stack when nothing funny is happening */
+PERLVAR(Ttop_env, JMPENV *) /* ptr. to current sigjmp() environment */
+PERLVAR(Tstart_env, JMPENV) /* empty startup sigjmp() environment */
/* XXX Sort stuff, firstgv secongv and so on? */
+/* XXX What about regexp stuff? */
+
+#ifdef USE_THREADS
PERLVAR(oursv, SV *)
PERLVAR(cvcache, HV *)
@@ -99,3 +101,4 @@ PERLVAR(i, struct thread_intern) /* Platform-dependent internals */
PERLVAR(trailing_nul, char) /* For the sake of thrsv and oursv */
+#endif /* USE_THREADS */
diff --git a/thread.h b/thread.h
index 7e98c1d6e3..b6397cbfdd 100644
--- a/thread.h
+++ b/thread.h
@@ -170,125 +170,6 @@ typedef struct condpair {
#define MgCONDP(mg) (&((condpair_t *)(mg->mg_ptr))->cond)
#define MgOWNER(mg) ((condpair_t *)(mg->mg_ptr))->owner
-#undef stack_base
-#undef stack_sp
-#undef stack_max
-#undef curstack
-#undef mainstack
-#undef markstack
-#undef markstack_ptr
-#undef markstack_max
-#undef scopestack
-#undef scopestack_ix
-#undef scopestack_max
-#undef savestack
-#undef savestack_ix
-#undef savestack_max
-#undef retstack
-#undef retstack_ix
-#undef retstack_max
-#undef curcop
-#undef cxstack
-#undef cxstack_ix
-#undef cxstack_max
-#undef defstash
-#undef curstash
-#undef tmps_stack
-#undef tmps_floor
-#undef tmps_ix
-#undef tmps_max
-#undef curpad
-#undef Sv
-#undef Xpv
-#undef statbuf
-#undef timesbuf
-#undef tainted
-#undef curpm
-#undef nrs
-#undef rs
-#undef last_in_gv
-#undef ofs
-#undef ofslen
-#undef defoutgv
-#undef chopset
-#undef formtarget
-#undef bodytarget
-#undef start_env
-#undef toptarget
-#undef top_env
-#undef in_eval
-#undef restartop
-#undef delaymagic
-#undef dirty
-#undef localizing
-
-#define stack_base (thr->Tstack_base)
-#define stack_sp (thr->Tstack_sp)
-#define stack_max (thr->Tstack_max)
-#ifdef OP_IN_REGISTER
-#define opsave (thr->Topsave)
-#else
-#undef op
-#define op (thr->Top)
-#endif
-#define curcop (thr->Tcurcop)
-#define stack (thr->Tstack)
-#define curstack (thr->Tcurstack)
-#define mainstack (thr->Tmainstack)
-#define markstack (thr->Tmarkstack)
-#define markstack_ptr (thr->Tmarkstack_ptr)
-#define markstack_max (thr->Tmarkstack_max)
-#define scopestack (thr->Tscopestack)
-#define scopestack_ix (thr->Tscopestack_ix)
-#define scopestack_max (thr->Tscopestack_max)
-
-#define savestack (thr->Tsavestack)
-#define savestack_ix (thr->Tsavestack_ix)
-#define savestack_max (thr->Tsavestack_max)
-
-#define retstack (thr->Tretstack)
-#define retstack_ix (thr->Tretstack_ix)
-#define retstack_max (thr->Tretstack_max)
-
-#define cxstack (thr->Tcxstack)
-#define cxstack_ix (thr->Tcxstack_ix)
-#define cxstack_max (thr->Tcxstack_max)
-
-#define curpad (thr->Tcurpad)
-#define Sv (thr->TSv)
-#define Xpv (thr->TXpv)
-#define statbuf (thr->Tstatbuf)
-#define timesbuf (thr->Ttimesbuf)
-#define tainted (thr->Ttainted)
-#define tainted (thr->Ttainted)
-#define curpm (thr->Tcurpm)
-#define nrs (thr->Tnrs)
-#define rs (thr->Trs)
-#define last_in_gv (thr->Tlast_in_gv)
-#define ofs (thr->Tofs)
-#define ofslen (thr->Tofslen)
-#define defoutgv (thr->Tdefoutgv)
-#define chopset (thr->Tchopset)
-#define formtarget (thr->Tformtarget)
-#define bodytarget (thr->Tbodytarget)
-#define toptarget (thr->Ttoptarget)
-#define defstash (thr->Tdefstash)
-#define curstash (thr->Tcurstash)
-
-#define tmps_stack (thr->Ttmps_stack)
-#define tmps_ix (thr->Ttmps_ix)
-#define tmps_floor (thr->Ttmps_floor)
-#define tmps_max (thr->Ttmps_max)
-
-#define in_eval (thr->Tin_eval)
-#define restartop (thr->Trestartop)
-#define delaymagic (thr->Tdelaymagic)
-#define dirty (thr->Tdirty)
-#define localizing (thr->Tlocalizing)
-
-#define top_env (thr->Ttop_env)
-#define start_env (thr->Tstart_env)
-
#else
/* USE_THREADS is not defined */
#define MUTEX_LOCK(m)
diff --git a/win32/Makefile b/win32/Makefile
index 1505b140a9..901a9f4978 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -12,6 +12,8 @@
INST_DRV=c:
INST_TOP=$(INST_DRV)\perl5004.5x
BUILDOPT=-DUSE_THREADS
+#BUILDOPT=-DMULTIPLICITY
+#BUILDOPT=-DMULTIPLICITY -DUSE_THREADS
CORECCOPT=
#
@@ -243,6 +245,7 @@ CORE_H = ..\av.h \
..\EXTERN.h \
..\perlvars.h \
..\intrpvar.h \
+ ..\thrdvar.h \
.\include\dirent.h \
.\include\netdb.h \
.\include\sys\socket.h \
diff --git a/win32/makedef.pl b/win32/makedef.pl
index 87f1d93a3e..f35e30fdf2 100644
--- a/win32/makedef.pl
+++ b/win32/makedef.pl
@@ -193,6 +193,9 @@ Perl_new_struct_thread
Perl_nthreads
Perl_nthreads_cond
Perl_per_thread_magicals
+Perl_thread_create
+Perl_find_threadsv
+Perl_threadsv_names
Perl_thrsv
Perl_unlock_condpair
Perl_vtbl_mutex
@@ -204,27 +207,34 @@ Perl_sv_uv
Perl_sv_pvn
Perl_newRV_noinc
!END!OF!SKIP!
+
}
-if ($define{'USE_THISPTR'} || $define{'USE_THREADS'})
+if ($define{'USE_THREADS'} || $define{'MULTIPLICITY'})
{
- open(THREAD,"<../thread.sym") || die "Cannot open thread.sym:$!";
+ open(THREAD,"<../thrdvar.h") || die "Cannot open ../thrdvar.h:$!";
while (<THREAD>)
{
- next if (!/^[A-Za-z]/);
- next if (/_amg[ \t]*$/);
- $skip_sym .= "Perl_".$_;
+ if (/\bPERLVARI?\(T(\w+)/)
+ {
+ $skip_sym .= "Perl_".$1."\n";
+ }
}
close(THREAD);
- $skip_sym .= "Perl_op\n";
}
-unless ($define{'USE_THREADS'})
+if ($define{'MULTIPLICITY'})
{
- $skip_sym .= "Perl_thread_create\n";
- $skip_sym .= "Perl_find_threadsv\n";
- $skip_sym .= "Perl_threadsv_names\n";
- }
+ open(THREAD,"<../intrpvar.h") || die "Cannot open ../intrpvar.h:$!";
+ while (<THREAD>)
+ {
+ if (/\bPERLVARI?\(I(\w+)/)
+ {
+ $skip_sym .= "Perl_".$1."\n";
+ }
+ }
+ close(THREAD);
+ }
# All symbols have a Perl_ prefix because that's what embed.h
# sticks in front of them.