[asperl] initial merge of latest win32 branch into ASPerl
Gurusamy Sarathy [Fri, 30 Jan 1998 10:44:38 +0000 (10:44 +0000)]
p4raw-id: //depot/asperl@445

21 files changed:
1  2 
gv.c
hv.c
mg.c
op.c
perl.h
pp.c
pp.h
pp_ctl.c
pp_hot.c
pp_sys.c
proto.h
regcomp.h
regexec.c
scope.c
sv.c
sv.h
toke.c
universal.c
util.c
vms/vms.c
win32/Makefile

diff --cc gv.c
Simple merge
diff --cc hv.c
Simple merge
diff --cc mg.c
--- 1/mg.c
--- 2/mg.c
+++ b/mg.c
@@@ -950,9 -952,36 +982,36 @@@ magic_setnkeys(SV *sv, MAGIC *mg
        LvTARG(sv) = Nullsv;    /* Don't allow a ref to reassign this. */
      }
      return 0;
+ }          
+ static int
+ magic_methcall(MAGIC *mg, char *meth, I32 flags, int n, SV *val)
+ {
+     dSP;
+     PUSHMARK(sp);
+     EXTEND(sp, n);
+     PUSHs(mg->mg_obj);
+     if (n > 1) { 
+       if (mg->mg_ptr) {
 -          if (mg->mg_len >= 0)
 -              PUSHs(sv_2mortal(newSVpv(mg->mg_ptr, mg->mg_len)));
 -          else if (mg->mg_len == HEf_SVKEY)
++          if (mg->mg_length >= 0)
++              PUSHs(sv_2mortal(newSVpv(mg->mg_ptr, mg->mg_length)));
++          else if (mg->mg_length == HEf_SVKEY)
+               PUSHs((SV*)mg->mg_ptr);
+       }
+       else if (mg->mg_type == 'p') {
 -          PUSHs(sv_2mortal(newSViv(mg->mg_len)));
++          PUSHs(sv_2mortal(newSViv(mg->mg_length)));
+       }
+     }
+     if (n > 2) {
+       PUSHs(val);
+     }
+     PUTBACK;
+     return perl_call_method(meth, flags);
  }
  
 -static int
 +STATIC int
  magic_methpack(SV *sv, MAGIC *mg, char *meth)
  {
      dSP;
diff --cc op.c
Simple merge
diff --cc perl.h
Simple merge
diff --cc pp.c
--- 1/pp.c
--- 2/pp.c
+++ b/pp.c
@@@ -3527,10 -3571,10 +3573,10 @@@ is_an_int(char *s, STRLEN l
    return (result);
  }
  
 -static int
 +STATIC int
  div128(SV *pnum, bool *done)
                                            /* must be '\0' terminated */
-                           
  {
    STRLEN          len;
    char           *s = SvPV(pnum, len);
diff --cc pp.h
Simple merge
diff --cc pp_ctl.c
+++ b/pp_ctl.c
@@@ -37,11 -33,9 +37,10 @@@ static I32 dopoptolabel _((char *label)
  static I32 dopoptoloop _((I32 startingblock));
  static I32 dopoptosub _((I32 startingblock));
  static void save_lines _((AV *array, SV *sv));
- static int sortcv _((const void *, const void *));
- static int sortcmp _((const void *, const void *));
- static int sortcmp_locale _((const void *, const void *));
+ static I32 sortcv _((SV *a, SV *b));
+ static void qsortsv _((SV **array, size_t num_elts, I32 (*fun)(SV *a, SV *b)));
  static OP *doeval _((int gimme, OP** startop));
 +#endif
  
  static I32 sortcxix;
  
@@@ -761,14 -739,7 +760,14 @@@ PP(pp_sort
            }
            sortcxix = cxstack_ix;
  
 -          qsortsv(myorigmark+1, max, sortcv);
 +#ifdef PERL_OBJECT
 +          MUTEX_LOCK(&sort_mutex);
 +          pSortPerl = this;
-           qsort((char*)(myorigmark+1), max, sizeof(SV*), SortCv);
++          qsortsv((myorigmark+1), max, SortCv);
 +          MUTEX_UNLOCK(&sort_mutex);
 +#else
-           qsort((char*)(myorigmark+1), max, sizeof(SV*), sortcv);
++          qsortsv((myorigmark+1), max, sortcv);
 +#endif
  
            POPBLOCK(cx,curpm);
            SWITCHSTACK(sortstack, oldstack);
      else {
        if (max > 1) {
            MEXTEND(SP, 20);    /* Can't afford stack realloc on signal. */
 +#ifdef PERL_OBJECT
 +          MUTEX_LOCK(&sort_mutex);
 +          pSortPerl = this;
-           qsort((char*)(ORIGMARK+1), max, sizeof(SV*),
-                 (op->op_private & OPpLOCALE) ? SortCmpLocale : SortCmp);
+           qsortsv(ORIGMARK+1, max,
+                 (op->op_private & OPpLOCALE) ? sv_cmp_locale : sv_cmp);
 +          MUTEX_UNLOCK(&sort_mutex);
 +#else
-           qsort((char*)(ORIGMARK+1), max, sizeof(SV*),
-                 (op->op_private & OPpLOCALE) ? sortcmp_locale : sortcmp);
++          qsortsv(ORIGMARK+1, max,
++                (op->op_private & OPpLOCALE) ? sv_cmp_locale : sv_cmp);
 +#endif
        }
      }
      stack_sp = ORIGMARK + max;
@@@ -1259,20 -1222,18 +1258,18 @@@ PP(pp_caller
      RETURN;
  }
  
- STATIC int
- sortcv(const void *a, const void *b)
 -static I32
++STATIC I32
+ sortcv(SV *a, SV *b)
  {
      dTHR;
      I32 oldsaveix = savestack_ix;
      I32 oldscopeix = scopestack_ix;
      I32 result;
-     GvSV(firstgv) = *str1;
-     GvSV(secondgv) = *str2;
+     GvSV(firstgv) = a;
+     GvSV(secondgv) = b;
      stack_sp = stack_base;
      op = sortcop;
 -    runops();
 +    CALLRUNOPS();
      if (stack_sp != stack_base + 1)
        croak("Sort subroutine didn't return single value");
      if (!SvNIOKp(*stack_sp))
diff --cc pp_hot.c
Simple merge
diff --cc pp_sys.c
Simple merge
diff --cc proto.h
+++ b/proto.h
@@@ -298,330 -287,307 +298,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  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 *));
 +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  newFORM _((I32 floor, OP* o, OP* block));
 +VIRTUAL OP*   newFOROP _((I32 flags, char* label, line_t forline, OP* scalar, 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)(CPERLproto_ CV* cv), 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* ref));
 +VIRTUAL SV*   newRV_noinc _((SV *));
  #ifdef LEAKTEST
 -SV*   newSV _((I32 x, STRLEN len));
 +VIRTUAL SV*   newSV _((I32 x, STRLEN len));
  #else
 -SV*   newSV _((STRLEN len));
 -#endif
 -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*   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 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
 -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 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));
 -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 I32   perl_call_argv _((char* subname, I32 flags, char** argv));
 +VIRTUAL I32   perl_call_method _((char* methname, I32 flags));
 +VIRTUAL I32   perl_call_pv _((char* subname, 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));
 -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));
 -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  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));
 +VIRTUAL void  regdump _((regexp* r));
 +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));
 +VIRTUAL void  regprop _((SV* sv, regnode* o));
 +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, Sighandler_t));
 +VIRTUAL int   rsignal_restore _((int, Sigsave_t*));
 +VIRTUAL int   rsignal_save _((int, Sighandler_t, Sigsave_t*));
 +VIRTUAL Sighandler_t rsignal_state _((int));
 +VIRTUAL void  rxres_free _((void** rsp));
 +VIRTUAL void  rxres_restore _((void** rsp, REGEXP* rx));
 +VIRTUAL void  rxres_save _((void** rsp, REGEXP* rx));
  #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_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_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
 +VIRTUAL void  save_destructor _((void (*f)(void*, void*), 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_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_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_catpv _((SV* sv, char* ptr));
 -void  sv_catpvn _((SV* sv, char* ptr, STRLEN len));
 -void  sv_catsv _((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 *, STRLEN *));
- VIRTUAL I32   sv_true _((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));
++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));
++VIRTUAL int   main _((int argc, char** argv, char** env));
++VIRTUAL void  markstack_grow _((void));
  #ifdef USE_LOCALE_COLLATE
- 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
- VIRTUAL char* sv_grow _((SV* sv, I32 newlen));
- #else
- VIRTUAL char* sv_grow _((SV* sv, unsigned long newlen));
 -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));
 -#ifndef DOSISH
 -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));
 -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_setiv _((SV* sv, IV num));
 -void  sv_setpviv _((SV* sv, IV num));
 -void  sv_setuv _((SV* sv, UV num));
 -void  sv_setnv _((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_setpvn _((SV* sv, const char* ptr, STRLEN len));
 -void  sv_setsv _((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_vcatpvfn _((SV* sv, const char* pat, STRLEN patlen,
++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* , char* , I32));
++VIRTUAL MAGIC*        mg_find _((SV* sv, int type));
++VIRTUAL int   mg_free _((SV* sv));
++VIRTUAL int   mg_get _((SV* sv));
++VIRTUAL U32   mg_len _((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)
++VIRTUAL char* my_bcopy _((char* from, char* to, I32 len));
 +#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));
 +VIRTUAL char* sv_peek _((SV* sv));
 +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,...));
 -void  watch _((char** addr));
 -I32   whichsig _((char* sig));
 -int   yyerror _((char* s));
 -int   yylex _((void));
 -int   yyparse _((void));
 -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 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,...));
- VIRTUAL void  watch _((char** addr));
- 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
- 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));
++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  newFORM _((I32 floor, OP* o, OP* block));
++VIRTUAL OP*   newFOROP _((I32 flags, char* label, line_t forline, OP* scalar, 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), 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* ref));
++#if !defined(__GNUC__) && (defined(CRIPPLED_CC) || defined(USE_THREADS))
++VIRTUAL SV*   newRV_noinc _((SV *));
  #endif
--
  #ifdef LEAKTEST
 -Malloc_t safexmalloc _((I32 x, MEM_SIZE size));
 -Malloc_t safexcalloc _((I32 x, MEM_SIZE elements, MEM_SIZE size));
 -Malloc_t safexrealloc _((Malloc_t where, MEM_SIZE size));
 -void     safexfree _((Malloc_t where));
 +VIRTUAL Malloc_t safexmalloc _((I32 x, MEM_SIZE size));
 +VIRTUAL Malloc_t safexcalloc _((I32 x, MEM_SIZE elements, MEM_SIZE size));
 +VIRTUAL Malloc_t safexrealloc _((Malloc_t where, MEM_SIZE size));
 +VIRTUAL void     safexfree _((Malloc_t where));
  #endif
  
  #ifdef PERL_GLOBAL_STRUCT
diff --cc regcomp.h
Simple merge
diff --cc regexec.c
Simple merge
diff --cc scope.c
Simple merge
diff --cc sv.c
Simple merge
diff --cc sv.h
Simple merge
diff --cc toke.c
Simple merge
diff --cc universal.c
Simple merge
diff --cc util.c
Simple merge
diff --cc vms/vms.c
Simple merge
diff --cc win32/Makefile
Simple merge