From: Gurusamy Sarathy Date: Mon, 18 May 1998 09:40:58 +0000 (+0000) Subject: [asperl] integrate mainline changes (untested) X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3666098248b43282bda1153dae2f4c1e4af38d09;p=p5sagit%2Fp5-mst-13.2.git [asperl] integrate mainline changes (untested) p4raw-id: //depot/asperl@1010 --- 3666098248b43282bda1153dae2f4c1e4af38d09 diff --cc doio.c index 4e263e1,c1c6f95..f6362b1 --- a/doio.c +++ b/doio.c @@@ -1063,9 -1120,12 +1120,12 @@@ apply(I32 type, register SV **mark, reg if (sp - mark > 2) { val = SvIVx(*++mark); val2 = SvIVx(*++mark); + APPLY_TAINT_PROPER(); tot = sp - mark; while (++mark <= sp) { - if (PerlLIO_chown(SvPVx(*mark, na),val,val2)) + char *name = SvPVx(*mark, na); + APPLY_TAINT_PROPER(); - if (chown(name, val, val2)) ++ if (PerlLIO_chown(name, val, val2)) tot--; } } diff --cc gv.c index fadf610,1ef3b01..084181d --- a/gv.c +++ b/gv.c @@@ -102,9 -110,30 +110,30 @@@ gv_init(GV *gv, HV *stash, char *name, GvNAMELEN(gv) = len; if (multi) GvMULTI_on(gv); + if (doproto) { /* Replicate part of newSUB here. */ + ENTER; + start_subparse(0,0); /* Create CV in compcv. */ + GvCV(gv) = compcv; + LEAVE; + + GvCVGEN(gv) = 0; + sub_generation++; + CvGV(GvCV(gv)) = (GV*)SvREFCNT_inc(gv); + CvFILEGV(GvCV(gv)) = curcop->cop_filegv; + CvSTASH(GvCV(gv)) = curstash; + #ifdef USE_THREADS + CvOWNER(GvCV(gv)) = 0; + New(666, CvMUTEXP(GvCV(gv)), 1, perl_mutex); + MUTEX_INIT(CvMUTEXP(GvCV(gv))); + #endif /* USE_THREADS */ + if (proto) { + sv_setpv((SV*)GvCV(gv), proto); + Safefree(proto); + } + } } -static void +STATIC void gv_init_sv(GV *gv, I32 sv_type) { switch (sv_type) { diff --cc interp.sym index 62e603a,f54fcf0..de164d5 --- a/interp.sym +++ b/interp.sym @@@ -65,9 -57,9 +65,10 @@@ in_eva incgv initav inplace + sys_intern last_in_gv lastfd +lastgotoprobe lastscream lastsize lastspbase diff --cc intrpvar.h index ad9bb81,a1ec59b..03435ac --- a/intrpvar.h +++ b/intrpvar.h @@@ -152,66 -151,15 +151,75 @@@ PERLVAR(Iors, char *) /* $\ * PERLVAR(Iorslen, STRLEN) PERLVAR(Iofmt, char *) /* $# */ + /* interpreter atexit processing */ + PERLVARI(Iexitlist, PerlExitListEntry *, NULL) /* list of exit functions */ + PERLVARI(Iexitlistlen, I32, 0) /* length of same */ + PERLVAR(Imodglobal, HV *) /* per-interp module data */ + + #ifdef HAVE_INTERP_INTERN + PERLVAR(Isys_intern, struct interp_intern) /* platform internals */ + #endif + +/* more statics moved here */ +PERLVAR(Imh, HE) /* from hv.c */ +PERLVAR(Imodcount, I32) /* from op.c */ +PERLVARI(Igeneration, int, 100) /* from op.c */ +PERLVAR(IDBcv, CV *) /* from perl.c */ +PERLVAR(Iarchpat_auto, char*) /* from perl.c */ +PERLVAR(Isortcxix, I32) /* from pp_ctl.c */ +PERLVAR(Ilastgotoprobe, OP*) /* from pp_ctl.c */ +PERLVAR(Iregdummy, regnode) /* from regcomp.c */ +PERLVAR(Iregparse, char*) /* Input-scan pointer. */ +PERLVAR(Iregxend, char*) /* End of input for compile */ +PERLVAR(Iregcode, regnode*) /* Code-emit pointer; ®dummy = don't. */ +PERLVAR(Iregnaughty, I32) /* How bad is this pattern? */ +PERLVAR(Iregsawback, I32) /* Did we see \1, ...? */ + +/* This guys appear both in regcomp.c and regexec.c, */ +PERLVAR(Iregprecomp, char *) /* uncompiled string. */ +PERLVAR(Iregnpar, I32) /* () count. */ +PERLVAR(Iregsize, I32) /* Code size. */ +PERLVAR(Iregflags, U16) /* are we folding, multilining? */ + +PERLVAR(Iregseen, U32) /* from regcomp.c */ +PERLVAR(Iseen_zerolen, I32) /* from regcomp.c */ +PERLVAR(Irx, regexp *) /* from regcomp.c */ +PERLVAR(Iextralen, I32) /* from regcomp.c */ +#ifdef DEBUGGING +PERLVAR(Icolorset, int) /* from regcomp.c */ +PERLVAR(Icolors[4], char *) /* from regcomp.c */ +#endif + +PERLVAR(Ireginput, char *) /* String-input pointer. */ +PERLVAR(Iregbol, char *) /* Beginning of input, for ^ check. */ +PERLVAR(Iregeol, char *) /* End of input, for $ check. */ +PERLVAR(Iregstartp, char **) /* Pointer to startp array. */ +PERLVAR(Iregendp, char **) /* Ditto for endp. */ +PERLVAR(Ireglastparen, U32 *) /* Similarly for lastparen. */ +PERLVAR(Iregtill, char *) /* How far we are required to go. */ +PERLVAR(Iregprev, char) /* char before regbol, \n if none */ + +PERLVAR(Ireg_start_tmp, char **) /* from regexec.c */ +PERLVAR(Ireg_start_tmpl,U32) /* from regexec.c */ +PERLVAR(Iregdata, struct reg_data *) /* from regexec.c renamed was data */ +PERLVAR(Ibostr, char *) /* from regexec.c */ +PERLVAR(Ireg_flags, U32) /* from regexec.c */ +PERLVAR(Ireg_eval_set, I32) /* from regexec.c */ + +#ifdef DEBUGGING +PERLVAR(Iregnarrate, I32) /* from regexec.c */ +PERLVAR(Iregprogram, regnode *) /* from regexec.c */ +PERLVARI(Iregindent, int, 0) /* from regexec.c */ +#endif + +PERLVAR(Iregcc, CURCUR *) /* from regexec.c */ +PERLVARI(Iin_clean_objs,bool, FALSE) /* from sv.c */ +PERLVARI(Iin_clean_all, bool, FALSE) /* from sv.c */ + +PERLVAR(Ilinestart, char *) /* beg. of most recently read line */ +PERLVAR(Ipending_ident, char) /* pending identifier lookup */ +PERLVAR(Isublex_info, SUBLEXINFO) /* from toke.c */ + #ifdef USE_THREADS PERLVAR(Ithrsv, SV *) /* holds struct perl_thread for main thread */ PERLVARI(Ithreadnum, U32, 0) /* incremented each thread creation */ diff --cc perl.c index 61fa3ee,e02786e..bc55ba1 --- a/perl.c +++ b/perl.c @@@ -85,22 -84,13 +85,23 @@@ static void init_postdump_symbols _((in static void init_predump_symbols _((void)); static void my_exit_jump _((void)) __attribute__((noreturn)); static void nuke_stacks _((void)); -static void open_script _((char *, bool, SV *)); +static void open_script _((char *, bool, SV *, int *fd)); static void usage _((char *)); -static void validate_suid _((char *, char*)); +static void validate_suid _((char *, char*, int)); + static I32 read_e_script _((int idx, SV *buf_sv, int maxlen)); +#endif -static int fdscript = -1; +#ifdef PERL_OBJECT +CPerlObj* perl_alloc(IPerlMem* ipM, IPerlEnv* ipE, IPerlStdIO* ipStd, + IPerlLIO* ipLIO, IPerlDir* ipD, IPerlSock* ipS, IPerlProc* ipP) +{ + CPerlObj* pPerl = new(ipM) CPerlObj(ipM, ipE, ipStd, ipLIO, ipD, ipS, ipP); + if(pPerl != NULL) + pPerl->Init(); + return pPerl; +} +#else PerlInterpreter * perl_alloc(void) { @@@ -586,15 -555,19 +591,24 @@@ perl_free(PerlInterpreter *sv_interp if (!(curinterp = sv_interp)) return; Safefree(sv_interp); +#endif } + void + perl_atexit(void (*fn) (void *), void *ptr) + { + Renew(exitlist, exitlistlen+1, PerlExitListEntry); + exitlist[exitlistlen].fn = fn; + exitlist[exitlistlen].ptr = ptr; + ++exitlistlen; + } + int +#ifdef PERL_OBJECT +CPerlObj::perl_parse(void (*xsinit) (CPerlObj*), int argc, char **argv, char **env) +#else perl_parse(PerlInterpreter *sv_interp, void (*xsinit) (void), int argc, char **argv, char **env) +#endif { dTHR; register SV *sv; @@@ -604,10 -577,8 +618,9 @@@ char *validarg = ""; I32 oldscope; AV* comppadlist; - int e_tmpfd = -1; dJMPENV; int ret; + int fdscript = -1; #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW #ifdef IAMSUID @@@ -1832,205 -1770,13 +1820,13 @@@ init_main_stash(void sv_setpvn(GvSV(gv_fetchpv("/", TRUE, SVt_PV)), "\n", 1); } -static void -open_script(char *scriptname, bool dosearch, SV *sv) +STATIC void +open_script(char *scriptname, bool dosearch, SV *sv, int *fdscript) { dTHR; - char *xfound = Nullch; - char *xfailed = Nullch; register char *s; - I32 len; - int retval; - #if defined(DOSISH) && !defined(OS2) && !defined(atarist) - # define SEARCH_EXTS ".bat", ".cmd", NULL - # define MAX_EXT_LEN 4 - #endif - #ifdef OS2 - # define SEARCH_EXTS ".cmd", ".btm", ".bat", ".pl", NULL - # define MAX_EXT_LEN 4 - #endif - #ifdef VMS - # define SEARCH_EXTS ".pl", ".com", NULL - # define MAX_EXT_LEN 4 - #endif - /* additional extensions to try in each dir if scriptname not found */ - #ifdef SEARCH_EXTS - char *ext[] = { SEARCH_EXTS }; - int extidx = 0, i = 0; - char *curext = Nullch; - #else - # define MAX_EXT_LEN 0 - #endif - - /* - * If dosearch is true and if scriptname does not contain path - * delimiters, search the PATH for scriptname. - * - * If SEARCH_EXTS is also defined, will look for each - * scriptname{SEARCH_EXTS} whenever scriptname is not found - * while searching the PATH. - * - * Assuming SEARCH_EXTS is C<".foo",".bar",NULL>, PATH search - * proceeds as follows: - * If DOSISH or VMSISH: - * + look for ./scriptname{,.foo,.bar} - * + search the PATH for scriptname{,.foo,.bar} - * - * If !DOSISH: - * + look *only* in the PATH for scriptname{,.foo,.bar} (note - * this will not look in '.' if it's not in the PATH) - */ - #ifdef VMS - # ifdef ALWAYS_DEFTYPES - len = strlen(scriptname); - if (!(len == 1 && *scriptname == '-') && scriptname[len-1] != ':') { - int hasdir, idx = 0, deftypes = 1; - bool seen_dot = 1; - - hasdir = !dosearch || (strpbrk(scriptname,":[= sizeof tokenbuf) - continue; /* don't search dir with too-long name */ - strcat(tokenbuf, scriptname); - #else /* !VMS */ - - #ifdef DOSISH - if (strEQ(scriptname, "-")) - dosearch = 0; - if (dosearch) { /* Look in '.' first. */ - char *cur = scriptname; - #ifdef SEARCH_EXTS - if ((curext = strrchr(scriptname,'.'))) /* possible current ext */ - while (ext[i]) - if (strEQ(ext[i++],curext)) { - extidx = -1; /* already has an ext */ - break; - } - do { - #endif - DEBUG_p(PerlIO_printf(Perl_debug_log, - "Looking for %s\n",cur)); - if (PerlLIO_stat(cur,&statbuf) >= 0) { - dosearch = 0; - scriptname = cur; - #ifdef SEARCH_EXTS - break; - #endif - } - #ifdef SEARCH_EXTS - if (cur == scriptname) { - len = strlen(scriptname); - if (len+MAX_EXT_LEN+1 >= sizeof(tokenbuf)) - break; - cur = strcpy(tokenbuf, scriptname); - } - } while (extidx >= 0 && ext[extidx] /* try an extension? */ - && strcpy(tokenbuf+len, ext[extidx++])); - #endif - } - #endif - - if (dosearch && !strchr(scriptname, '/') - #ifdef DOSISH - && !strchr(scriptname, '\\') - #endif - && (s = PerlEnv_getenv("PATH"))) { - bool seen_dot = 0; - - bufend = s + strlen(s); - while (s < bufend) { - #if defined(atarist) || defined(DOSISH) - for (len = 0; *s - # ifdef atarist - && *s != ',' - # endif - && *s != ';'; len++, s++) { - if (len < sizeof tokenbuf) - tokenbuf[len] = *s; - } - if (len < sizeof tokenbuf) - tokenbuf[len] = '\0'; - #else /* ! (atarist || DOSISH) */ - s = delimcpy(tokenbuf, tokenbuf + sizeof tokenbuf, s, bufend, - ':', - &len); - #endif /* ! (atarist || DOSISH) */ - if (s < bufend) - s++; - if (len + 1 + strlen(scriptname) + MAX_EXT_LEN >= sizeof tokenbuf) - continue; /* don't search dir with too-long name */ - if (len - #if defined(atarist) || defined(DOSISH) - && tokenbuf[len - 1] != '/' - && tokenbuf[len - 1] != '\\' - #endif - ) - tokenbuf[len++] = '/'; - if (len == 2 && tokenbuf[0] == '.') - seen_dot = 1; - (void)strcpy(tokenbuf + len, scriptname); - #endif /* !VMS */ - - #ifdef SEARCH_EXTS - len = strlen(tokenbuf); - if (extidx > 0) /* reset after previous loop */ - extidx = 0; - do { - #endif - DEBUG_p(PerlIO_printf(Perl_debug_log, "Looking for %s\n",tokenbuf)); - retval = PerlLIO_stat(tokenbuf,&statbuf); - #ifdef SEARCH_EXTS - } while ( retval < 0 /* not there */ - && extidx>=0 && ext[extidx] /* try an extension? */ - && strcpy(tokenbuf+len, ext[extidx++]) - ); - #endif - if (retval < 0) - continue; - if (S_ISREG(statbuf.st_mode) - && cando(S_IRUSR,TRUE,&statbuf) - #ifndef DOSISH - && cando(S_IXUSR,TRUE,&statbuf) - #endif - ) - { - xfound = tokenbuf; /* bingo! */ - break; - } - if (!xfailed) - xfailed = savepv(tokenbuf); - } - #ifndef DOSISH - if (!xfound && !seen_dot && !xfailed && (PerlLIO_stat(scriptname,&statbuf) < 0)) - #endif - seen_dot = 1; /* Disable message. */ - if (!xfound) - croak("Can't %s %s%s%s", - (xfailed ? "execute" : "find"), - (xfailed ? xfailed : scriptname), - (xfailed ? "" : " on PATH"), - (xfailed || seen_dot) ? "" : ", '.' not in PATH"); - if (xfailed) - Safefree(xfailed); - scriptname = xfound; - } + scriptname = find_script(scriptname, dosearch, NULL, 0); if (strnEQ(scriptname, "/dev/fd/", 8) && isDIGIT(scriptname[8]) ) { char *s = scriptname + 8; @@@ -2041,8 -1787,8 +1837,8 @@@ scriptname = s + 1; } else - fdscript = -1; + *fdscript = -1; - origfilename = savepv(e_tmpname ? "-e" : scriptname); + origfilename = savepv(e_script ? "-e" : scriptname); curcop->cop_filegv = gv_fetchfile(origfilename); if (strEQ(origfilename,"-")) scriptname = ""; @@@ -2425,13 -2168,30 +2218,30 @@@ find_beginning(void } } + -static I32 ++STATIC I32 + read_e_script(int idx, SV *buf_sv, int maxlen) + { + char *p, *nl; + FILTER_READ(idx+1, buf_sv, maxlen); + p = SvPVX(e_script); + nl = strchr(p, '\n'); + nl = (nl) ? nl+1 : SvEND(e_script); + if (nl-p == 0) + return 0; + sv_catpvn(buf_sv, p, nl-p); + sv_chop(e_script, nl); + return 1; + } + + -static void +STATIC void init_ids(void) { - uid = (int)getuid(); - euid = (int)geteuid(); - gid = (int)getgid(); - egid = (int)getegid(); + uid = (int)PerlProc_getuid(); + euid = (int)PerlProc_geteuid(); + gid = (int)PerlProc_getgid(); + egid = (int)PerlProc_getegid(); #ifdef VMS uid |= gid << 16; euid |= egid << 16; diff --cc perl.h index 9b139ec,fc96064..4513a07 --- a/perl.h +++ b/perl.h @@@ -1809,24 -1654,12 +1818,30 @@@ typedef enum #define PERLVARI(var,type,init) type var; #define PERLVARIC(var,type,init) type var; +#ifdef PERL_OBJECT +extern "C" CPerlObj* perl_alloc _((IPerlMem*, IPerlEnv*, IPerlStdIO*, IPerlLIO*, IPerlDir*, IPerlSock*, IPerlProc*)); + +typedef int (CPerlObj::*runops_proc_t) _((void)); +#undef EXT +#define EXT +#undef EXTCONST +#define EXTCONST +#undef INIT +#define INIT(x) + +class CPerlObj { +public: + CPerlObj(IPerlMem*, IPerlEnv*, IPerlStdIO*, IPerlLIO*, IPerlDir*, IPerlSock*, IPerlProc*); + void Init(void); + void* operator new(size_t nSize, IPerlMem *pvtbl); +#endif /* PERL_OBJECT */ + + /* Interpreter exitlist entry */ + typedef struct exitlistentry { + void (*fn) _((void*)); + void *ptr; + } PerlExitListEntry; + #ifdef PERL_GLOBAL_STRUCT struct perl_vars { #include "perlvars.h" diff --cc pp_ctl.c index 86668c9,61e940f..cb041b7 --- a/pp_ctl.c +++ b/pp_ctl.c @@@ -747,11 -750,10 +751,12 @@@ PP(pp_sort if (max > 1) { MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */ qsortsv(ORIGMARK+1, max, - (op->op_private & OPpLOCALE) ? sv_cmp_locale : sv_cmp); + (op->op_private & OPpLOCALE) + ? FUNC_NAME_TO_PTR(sv_cmp_locale) + : FUNC_NAME_TO_PTR(sv_cmp)); } } + LEAVE; stack_sp = ORIGMARK + max; return nextop; } diff --cc proto.h index 3ed352a,a689fe0..f984290 --- a/proto.h +++ b/proto.h @@@ -82,44 -69,33 +82,45 @@@ VIRTUAL void cv_undef _((CV* cv)) #ifdef DEBUGGING void cx_dump _((PERL_CONTEXT* cs)); #endif -SV* filter_add _((filter_t funcp, SV* datasv)); -void filter_del _((filter_t funcp)); -I32 filter_read _((int idx, SV* buffer, int maxlen)); -char ** get_op_descs _((void)); -char ** get_op_names _((void)); -I32 cxinc _((void)); -void deb _((const char* pat,...)) __attribute__((format(printf,1,2))); -void deb_growlevel _((void)); -I32 debop _((OP* o)); -I32 debstackptrs _((void)); +VIRTUAL SV* filter_add _((filter_t funcp, SV* datasv)); +VIRTUAL void filter_del _((filter_t funcp)); +VIRTUAL I32 filter_read _((int idx, SV* buffer, int maxlen)); +VIRTUAL char ** get_op_descs _((void)); +VIRTUAL char ** get_op_names _((void)); +VIRTUAL char * get_no_modify _((void)); +VIRTUAL U32 * get_opargs _((void)); +VIRTUAL I32 cxinc _((void)); #ifdef DEBUGGING -void debprofdump _((void)); +VIRTUAL void deb _((const char* pat,...)) __attribute__((format(printf,1,2))); +VIRTUAL void deb_growlevel _((void)); +VIRTUAL void debprofdump _((void)); +VIRTUAL I32 debop _((OP* o)); +VIRTUAL I32 debstack _((void)); +VIRTUAL I32 debstackptrs _((void)); +#else +#ifdef PERL_OBJECT +/* create a matching set of virtual entries for the non debugging version */ +VIRTUAL void deb_place_holder _((const char* pat,...)); +VIRTUAL void deb_growlevel_place_holder _((void)); +VIRTUAL void debprofdump_place_holder _((void)); +VIRTUAL I32 debop_place_holder _((OP* o)); +VIRTUAL I32 debstack_place_holder _((void)); +VIRTUAL I32 debstackptrs_place_holder _((void)); #endif -I32 debstack _((void)); -char* delimcpy _((char* to, char* toend, char* from, char* fromend, +#endif +VIRTUAL char* delimcpy _((char* to, char* toend, char* from, char* fromend, int delim, I32* retlen)); -void deprecate _((char* s)); -OP* die _((const char* pat,...)); -OP* die_where _((char* message)); -void dounwind _((I32 cxix)); -bool do_aexec _((SV* really, SV** mark, SV** sp)); -int do_binmode _((PerlIO *fp, int iotype, int flag)); -void do_chop _((SV* asv, SV* sv)); -bool do_close _((GV* gv, bool not_implicit)); -bool do_eof _((GV* gv)); -bool do_exec _((char* cmd)); -void do_execfree _((void)); +VIRTUAL void deprecate _((char* s)); +VIRTUAL OP* die _((const char* pat,...)); +VIRTUAL OP* die_where _((char* message)); +VIRTUAL void dounwind _((I32 cxix)); +VIRTUAL bool do_aexec _((SV* really, SV** mark, SV** sp)); ++VIRTUAL int do_binmode _((PerlIO *fp, int iotype, int flag)); +VIRTUAL void do_chop _((SV* asv, SV* sv)); +VIRTUAL bool do_close _((GV* gv, bool not_implicit)); +VIRTUAL bool do_eof _((GV* gv)); +VIRTUAL bool do_exec _((char* cmd)); +VIRTUAL void do_execfree _((void)); #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM) I32 do_ipcctl _((I32 optype, SV** mark, SV** sp)); I32 do_ipcget _((I32 optype, SV** mark, SV** sp)); @@@ -164,143 -138,147 +165,147 @@@ void dump_op _((OP* arg)) void dump_pm _((PMOP* pm)); void dump_packsubs _((HV* stash)); void dump_sub _((GV* gv)); -void fbm_compile _((SV* sv, U32 flags)); -char* fbm_instr _((unsigned char* big, unsigned char* bigend, SV* littlesv)); -char* find_script _((char *scriptname, bool dosearch, char **search_ext, I32 flags)); +VIRTUAL void fbm_compile _((SV* sv, U32 flags)); +VIRTUAL char* fbm_instr _((unsigned char* big, unsigned char* bigend, SV* littlesv)); ++VIRTUAL char* find_script _((char *scriptname, bool dosearch, char **search_ext, I32 flags)); #ifdef USE_THREADS -PADOFFSET find_threadsv _((char *name)); -#endif -OP* force_list _((OP* arg)); -OP* fold_constants _((OP* arg)); -char* form _((const char* pat, ...)); -void free_tmps _((void)); -OP* gen_constant_list _((OP* o)); -void gp_free _((GV* gv)); -GP* gp_ref _((GP* gp)); -GV* gv_AVadd _((GV* gv)); -GV* gv_HVadd _((GV* gv)); -GV* gv_IOadd _((GV* gv)); -GV* gv_autoload4 _((HV* stash, char* name, STRLEN len, I32 method)); -void gv_check _((HV* stash)); -void gv_efullname _((SV* sv, GV* gv)); -void gv_efullname3 _((SV* sv, GV* gv, char* prefix)); -GV* gv_fetchfile _((char* name)); -GV* gv_fetchmeth _((HV* stash, char* name, STRLEN len, I32 level)); -GV* gv_fetchmethod _((HV* stash, char* name)); -GV* gv_fetchmethod_autoload _((HV* stash, char* name, I32 autoload)); -GV* gv_fetchpv _((char* name, I32 add, I32 sv_type)); -void gv_fullname _((SV* sv, GV* gv)); -void gv_fullname3 _((SV* sv, GV* gv, char* prefix)); -void gv_init _((GV* gv, HV* stash, char* name, STRLEN len, int multi)); -HV* gv_stashpv _((char* name, I32 create)); -HV* gv_stashpvn _((char* name, U32 namelen, I32 create)); -HV* gv_stashsv _((SV* sv, I32 create)); -void hv_clear _((HV* tb)); -void hv_delayfree_ent _((HV* hv, HE* entry)); -SV* hv_delete _((HV* tb, char* key, U32 klen, I32 flags)); -SV* hv_delete_ent _((HV* tb, SV* key, I32 flags, U32 hash)); -bool hv_exists _((HV* tb, char* key, U32 klen)); -bool hv_exists_ent _((HV* tb, SV* key, U32 hash)); -SV** hv_fetch _((HV* tb, char* key, U32 klen, I32 lval)); -HE* hv_fetch_ent _((HV* tb, SV* key, I32 lval, U32 hash)); -void hv_free_ent _((HV* hv, HE* entry)); -I32 hv_iterinit _((HV* tb)); -char* hv_iterkey _((HE* entry, I32* retlen)); -SV* hv_iterkeysv _((HE* entry)); -HE* hv_iternext _((HV* tb)); -SV* hv_iternextsv _((HV* hv, char** key, I32* retlen)); -SV* hv_iterval _((HV* tb, HE* entry)); -void hv_ksplit _((HV* hv, IV newmax)); -void hv_magic _((HV* hv, GV* gv, int how)); -SV** hv_store _((HV* tb, char* key, U32 klen, SV* val, U32 hash)); -HE* hv_store_ent _((HV* tb, SV* key, SV* val, U32 hash)); -void hv_undef _((HV* tb)); -I32 ibcmp _((char* a, char* b, I32 len)); -I32 ibcmp_locale _((char* a, char* b, I32 len)); -I32 ingroup _((I32 testgid, I32 effective)); -void init_stacks _((ARGSproto)); -U32 intro_my _((void)); -char* instr _((char* big, char* little)); -bool io_close _((IO* io)); -OP* invert _((OP* cmd)); -OP* jmaybe _((OP* arg)); -I32 keyword _((char* d, I32 len)); -void leave_scope _((I32 base)); -void lex_end _((void)); -void lex_start _((SV* line)); -OP* linklist _((OP* o)); -OP* list _((OP* o)); -OP* listkids _((OP* o)); -OP* localize _((OP* arg, I32 lexical)); -I32 looks_like_number _((SV* sv)); -int magic_clearenv _((SV* sv, MAGIC* mg)); -int magic_clear_all_env _((SV* sv, MAGIC* mg)); -int magic_clearpack _((SV* sv, MAGIC* mg)); -int magic_clearsig _((SV* sv, MAGIC* mg)); -int magic_existspack _((SV* sv, MAGIC* mg)); -int magic_freedefelem _((SV* sv, MAGIC* mg)); -int magic_freeregexp _((SV* sv, MAGIC* mg)); -int magic_get _((SV* sv, MAGIC* mg)); -int magic_getarylen _((SV* sv, MAGIC* mg)); -int magic_getdefelem _((SV* sv, MAGIC* mg)); -int magic_getglob _((SV* sv, MAGIC* mg)); -int magic_getnkeys _((SV* sv, MAGIC* mg)); -int magic_getpack _((SV* sv, MAGIC* mg)); -int magic_getpos _((SV* sv, MAGIC* mg)); -int magic_getsig _((SV* sv, MAGIC* mg)); -int magic_getsubstr _((SV* sv, MAGIC* mg)); -int magic_gettaint _((SV* sv, MAGIC* mg)); -int magic_getuvar _((SV* sv, MAGIC* mg)); -int magic_getvec _((SV* sv, MAGIC* mg)); -U32 magic_len _((SV* sv, MAGIC* mg)); +VIRTUAL PADOFFSET find_threadsv _((char *name)); +#endif +VIRTUAL OP* force_list _((OP* arg)); +VIRTUAL OP* fold_constants _((OP* arg)); +VIRTUAL char* form _((const char* pat, ...)); +VIRTUAL void free_tmps _((void)); +VIRTUAL OP* gen_constant_list _((OP* o)); +VIRTUAL void gp_free _((GV* gv)); +VIRTUAL GP* gp_ref _((GP* gp)); +VIRTUAL GV* gv_AVadd _((GV* gv)); +VIRTUAL GV* gv_HVadd _((GV* gv)); +VIRTUAL GV* gv_IOadd _((GV* gv)); +VIRTUAL GV* gv_autoload4 _((HV* stash, char* name, STRLEN len, I32 method)); +VIRTUAL void gv_check _((HV* stash)); +VIRTUAL void gv_efullname _((SV* sv, GV* gv)); +VIRTUAL void gv_efullname3 _((SV* sv, GV* gv, char* prefix)); +VIRTUAL GV* gv_fetchfile _((char* name)); +VIRTUAL GV* gv_fetchmeth _((HV* stash, char* name, STRLEN len, I32 level)); +VIRTUAL GV* gv_fetchmethod _((HV* stash, char* name)); +VIRTUAL GV* gv_fetchmethod_autoload _((HV* stash, char* name, I32 autoload)); +VIRTUAL GV* gv_fetchpv _((char* name, I32 add, I32 sv_type)); +VIRTUAL void gv_fullname _((SV* sv, GV* gv)); +VIRTUAL void gv_fullname3 _((SV* sv, GV* gv, char* prefix)); +VIRTUAL void gv_init _((GV* gv, HV* stash, char* name, STRLEN len, int multi)); +VIRTUAL HV* gv_stashpv _((char* name, I32 create)); +VIRTUAL HV* gv_stashpvn _((char* name, U32 namelen, I32 create)); +VIRTUAL HV* gv_stashsv _((SV* sv, I32 create)); +VIRTUAL void hv_clear _((HV* tb)); +VIRTUAL void hv_delayfree_ent _((HV* hv, HE* entry)); +VIRTUAL SV* hv_delete _((HV* tb, char* key, U32 klen, I32 flags)); +VIRTUAL SV* hv_delete_ent _((HV* tb, SV* key, I32 flags, U32 hash)); +VIRTUAL bool hv_exists _((HV* tb, char* key, U32 klen)); +VIRTUAL bool hv_exists_ent _((HV* tb, SV* key, U32 hash)); +VIRTUAL SV** hv_fetch _((HV* tb, char* key, U32 klen, I32 lval)); +VIRTUAL HE* hv_fetch_ent _((HV* tb, SV* key, I32 lval, U32 hash)); +VIRTUAL void hv_free_ent _((HV* hv, HE* entry)); +VIRTUAL I32 hv_iterinit _((HV* tb)); +VIRTUAL char* hv_iterkey _((HE* entry, I32* retlen)); +VIRTUAL SV* hv_iterkeysv _((HE* entry)); +VIRTUAL HE* hv_iternext _((HV* tb)); +VIRTUAL SV* hv_iternextsv _((HV* hv, char** key, I32* retlen)); +VIRTUAL SV* hv_iterval _((HV* tb, HE* entry)); +VIRTUAL void hv_ksplit _((HV* hv, IV newmax)); +VIRTUAL void hv_magic _((HV* hv, GV* gv, int how)); +VIRTUAL SV** hv_store _((HV* tb, char* key, U32 klen, SV* val, U32 hash)); +VIRTUAL HE* hv_store_ent _((HV* tb, SV* key, SV* val, U32 hash)); +VIRTUAL void hv_undef _((HV* tb)); +VIRTUAL I32 ibcmp _((char* a, char* b, I32 len)); +VIRTUAL I32 ibcmp_locale _((char* a, char* b, I32 len)); +VIRTUAL I32 ingroup _((I32 testgid, I32 effective)); +VIRTUAL void init_stacks _((ARGSproto)); +VIRTUAL U32 intro_my _((void)); +VIRTUAL char* instr _((char* big, char* little)); +VIRTUAL bool io_close _((IO* io)); +VIRTUAL OP* invert _((OP* cmd)); +VIRTUAL OP* jmaybe _((OP* arg)); +VIRTUAL I32 keyword _((char* d, I32 len)); +VIRTUAL void leave_scope _((I32 base)); +VIRTUAL void lex_end _((void)); +VIRTUAL void lex_start _((SV* line)); +VIRTUAL OP* linklist _((OP* o)); +VIRTUAL OP* list _((OP* o)); +VIRTUAL OP* listkids _((OP* o)); +VIRTUAL OP* localize _((OP* arg, I32 lexical)); +VIRTUAL I32 looks_like_number _((SV* sv)); +VIRTUAL int magic_clearenv _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_clear_all_env _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_clearpack _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_clearsig _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_existspack _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_freedefelem _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_freeregexp _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_get _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_getarylen _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_getdefelem _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_getglob _((SV* sv, MAGIC* mg)); ++VIRTUAL int magic_getnkeys _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_getpack _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_getpos _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_getsig _((SV* sv, MAGIC* mg)); ++VIRTUAL int magic_getsubstr _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_gettaint _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_getuvar _((SV* sv, MAGIC* mg)); ++VIRTUAL int magic_getvec _((SV* sv, MAGIC* mg)); +VIRTUAL U32 magic_len _((SV* sv, MAGIC* mg)); #ifdef USE_THREADS -int magic_mutexfree _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_mutexfree _((SV* sv, MAGIC* mg)); #endif /* USE_THREADS */ -int magic_nextpack _((SV* sv, MAGIC* mg, SV* key)); -int magic_set _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_nextpack _((SV* sv, MAGIC* mg, SV* key)); +VIRTUAL int magic_set _((SV* sv, MAGIC* mg)); #ifdef OVERLOAD -int magic_setamagic _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setamagic _((SV* sv, MAGIC* mg)); #endif /* OVERLOAD */ -int magic_setarylen _((SV* sv, MAGIC* mg)); -int magic_setbm _((SV* sv, MAGIC* mg)); -int magic_setdbline _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setarylen _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setbm _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setdbline _((SV* sv, MAGIC* mg)); #ifdef USE_LOCALE_COLLATE -int magic_setcollxfrm _((SV* sv, MAGIC* mg)); -#endif -int magic_setdefelem _((SV* sv, MAGIC* mg)); -int magic_setenv _((SV* sv, MAGIC* mg)); -int magic_setfm _((SV* sv, MAGIC* mg)); -int magic_setisa _((SV* sv, MAGIC* mg)); -int magic_setglob _((SV* sv, MAGIC* mg)); -int magic_setmglob _((SV* sv, MAGIC* mg)); -int magic_setnkeys _((SV* sv, MAGIC* mg)); -int magic_setpack _((SV* sv, MAGIC* mg)); -int magic_setpos _((SV* sv, MAGIC* mg)); -int magic_setsig _((SV* sv, MAGIC* mg)); -int magic_setsubstr _((SV* sv, MAGIC* mg)); -int magic_settaint _((SV* sv, MAGIC* mg)); -int magic_setuvar _((SV* sv, MAGIC* mg)); -int magic_setvec _((SV* sv, MAGIC* mg)); -int magic_set_all_env _((SV* sv, MAGIC* mg)); -U32 magic_sizepack _((SV* sv, MAGIC* mg)); -int magic_wipepack _((SV* sv, MAGIC* mg)); -void magicname _((char* sym, char* name, I32 namlen)); +VIRTUAL int magic_setcollxfrm _((SV* sv, MAGIC* mg)); +#endif +VIRTUAL int magic_setdefelem _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setenv _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setfm _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setisa _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setglob _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setmglob _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setnkeys _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setpack _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setpos _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setsig _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setsubstr _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_settaint _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setuvar _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_setvec _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_set_all_env _((SV* sv, MAGIC* mg)); +VIRTUAL U32 magic_sizepack _((SV* sv, MAGIC* mg)); +VIRTUAL int magic_wipepack _((SV* sv, MAGIC* mg)); +VIRTUAL void magicname _((char* sym, char* name, I32 namlen)); int main _((int argc, char** argv, char** env)); -void markstack_grow _((void)); +VIRTUAL void markstack_grow _((void)); #ifdef USE_LOCALE_COLLATE -char* mem_collxfrm _((const char* s, STRLEN len, STRLEN* xlen)); -#endif -char* mess _((const char* pat, va_list* args)); -int mg_clear _((SV* sv)); -int mg_copy _((SV* , SV* , char* , I32)); -MAGIC* mg_find _((SV* sv, int type)); -int mg_free _((SV* sv)); -int mg_get _((SV* sv)); -U32 mg_len _((SV* sv)); -void mg_magical _((SV* sv)); -int mg_set _((SV* sv)); -I32 mg_size _((SV* sv)); -OP* mod _((OP* o, I32 type)); -char* moreswitches _((char* s)); -OP* my _((OP* o)); +VIRTUAL char* mem_collxfrm _((const char* s, STRLEN len, STRLEN* xlen)); +#endif +VIRTUAL char* mess _((const char* pat, va_list* args)); +VIRTUAL int mg_clear _((SV* sv)); +VIRTUAL int mg_copy _((SV* sv, SV* nsv, char* key, I32 klen)); +VIRTUAL MAGIC* mg_find _((SV* sv, int type)); +VIRTUAL int mg_free _((SV* sv)); +VIRTUAL int mg_get _((SV* sv)); +VIRTUAL U32 mg_length _((SV* sv)); +VIRTUAL void mg_magical _((SV* sv)); +VIRTUAL int mg_set _((SV* sv)); +VIRTUAL I32 mg_size _((SV* sv)); +VIRTUAL OP* mod _((OP* o, I32 type)); +VIRTUAL char* moreswitches _((char* s)); +VIRTUAL OP* my _((OP* o)); #if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY) -char* my_bcopy _((char* from, char* to, I32 len)); +VIRTUAL char* my_bcopy _((char* from, char* to, I32 len)); #endif #if !defined(HAS_BZERO) && !defined(HAS_MEMSET) char* my_bzero _((char* loc, I32 len)); @@@ -314,338 -292,315 +319,335 @@@ I32 my_memcmp _((char* s1, char* s2, I3 #if !defined(HAS_MEMSET) void* my_memset _((char* loc, I32 ch, I32 len)); #endif -I32 my_pclose _((PerlIO* ptr)); -PerlIO* my_popen _((char* cmd, char* mode)); -void my_setenv _((char* nam, char* val)); -I32 my_stat _((ARGSproto)); +#ifndef PERL_OBJECT +VIRTUAL I32 my_pclose _((PerlIO* ptr)); +VIRTUAL PerlIO* my_popen _((char* cmd, char* mode)); +#endif +VIRTUAL void my_setenv _((char* nam, char* val)); +VIRTUAL I32 my_stat _((ARGSproto)); #ifdef MYSWAP -short my_swap _((short s)); -long my_htonl _((long l)); -long my_ntohl _((long l)); -#endif -void my_unexec _((void)); -OP* newANONLIST _((OP* o)); -OP* newANONHASH _((OP* o)); -OP* newANONSUB _((I32 floor, OP* proto, OP* block)); -OP* newASSIGNOP _((I32 flags, OP* left, I32 optype, OP* right)); -OP* newCONDOP _((I32 flags, OP* expr, OP* trueop, OP* falseop)); -void newCONSTSUB _((HV* stash, char* name, SV* sv)); -void newFORM _((I32 floor, OP* o, OP* block)); -OP* newFOROP _((I32 flags, char* label, line_t forline, OP* scalar, OP* expr, OP*block, OP*cont)); -OP* newLOGOP _((I32 optype, I32 flags, OP* left, OP* right)); -OP* newLOOPEX _((I32 type, OP* label)); -OP* newLOOPOP _((I32 flags, I32 debuggable, OP* expr, OP* block)); -OP* newNULLLIST _((void)); -OP* newOP _((I32 optype, I32 flags)); -void newPROG _((OP* o)); -OP* newRANGE _((I32 flags, OP* left, OP* right)); -OP* newSLICEOP _((I32 flags, OP* subscript, OP* list)); -OP* newSTATEOP _((I32 flags, char* label, OP* o)); -CV* newSUB _((I32 floor, OP* o, OP* proto, OP* block)); -CV* newXS _((char* name, void (*subaddr)(CV* cv), char* filename)); -AV* newAV _((void)); -OP* newAVREF _((OP* o)); -OP* newBINOP _((I32 type, I32 flags, OP* first, OP* last)); -OP* newCVREF _((I32 flags, OP* o)); -OP* newGVOP _((I32 type, I32 flags, GV* gv)); -GV* newGVgen _((char* pack)); -OP* newGVREF _((I32 type, OP* o)); -OP* newHVREF _((OP* o)); -HV* newHV _((void)); -IO* newIO _((void)); -OP* newLISTOP _((I32 type, I32 flags, OP* first, OP* last)); -OP* newPMOP _((I32 type, I32 flags)); -OP* newPVOP _((I32 type, I32 flags, char* pv)); -SV* newRV _((SV* ref)); -#if !defined(__GNUC__) && (defined(CRIPPLED_CC) || defined(USE_THREADS)) -SV* newRV_noinc _((SV *)); -#endif -SV* newSV _((STRLEN len)); -OP* newSVREF _((OP* o)); -OP* newSVOP _((I32 type, I32 flags, SV* sv)); -SV* newSViv _((IV i)); -SV* newSVnv _((double n)); -SV* newSVpv _((char* s, STRLEN len)); -SV* newSVpvn _((char* s, STRLEN len)); -SV* newSVpvf _((const char* pat, ...)); -SV* newSVrv _((SV* rv, char* classname)); -SV* newSVsv _((SV* old)); -OP* newUNOP _((I32 type, I32 flags, OP* first)); -OP* newWHILEOP _((I32 flags, I32 debuggable, LOOP* loop, +VIRTUAL short my_swap _((short s)); +VIRTUAL long my_htonl _((long l)); +VIRTUAL long my_ntohl _((long l)); +#endif +VIRTUAL void my_unexec _((void)); +VIRTUAL OP* newANONLIST _((OP* o)); +VIRTUAL OP* newANONHASH _((OP* o)); +VIRTUAL OP* newANONSUB _((I32 floor, OP* proto, OP* block)); +VIRTUAL OP* newASSIGNOP _((I32 flags, OP* left, I32 optype, OP* right)); +VIRTUAL OP* newCONDOP _((I32 flags, OP* expr, OP* trueop, OP* falseop)); +VIRTUAL void newCONSTSUB _((HV* stash, char* name, SV* sv)); +VIRTUAL void newFORM _((I32 floor, OP* o, OP* block)); +VIRTUAL OP* newFOROP _((I32 flags, char* label, line_t forline, OP* sclr, OP* expr, OP*block, OP*cont)); +VIRTUAL OP* newLOGOP _((I32 optype, I32 flags, OP* left, OP* right)); +VIRTUAL OP* newLOOPEX _((I32 type, OP* label)); +VIRTUAL OP* newLOOPOP _((I32 flags, I32 debuggable, OP* expr, OP* block)); +VIRTUAL OP* newNULLLIST _((void)); +VIRTUAL OP* newOP _((I32 optype, I32 flags)); +VIRTUAL void newPROG _((OP* o)); +VIRTUAL OP* newRANGE _((I32 flags, OP* left, OP* right)); +VIRTUAL OP* newSLICEOP _((I32 flags, OP* subscript, OP* list)); +VIRTUAL OP* newSTATEOP _((I32 flags, char* label, OP* o)); +VIRTUAL CV* newSUB _((I32 floor, OP* o, OP* proto, OP* block)); +VIRTUAL CV* newXS _((char* name, void (*subaddr)(CV* cv _CPERLproto), char* filename)); +VIRTUAL AV* newAV _((void)); +VIRTUAL OP* newAVREF _((OP* o)); +VIRTUAL OP* newBINOP _((I32 type, I32 flags, OP* first, OP* last)); +VIRTUAL OP* newCVREF _((I32 flags, OP* o)); +VIRTUAL OP* newGVOP _((I32 type, I32 flags, GV* gv)); +VIRTUAL GV* newGVgen _((char* pack)); +VIRTUAL OP* newGVREF _((I32 type, OP* o)); +VIRTUAL OP* newHVREF _((OP* o)); +VIRTUAL HV* newHV _((void)); +VIRTUAL IO* newIO _((void)); +VIRTUAL OP* newLISTOP _((I32 type, I32 flags, OP* first, OP* last)); +VIRTUAL OP* newPMOP _((I32 type, I32 flags)); +VIRTUAL OP* newPVOP _((I32 type, I32 flags, char* pv)); +VIRTUAL SV* newRV _((SV* pref)); +#if !defined(__GNUC__) && (defined(CRIPPLED_CC) || defined(USE_THREADS) || defined(PERL_OBJECT)) +VIRTUAL SV* newRV_noinc _((SV *sv)); +#endif - #ifdef LEAKTEST - VIRTUAL SV* newSV _((I32 x, STRLEN len)); - #else +VIRTUAL SV* newSV _((STRLEN len)); - #endif +VIRTUAL OP* newSVREF _((OP* o)); +VIRTUAL OP* newSVOP _((I32 type, I32 flags, SV* sv)); +VIRTUAL SV* newSViv _((IV i)); +VIRTUAL SV* newSVnv _((double n)); +VIRTUAL SV* newSVpv _((char* s, STRLEN len)); +VIRTUAL SV* newSVpvf _((const char* pat, ...)); +VIRTUAL SV* newSVrv _((SV* rv, char* classname)); +VIRTUAL SV* newSVsv _((SV* old)); +VIRTUAL OP* newUNOP _((I32 type, I32 flags, OP* first)); +VIRTUAL OP* newWHILEOP _((I32 flags, I32 debuggable, LOOP* loop, I32 whileline, OP* expr, OP* block, OP* cont)); #ifdef USE_THREADS -struct perl_thread * new_struct_thread _((struct perl_thread *t)); -#endif -PERL_SI * new_stackinfo _((I32 stitems, I32 cxitems)); -PerlIO* nextargv _((GV* gv)); -char* ninstr _((char* big, char* bigend, char* little, char* lend)); -OP* oopsCV _((OP* o)); -void op_free _((OP* arg)); -void package _((OP* o)); -PADOFFSET pad_alloc _((I32 optype, U32 tmptype)); -PADOFFSET pad_allocmy _((char* name)); -PADOFFSET pad_findmy _((char* name)); -OP* oopsAV _((OP* o)); -OP* oopsHV _((OP* o)); -void pad_leavemy _((I32 fill)); -SV* pad_sv _((PADOFFSET po)); -void pad_free _((PADOFFSET po)); -void pad_reset _((void)); -void pad_swipe _((PADOFFSET po)); -void peep _((OP* o)); +VIRTUAL struct perl_thread * new_struct_thread _((struct perl_thread *t)); +#endif +VIRTUAL PERL_SI * new_stackinfo _((I32 stitems, I32 cxitems)); +VIRTUAL PerlIO* nextargv _((GV* gv)); +VIRTUAL char* ninstr _((char* big, char* bigend, char* little, char* lend)); +VIRTUAL OP* oopsCV _((OP* o)); +VIRTUAL void op_free _((OP* arg)); +VIRTUAL void package _((OP* o)); +VIRTUAL PADOFFSET pad_alloc _((I32 optype, U32 tmptype)); +VIRTUAL PADOFFSET pad_allocmy _((char* name)); +VIRTUAL PADOFFSET pad_findmy _((char* name)); +VIRTUAL OP* oopsAV _((OP* o)); +VIRTUAL OP* oopsHV _((OP* o)); +VIRTUAL void pad_leavemy _((I32 fill)); +VIRTUAL SV* pad_sv _((PADOFFSET po)); +VIRTUAL void pad_free _((PADOFFSET po)); +VIRTUAL void pad_reset _((void)); +VIRTUAL void pad_swipe _((PADOFFSET po)); +VIRTUAL void peep _((OP* o)); +#ifndef PERL_OBJECT PerlInterpreter* perl_alloc _((void)); -void perl_atexit _((void(*fn)(void *), void*)); -I32 perl_call_argv _((char* subname, I32 flags, char** argv)); -I32 perl_call_method _((char* methname, I32 flags)); -I32 perl_call_pv _((char* subname, I32 flags)); -I32 perl_call_sv _((SV* sv, I32 flags)); +#endif ++VIRTUAL void perl_atexit _((void(*fn)(void *), void*)); +VIRTUAL I32 perl_call_argv _((char* sub_name, I32 flags, char** argv)); +VIRTUAL I32 perl_call_method _((char* methname, I32 flags)); +VIRTUAL I32 perl_call_pv _((char* sub_name, I32 flags)); +VIRTUAL I32 perl_call_sv _((SV* sv, I32 flags)); +#ifdef PERL_OBJECT +VIRTUAL void perl_construct _((void)); +VIRTUAL void perl_destruct _((void)); +#else void perl_construct _((PerlInterpreter* sv_interp)); void perl_destruct _((PerlInterpreter* sv_interp)); -SV* perl_eval_pv _((char* p, I32 croak_on_error)); -I32 perl_eval_sv _((SV* sv, I32 flags)); +#endif +VIRTUAL SV* perl_eval_pv _((char* p, I32 croak_on_error)); +VIRTUAL I32 perl_eval_sv _((SV* sv, I32 flags)); +#ifdef PERL_OBJECT +VIRTUAL void perl_free _((void)); +#else void perl_free _((PerlInterpreter* sv_interp)); -SV* perl_get_sv _((char* name, I32 create)); -AV* perl_get_av _((char* name, I32 create)); -HV* perl_get_hv _((char* name, I32 create)); -CV* perl_get_cv _((char* name, I32 create)); -int perl_init_i18nl10n _((int printwarn)); -int perl_init_i18nl14n _((int printwarn)); -void perl_new_collate _((char* newcoll)); -void perl_new_ctype _((char* newctype)); -void perl_new_numeric _((char* newcoll)); -void perl_set_numeric_local _((void)); -void perl_set_numeric_standard _((void)); +#endif +VIRTUAL SV* perl_get_sv _((char* name, I32 create)); +VIRTUAL AV* perl_get_av _((char* name, I32 create)); +VIRTUAL HV* perl_get_hv _((char* name, I32 create)); +VIRTUAL CV* perl_get_cv _((char* name, I32 create)); +VIRTUAL int perl_init_i18nl10n _((int printwarn)); +VIRTUAL int perl_init_i18nl14n _((int printwarn)); +VIRTUAL void perl_new_collate _((char* newcoll)); +VIRTUAL void perl_new_ctype _((char* newctype)); +VIRTUAL void perl_new_numeric _((char* newcoll)); +VIRTUAL void perl_set_numeric_local _((void)); +VIRTUAL void perl_set_numeric_standard _((void)); +#ifdef PERL_OBJECT +VIRTUAL int perl_parse _((void(*xsinit)(CPerlObj*), int argc, char** argv, char** env)); +#else int perl_parse _((PerlInterpreter* sv_interp, void(*xsinit)(void), int argc, char** argv, char** env)); -void perl_require_pv _((char* pv)); +#endif +VIRTUAL void perl_require_pv _((char* pv)); #define perl_requirepv perl_require_pv +#ifdef PERL_OBJECT +VIRTUAL int perl_run _((void)); +#else int perl_run _((PerlInterpreter* sv_interp)); -void pidgone _((int pid, int status)); -void pmflag _((U16* pmfl, int ch)); -OP* pmruntime _((OP* pm, OP* expr, OP* repl)); -OP* pmtrans _((OP* o, OP* expr, OP* repl)); -OP* pop_return _((void)); -void pop_scope _((void)); -OP* prepend_elem _((I32 optype, OP* head, OP* tail)); -void push_return _((OP* o)); -void push_scope _((void)); -regexp* pregcomp _((char* exp, char* xend, PMOP* pm)); -OP* ref _((OP* o, I32 type)); -OP* refkids _((OP* o, I32 type)); +#endif +VIRTUAL void pidgone _((int pid, int status)); +VIRTUAL void pmflag _((U16* pmfl, int ch)); +VIRTUAL OP* pmruntime _((OP* pm, OP* expr, OP* repl)); +VIRTUAL OP* pmtrans _((OP* o, OP* expr, OP* repl)); +VIRTUAL OP* pop_return _((void)); +VIRTUAL void pop_scope _((void)); +VIRTUAL OP* prepend_elem _((I32 optype, OP* head, OP* tail)); +VIRTUAL void push_return _((OP* o)); +VIRTUAL void push_scope _((void)); +VIRTUAL regexp* pregcomp _((char* exp, char* xend, PMOP* pm)); +VIRTUAL OP* ref _((OP* o, I32 type)); +VIRTUAL OP* refkids _((OP* o, I32 type)); +#ifdef DEBUGGING void regdump _((regexp* r)); -I32 pregexec _((regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, U32 nosave)); -I32 regexec_flags _((regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, void* data, U32 flags)); - void pregfree _((struct regexp* r)); -regnode*regnext _((regnode* p)); +#endif +VIRTUAL I32 pregexec _((regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, U32 nosave)); +VIRTUAL I32 regexec_flags _((regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, void* data, U32 flags)); +VIRTUAL void pregfree _((struct regexp* r)); +VIRTUAL regnode* regnext _((regnode* p)); +#ifdef DEBUGGING void regprop _((SV* sv, regnode* o)); -void repeatcpy _((char* to, char* from, I32 len, I32 count)); -char* rninstr _((char* big, char* bigend, char* little, char* lend)); -Sighandler_t rsignal _((int, Sighandler_t)); -int rsignal_restore _((int, Sigsave_t*)); -int rsignal_save _((int, Sighandler_t, Sigsave_t*)); -Sighandler_t rsignal_state _((int)); -void rxres_free _((void** rsp)); -void rxres_restore _((void** rsp, REGEXP* rx)); -void rxres_save _((void** rsp, REGEXP* rx)); +#endif +VIRTUAL void repeatcpy _((char* to, char* from, I32 len, I32 count)); +VIRTUAL char* rninstr _((char* big, char* bigend, char* little, char* lend)); +VIRTUAL Sighandler_t rsignal _((int i, Sighandler_t t)); +VIRTUAL int rsignal_restore _((int i, Sigsave_t* t)); +VIRTUAL int rsignal_save _((int i, Sighandler_t t1, Sigsave_t* t2)); +VIRTUAL Sighandler_t rsignal_state _((int i)); +VIRTUAL void rxres_free _((void** rsp)); +VIRTUAL void rxres_restore _((void** rsp, REGEXP* prx)); +VIRTUAL void rxres_save _((void** rsp, REGEXP* prx)); #ifndef HAS_RENAME -I32 same_dirent _((char* a, char* b)); -#endif -char* savepv _((char* sv)); -char* savepvn _((char* sv, I32 len)); -void savestack_grow _((void)); -void save_aelem _((AV* av, I32 idx, SV **sptr)); -void save_aptr _((AV** aptr)); -AV* save_ary _((GV* gv)); -void save_clearsv _((SV** svp)); -void save_delete _((HV* hv, char* key, I32 klen)); +VIRTUAL I32 same_dirent _((char* a, char* b)); +#endif +VIRTUAL char* savepv _((char* sv)); +VIRTUAL char* savepvn _((char* sv, I32 len)); +VIRTUAL void savestack_grow _((void)); +VIRTUAL void save_aelem _((AV* av, I32 idx, SV **sptr)); +VIRTUAL void save_aptr _((AV** aptr)); +VIRTUAL AV* save_ary _((GV* gv)); +VIRTUAL void save_clearsv _((SV** svp)); +VIRTUAL void save_delete _((HV* hv, char* key, I32 klen)); #ifndef titan /* TitanOS cc can't handle this */ +#ifdef PERL_OBJECT +typedef void (CPerlObj::*DESTRUCTORFUNC) _((void*)); +VIRTUAL void save_destructor _((DESTRUCTORFUNC f, void* p)); +#else void save_destructor _((void (*f)(void*), void* p)); +#endif #endif /* titan */ -void save_freesv _((SV* sv)); -void save_freeop _((OP* o)); -void save_freepv _((char* pv)); -void save_gp _((GV* gv, I32 empty)); -HV* save_hash _((GV* gv)); -void save_helem _((HV* hv, SV *key, SV **sptr)); -void save_hptr _((HV** hptr)); -void save_I16 _((I16* intp)); -void save_I32 _((I32* intp)); -void save_int _((int* intp)); -void save_item _((SV* item)); -void save_iv _((IV* iv)); -void save_list _((SV** sarg, I32 maxsarg)); -void save_long _((long* longp)); -void save_nogv _((GV* gv)); -void save_op _((void)); -SV* save_scalar _((GV* gv)); -void save_pptr _((char** pptr)); -void save_sptr _((SV** sptr)); -SV* save_svref _((SV** sptr)); -SV** save_threadsv _((PADOFFSET i)); -OP* sawparens _((OP* o)); -OP* scalar _((OP* o)); -OP* scalarkids _((OP* o)); -OP* scalarseq _((OP* o)); -OP* scalarvoid _((OP* o)); -UV scan_hex _((char* start, I32 len, I32* retlen)); -char* scan_num _((char* s)); -UV scan_oct _((char* start, I32 len, I32* retlen)); -OP* scope _((OP* o)); -char* screaminstr _((SV* bigsv, SV* littlesv, I32 start_shift, I32 end_shift, I32 *state, I32 last)); +VIRTUAL void save_freesv _((SV* sv)); +VIRTUAL void save_freeop _((OP* o)); +VIRTUAL void save_freepv _((char* pv)); +VIRTUAL void save_gp _((GV* gv, I32 empty)); +VIRTUAL HV* save_hash _((GV* gv)); +VIRTUAL void save_helem _((HV* hv, SV *key, SV **sptr)); +VIRTUAL void save_hptr _((HV** hptr)); +VIRTUAL void save_I16 _((I16* intp)); +VIRTUAL void save_I32 _((I32* intp)); +VIRTUAL void save_int _((int* intp)); +VIRTUAL void save_item _((SV* item)); +VIRTUAL void save_iv _((IV* iv)); +VIRTUAL void save_list _((SV** sarg, I32 maxsarg)); +VIRTUAL void save_long _((long* longp)); +VIRTUAL void save_nogv _((GV* gv)); +VIRTUAL void save_op _((void)); +VIRTUAL SV* save_scalar _((GV* gv)); +VIRTUAL void save_pptr _((char** pptr)); +VIRTUAL void save_sptr _((SV** sptr)); +VIRTUAL SV* save_svref _((SV** sptr)); +VIRTUAL SV** save_threadsv _((PADOFFSET i)); +VIRTUAL OP* sawparens _((OP* o)); +VIRTUAL OP* scalar _((OP* o)); +VIRTUAL OP* scalarkids _((OP* o)); +VIRTUAL OP* scalarseq _((OP* o)); +VIRTUAL OP* scalarvoid _((OP* o)); +VIRTUAL UV scan_hex _((char* start, I32 len, I32* retlen)); +VIRTUAL char* scan_num _((char* s)); +VIRTUAL UV scan_oct _((char* start, I32 len, I32* retlen)); +VIRTUAL OP* scope _((OP* o)); +VIRTUAL char* screaminstr _((SV* bigsv, SV* littlesv, I32 start_shift, I32 end_shift, I32 *state, I32 last)); #ifndef VMS -I32 setenv_getix _((char* nam)); -#endif -void setdefout _((GV* gv)); -char* sharepvn _((char* sv, I32 len, U32 hash)); -HEK* share_hek _((char* sv, I32 len, U32 hash)); -Signal_t sighandler _((int sig)); -SV** stack_grow _((SV** sp, SV**p, int n)); -I32 start_subparse _((I32 is_format, U32 flags)); -void sub_crush_depth _((CV* cv)); -bool sv_2bool _((SV* sv)); -CV* sv_2cv _((SV* sv, HV** st, GV** gvp, I32 lref)); -IO* sv_2io _((SV* sv)); -IV sv_2iv _((SV* sv)); -SV* sv_2mortal _((SV* sv)); -double sv_2nv _((SV* sv)); -char* sv_2pv _((SV* sv, STRLEN* lp)); -UV sv_2uv _((SV* sv)); -IV sv_iv _((SV* sv)); -UV sv_uv _((SV* sv)); -double sv_nv _((SV* sv)); -char * sv_pvn _((SV *, STRLEN *)); -I32 sv_true _((SV *)); -void sv_add_arena _((char* ptr, U32 size, U32 flags)); -int sv_backoff _((SV* sv)); -SV* sv_bless _((SV* sv, HV* stash)); -void sv_catpvf _((SV* sv, const char* pat, ...)); -void sv_catpvf_mg _((SV* sv, const char* pat, ...)); -void sv_catpv _((SV* sv, char* ptr)); -void sv_catpv_mg _((SV* sv, char* ptr)); -void sv_catpvn _((SV* sv, char* ptr, STRLEN len)); -void sv_catpvn_mg _((SV* sv, char* ptr, STRLEN len)); -void sv_catsv _((SV* dsv, SV* ssv)); -void sv_catsv_mg _((SV* dsv, SV* ssv)); -void sv_chop _((SV* sv, char* ptr)); -void sv_clean_all _((void)); -void sv_clean_objs _((void)); -void sv_clear _((SV* sv)); -I32 sv_cmp _((SV* sv1, SV* sv2)); -I32 sv_cmp_locale _((SV* sv1, SV* sv2)); +VIRTUAL I32 setenv_getix _((char* nam)); +#endif +VIRTUAL void setdefout _((GV* gv)); +VIRTUAL char* sharepvn _((char* sv, I32 len, U32 hash)); +VIRTUAL HEK* share_hek _((char* sv, I32 len, U32 hash)); +VIRTUAL Signal_t sighandler _((int sig)); +VIRTUAL SV** stack_grow _((SV** sp, SV**p, int n)); +VIRTUAL I32 start_subparse _((I32 is_format, U32 flags)); +VIRTUAL void sub_crush_depth _((CV* cv)); +VIRTUAL bool sv_2bool _((SV* sv)); +VIRTUAL CV* sv_2cv _((SV* sv, HV** st, GV** gvp, I32 lref)); +VIRTUAL IO* sv_2io _((SV* sv)); +VIRTUAL IV sv_2iv _((SV* sv)); +VIRTUAL SV* sv_2mortal _((SV* sv)); +VIRTUAL double sv_2nv _((SV* sv)); +VIRTUAL char* sv_2pv _((SV* sv, STRLEN* lp)); +VIRTUAL UV sv_2uv _((SV* sv)); +VIRTUAL IV sv_iv _((SV* sv)); +VIRTUAL UV sv_uv _((SV* sv)); +VIRTUAL double sv_nv _((SV* sv)); +VIRTUAL char * sv_pvn _((SV *sv, STRLEN *len)); +VIRTUAL I32 sv_true _((SV *sv)); +VIRTUAL void sv_add_arena _((char* ptr, U32 size, U32 flags)); +VIRTUAL int sv_backoff _((SV* sv)); +VIRTUAL SV* sv_bless _((SV* sv, HV* stash)); +VIRTUAL void sv_catpvf _((SV* sv, const char* pat, ...)); +VIRTUAL void sv_catpv _((SV* sv, char* ptr)); +VIRTUAL void sv_catpvn _((SV* sv, char* ptr, STRLEN len)); +VIRTUAL void sv_catsv _((SV* dsv, SV* ssv)); +VIRTUAL void sv_chop _((SV* sv, char* ptr)); +VIRTUAL void sv_clean_all _((void)); +VIRTUAL void sv_clean_objs _((void)); +VIRTUAL void sv_clear _((SV* sv)); +VIRTUAL I32 sv_cmp _((SV* sv1, SV* sv2)); +VIRTUAL I32 sv_cmp_locale _((SV* sv1, SV* sv2)); #ifdef USE_LOCALE_COLLATE -char* sv_collxfrm _((SV* sv, STRLEN* nxp)); -#endif -OP* sv_compile_2op _((SV* sv, OP** startp, char* code, AV** avp)); -void sv_dec _((SV* sv)); -void sv_dump _((SV* sv)); -bool sv_derived_from _((SV* sv, char* name)); -I32 sv_eq _((SV* sv1, SV* sv2)); -void sv_free _((SV* sv)); -void sv_free_arenas _((void)); -char* sv_gets _((SV* sv, PerlIO* fp, I32 append)); +VIRTUAL char* sv_collxfrm _((SV* sv, STRLEN* nxp)); +#endif +VIRTUAL OP* sv_compile_2op _((SV* sv, OP** startp, char* code, AV** avp)); +VIRTUAL void sv_dec _((SV* sv)); +VIRTUAL void sv_dump _((SV* sv)); +VIRTUAL bool sv_derived_from _((SV* sv, char* name)); +VIRTUAL I32 sv_eq _((SV* sv1, SV* sv2)); +VIRTUAL void sv_free _((SV* sv)); +VIRTUAL void sv_free_arenas _((void)); +VIRTUAL char* sv_gets _((SV* sv, PerlIO* fp, I32 append)); #ifndef DOSISH -char* sv_grow _((SV* sv, I32 newlen)); +VIRTUAL char* sv_grow _((SV* sv, I32 newlen)); #else -char* sv_grow _((SV* sv, unsigned long newlen)); -#endif -void sv_inc _((SV* sv)); -void sv_insert _((SV* bigsv, STRLEN offset, STRLEN len, char* little, STRLEN littlelen)); -int sv_isa _((SV* sv, char* name)); -int sv_isobject _((SV* sv)); -STRLEN sv_len _((SV* sv)); -void sv_magic _((SV* sv, SV* obj, int how, char* name, I32 namlen)); -SV* sv_mortalcopy _((SV* oldsv)); -SV* sv_newmortal _((void)); -SV* sv_newref _((SV* sv)); +VIRTUAL char* sv_grow _((SV* sv, unsigned long newlen)); +#endif +VIRTUAL void sv_inc _((SV* sv)); +VIRTUAL void sv_insert _((SV* bigsv, STRLEN offset, STRLEN len, char* little, STRLEN littlelen)); +VIRTUAL int sv_isa _((SV* sv, char* name)); +VIRTUAL int sv_isobject _((SV* sv)); +VIRTUAL STRLEN sv_len _((SV* sv)); +VIRTUAL void sv_magic _((SV* sv, SV* obj, int how, char* name, I32 namlen)); +VIRTUAL SV* sv_mortalcopy _((SV* oldsv)); +VIRTUAL SV* sv_newmortal _((void)); +VIRTUAL SV* sv_newref _((SV* sv)); +#ifdef DEBUGGING char* sv_peek _((SV* sv)); -char* sv_pvn_force _((SV* sv, STRLEN* lp)); -char* sv_reftype _((SV* sv, int ob)); -void sv_replace _((SV* sv, SV* nsv)); -void sv_report_used _((void)); -void sv_reset _((char* s, HV* stash)); -void sv_setpvf _((SV* sv, const char* pat, ...)); -void sv_setpvf_mg _((SV* sv, const char* pat, ...)); -void sv_setiv _((SV* sv, IV num)); -void sv_setiv_mg _((SV* sv, IV num)); -void sv_setpviv _((SV* sv, IV num)); -void sv_setpviv_mg _((SV* sv, IV num)); -void sv_setuv _((SV* sv, UV num)); -void sv_setuv_mg _((SV* sv, UV num)); -void sv_setnv _((SV* sv, double num)); -void sv_setnv_mg _((SV* sv, double num)); -SV* sv_setref_iv _((SV* rv, char* classname, IV iv)); -SV* sv_setref_nv _((SV* rv, char* classname, double nv)); -SV* sv_setref_pv _((SV* rv, char* classname, void* pv)); -SV* sv_setref_pvn _((SV* rv, char* classname, char* pv, I32 n)); -void sv_setpv _((SV* sv, const char* ptr)); -void sv_setpv_mg _((SV* sv, const char* ptr)); -void sv_setpvn _((SV* sv, const char* ptr, STRLEN len)); -void sv_setpvn_mg _((SV* sv, const char* ptr, STRLEN len)); -void sv_setsv _((SV* dsv, SV* ssv)); -void sv_setsv_mg _((SV* dsv, SV* ssv)); -void sv_taint _((SV* sv)); -bool sv_tainted _((SV* sv)); -int sv_unmagic _((SV* sv, int type)); -void sv_unref _((SV* sv)); -void sv_untaint _((SV* sv)); -bool sv_upgrade _((SV* sv, U32 mt)); -void sv_usepvn _((SV* sv, char* ptr, STRLEN len)); -void sv_usepvn_mg _((SV* sv, char* ptr, STRLEN len)); -void sv_vcatpvfn _((SV* sv, const char* pat, STRLEN patlen, +#endif +VIRTUAL char* sv_pvn_force _((SV* sv, STRLEN* lp)); +VIRTUAL char* sv_reftype _((SV* sv, int ob)); +VIRTUAL void sv_replace _((SV* sv, SV* nsv)); +VIRTUAL void sv_report_used _((void)); +VIRTUAL void sv_reset _((char* s, HV* stash)); +VIRTUAL void sv_setpvf _((SV* sv, const char* pat, ...)); +VIRTUAL void sv_setiv _((SV* sv, IV num)); +VIRTUAL void sv_setpviv _((SV* sv, IV num)); +VIRTUAL void sv_setuv _((SV* sv, UV num)); +VIRTUAL void sv_setnv _((SV* sv, double num)); +VIRTUAL SV* sv_setref_iv _((SV* rv, char* classname, IV iv)); +VIRTUAL SV* sv_setref_nv _((SV* rv, char* classname, double nv)); +VIRTUAL SV* sv_setref_pv _((SV* rv, char* classname, void* pv)); +VIRTUAL SV* sv_setref_pvn _((SV* rv, char* classname, char* pv, I32 n)); +VIRTUAL void sv_setpv _((SV* sv, const char* ptr)); +VIRTUAL void sv_setpvn _((SV* sv, const char* ptr, STRLEN len)); +VIRTUAL void sv_setsv _((SV* dsv, SV* ssv)); +VIRTUAL void sv_taint _((SV* sv)); +VIRTUAL bool sv_tainted _((SV* sv)); +VIRTUAL int sv_unmagic _((SV* sv, int type)); +VIRTUAL void sv_unref _((SV* sv)); +VIRTUAL void sv_untaint _((SV* sv)); +VIRTUAL bool sv_upgrade _((SV* sv, U32 mt)); +VIRTUAL void sv_usepvn _((SV* sv, char* ptr, STRLEN len)); +VIRTUAL void sv_vcatpvfn _((SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *used_locale)); -void sv_vsetpvfn _((SV* sv, const char* pat, STRLEN patlen, +VIRTUAL void sv_vsetpvfn _((SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *used_locale)); -void taint_env _((void)); -void taint_proper _((const char* f, char* s)); +VIRTUAL void taint_env _((void)); +VIRTUAL void taint_proper _((const char* f, char* s)); #ifdef UNLINK_ALL_VERSIONS -I32 unlnk _((char* f)); +VIRTUAL I32 unlnk _((char* f)); #endif #ifdef USE_THREADS -void unlock_condpair _((void* svv)); -#endif -void unsharepvn _((char* sv, I32 len, U32 hash)); -void unshare_hek _((HEK* hek)); -void utilize _((int aver, I32 floor, OP* version, OP* id, OP* arg)); -void vivify_defelem _((SV* sv)); -void vivify_ref _((SV* sv, U32 to_what)); -I32 wait4pid _((int pid, int* statusp, int flags)); -void warn _((const char* pat,...)); +VIRTUAL void unlock_condpair _((void* svv)); +#endif +VIRTUAL void unsharepvn _((char* sv, I32 len, U32 hash)); +VIRTUAL void unshare_hek _((HEK* hek)); +VIRTUAL void utilize _((int aver, I32 floor, OP* version, OP* id, OP* arg)); +VIRTUAL void vivify_defelem _((SV* sv)); +VIRTUAL void vivify_ref _((SV* sv, U32 to_what)); +VIRTUAL I32 wait4pid _((int pid, int* statusp, int flags)); +VIRTUAL void warn _((const char* pat,...)); +#ifdef DEBUGGING void watch _((char** addr)); -I32 whichsig _((char* sig)); -int yyerror _((char* s)); -int yylex _((void)); -int yyparse _((void)); -int yywarn _((char* s)); +#endif +VIRTUAL I32 whichsig _((char* sig)); +VIRTUAL int yyerror _((char* s)); +VIRTUAL int yylex _((void)); +VIRTUAL int yyparse _((void)); +VIRTUAL int yywarn _((char* s)); #ifndef MYMALLOC -Malloc_t safemalloc _((MEM_SIZE nbytes)); -Malloc_t safecalloc _((MEM_SIZE elements, MEM_SIZE size)); -Malloc_t saferealloc _((Malloc_t where, MEM_SIZE nbytes)); -Free_t safefree _((Malloc_t where)); +VIRTUAL Malloc_t safemalloc _((MEM_SIZE nbytes)); +VIRTUAL Malloc_t safecalloc _((MEM_SIZE elements, MEM_SIZE size)); +VIRTUAL Malloc_t saferealloc _((Malloc_t where, MEM_SIZE nbytes)); +VIRTUAL Free_t safefree _((Malloc_t where)); #endif #ifdef LEAKTEST diff --cc regcomp.c index 392d2e8,38bf387..4230b9c --- a/regcomp.c +++ b/regcomp.c @@@ -115,12 -127,19 +115,11 @@@ static regnode *reg_node _((U8)) static regnode *regpiece _((I32 *)); static void reginsert _((U8, regnode *)); static void regoptail _((regnode *, regnode *)); - static void regset _((char *, I32)); static void regtail _((regnode *, regnode *)); -static char* regwhite _((char *, char *)); static char* nextchar _((void)); -static void re_croak2 _((const char* pat1,const char* pat2,...)) __attribute__((noreturn)); -static U32 regseen; -static I32 seen_zerolen; -static regexp *rx; -static I32 extralen; - -#ifdef DEBUGGING -static int colorset; -#endif +static void re_croak2 _((const char* pat1,const char* pat2,...)) __attribute__((noreturn)); +#endif /* Length of a variant. */ @@@ -1813,16 -1833,7 +1815,7 @@@ regwhite(char *p, char *e return p; } - STATIC void - regset(char *opnd, register I32 c) - { - if (SIZE_ONLY) - return; - c &= 0xFF; - opnd[1 + (c >> 3)] |= (1 << (c & 7)); - } - -static regnode * +STATIC regnode * regclass(void) { register char *opnd, *s; diff --cc regexec.c index 9cac0af,a9f2751..17a561b --- a/regexec.c +++ b/regexec.c @@@ -77,9 -118,9 +78,10 @@@ static I32 regtry _((regexp *prog, cha static bool reginclass _((char *p, I32 c)); static CHECKPOINT regcppush _((I32 parenfloor)); static char * regcppop _((void)); +#endif + #define REGINCLASS(p,c) (*(p) ? reginclass(p,c) : ANYOF_TEST(p,c)) -static CHECKPOINT +STATIC CHECKPOINT regcppush(I32 parenfloor) { dTHR; @@@ -848,13 -890,13 +850,13 @@@ regmatch(regnode *prog break; case ANYOF: s = (char *) OPERAND(scan); - if (nextchar < 0) - nextchar = UCHARAT(locinput); + if (nextchr < 0) + nextchr = UCHARAT(locinput); - if (!reginclass(s, nextchr)) + if (!REGINCLASS(s, nextchar)) sayNO; - if (!nextchar && locinput >= regeol) + if (!nextchr && locinput >= regeol) sayNO; - nextchar = UCHARAT(++locinput); + nextchr = UCHARAT(++locinput); break; case ALNUML: reg_flags |= RF_tainted; diff --cc win32/Makefile index 29e92d1,d860a3c..05e3c3a --- a/win32/Makefile +++ b/win32/Makefile @@@ -678,20 -676,16 +682,24 @@@ realclean: clea cd $(EXTDIR) -del /s *.lib *.def *.map *.bs Makefile *$(o) pm_to_blib cd ..\win32 + -del /f $(EXTDIR)\DynaLoader\dl_win32.xs + -del /f $(EXTDIR)\DynaLoader\DynaLoader.c + -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\Dynaloader.pm $(LIBDIR)\FCntl.pm + -del /f $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm + -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm + -del /f ..\x2p\find2perl ..\x2p\s2p + -rmdir /s /q $(LIBDIR)\IO || rmdir /s $(LIBDIR)\IO -rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR) -rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR) + -rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR) - install : all doc utils + install : all installbare installutils installhtml + + installbare : $(PERLEXE) ..\installperl $(XCOPY) $(PERL95EXE) $(INST_BIN)\*.* + + installutils : utils $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.* $(XCOPY) bin\*.bat $(INST_BIN)\*.* $(XCOPY) ..\pod\*.bat $(INST_BIN)\*.* diff --cc win32/config.bc index 0364c32,cd82b30..fe9f297 --- a/win32/config.bc +++ b/win32/config.bc @@@ -159,11 -159,11 +159,11 @@@ d_mkfifo='undef d_mkstemp='undef' d_mktime='define' d_msg='undef' - d_msgctl='define' - d_msgget='define' - d_msgrcv='define' - d_msgsnd='define' + d_msgctl='undef' + d_msgget='undef' + d_msgrcv='undef' + d_msgsnd='undef' -d_mymalloc='define' +d_mymalloc='undef' d_nice='undef' d_oldpthreads='undef' d_oldsock='undef' diff --cc win32/config.gc index ec41c2e,73bf865..5e732ab --- a/win32/config.gc +++ b/win32/config.gc @@@ -159,11 -159,11 +159,11 @@@ d_mkfifo='undef d_mkstemp='undef' d_mktime='define' d_msg='undef' - d_msgctl='define' - d_msgget='define' - d_msgrcv='define' - d_msgsnd='define' + d_msgctl='undef' + d_msgget='undef' + d_msgrcv='undef' + d_msgsnd='undef' -d_mymalloc='define' +d_mymalloc='undef' d_nice='undef' d_oldpthreads='undef' d_oldsock='undef' diff --cc win32/config.vc index 62cd537,84ee590..1fdbcbf --- a/win32/config.vc +++ b/win32/config.vc @@@ -159,11 -159,11 +159,11 @@@ d_mkfifo='undef d_mkstemp='undef' d_mktime='define' d_msg='undef' - d_msgctl='define' - d_msgget='define' - d_msgrcv='define' - d_msgsnd='define' + d_msgctl='undef' + d_msgget='undef' + d_msgrcv='undef' + d_msgsnd='undef' -d_mymalloc='define' +d_mymalloc='undef' d_nice='undef' d_oldpthreads='undef' d_oldsock='undef' diff --cc win32/makefile.mk index cd2a95a,e77713c..d747645 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@@ -797,11 -810,22 +807,13 @@@ distclean: clea $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD) -del /f *.def *.map -del /f $(EXTENSION_DLL) - -del /f $(EXTENSION_C) $(DYNALOADER).c - -del /f $(EXTDIR)\DynaLoader\dl_win32.xs - -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm - -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm - -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm - -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm - -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm - -rmdir /s /q $(LIBDIR)\IO || rmdir /s $(LIBDIR)\IO - -rmdir /s /q $(LIBDIR)\Thread || rmdir /s $(LIBDIR)\Thread - -rmdir /s /q $(LIBDIR)\B || rmdir /s $(LIBDIR)\B + -del /f $(EXTENSION_C) -del /f $(PODDIR)\*.html -del /f $(PODDIR)\*.bat + -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc pstruct *.bat + -cd ..\x2p && del /f find2perl s2p *.bat -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new - -del /f $(CONFIGPM) + -del /f ..\lib\Config.pm .IF "$(PERL95EXE)" != "" -del /f perl95.c .ENDIF @@@ -809,9 -833,10 +821,9 @@@ -cd $(EXTDIR) && del /s *.lib *.def *.map *.bs Makefile *$(o) pm_to_blib -rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR) -rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR) - -install : all installbare installutils installhtml + -rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR) - install : all doc utils + installbare : $(PERLEXE) ..\installperl .IF "$(PERL95EXE)" != "" $(XCOPY) $(PERL95EXE) $(INST_BIN)\*.* diff --cc win32/win32.c index 674b047,9cee6b5..d4be76a --- a/win32/win32.c +++ b/win32/win32.c @@@ -111,31 -73,8 +111,9 @@@ static BOOL has_redirection(char *ptr) static long filetime_to_clock(PFILETIME ft); static BOOL filetime_from_time(PFILETIME ft, time_t t); + - char * w32_perlshell_tokens = Nullch; - char ** w32_perlshell_vec; - long w32_perlshell_items = -1; - DWORD w32_platform = (DWORD)-1; - char w32_perllib_root[MAX_PATH+1]; HANDLE w32_perldll_handle = INVALID_HANDLE_VALUE; - #ifndef __BORLANDC__ - long w32_num_children = 0; - HANDLE w32_child_pids[MAXIMUM_WAIT_OBJECTS]; - #endif - - #ifndef FOPEN_MAX - # if defined(_NSTREAM_) - # define FOPEN_MAX _NSTREAM_ - # elsif defined(_NFILE_) - # define FOPEN_MAX _NFILE_ - # elsif defined(_NFILE) - # define FOPEN_MAX _NFILE - # endif - #endif - - #ifndef USE_CRT_POPEN - int w32_popen_pids[FOPEN_MAX]; - #endif + static DWORD w32_platform = (DWORD)-1; #ifdef USE_THREADS # ifdef USE_DECLSPEC_THREAD diff --cc win32/win32.h index 1930e39,d2ac9b9..021cc48 --- a/win32/win32.h +++ b/win32/win32.h @@@ -138,11 -119,8 +138,13 @@@ struct tms #pragma warn -csu /* "comparing signed and unsigned values" */ #pragma warn -pro /* "call to function with no prototype" */ + #define USE_RTL_WAIT /* Borland has a working wait() */ + +/* Borland is picky about a bare member function name used as its ptr */ +#ifdef PERL_OBJECT +#define FUNC_NAME_TO_PTR(name) &(name) +#endif + #endif #ifdef _MSC_VER /* Microsoft Visual C++ */