-void dump_mstats _((char* s));
-#endif
-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));
-char* fbm_instr _((unsigned char* big, unsigned char* bigend, SV* littlesv));
-OP* force_list _((OP* arg));
-OP* fold_constants _((OP* arg));
-char* form _((const char* pat, ...));
-void free_tmps _((void));
-OP* gen_constant_list _((OP* op));
-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 hoistmust _((PMOP* pm));
-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));
-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* op));
-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_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_getpack _((SV* sv, MAGIC* mg));
-int magic_getpos _((SV* sv, MAGIC* mg));
-int magic_getsig _((SV* sv, MAGIC* mg));
-int magic_gettaint _((SV* sv, MAGIC* mg));
-int magic_getuvar _((SV* sv, MAGIC* mg));
-U32 magic_len _((SV* sv, MAGIC* mg));
-int magic_nextpack _((SV* sv, MAGIC* mg, SV* key));
-int magic_set _((SV* sv, MAGIC* mg));
+VIRTUAL void dump_mstats _((char* s));
+#endif
+VIRTUAL void dump_op _((OP* arg));
+VIRTUAL void dump_pm _((PMOP* pm));
+VIRTUAL void dump_packsubs _((HV* stash));
+VIRTUAL void dump_sub _((GV* gv));
+VIRTUAL void fbm_compile _((SV* sv, U32 flags));
+VIRTUAL char* fbm_instr _((unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags));
+VIRTUAL char* find_script _((char *scriptname, bool dosearch, char **search_ext, I32 flags));
+#ifdef USE_THREADS
+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_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
+VIRTUAL int magic_mutexfree _((SV* sv, MAGIC* mg));
+#endif /* USE_THREADS */
+VIRTUAL int magic_nextpack _((SV* sv, MAGIC* mg, SV* key));
+VIRTUAL int magic_set _((SV* sv, MAGIC* mg));