The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

int runops_switch(pTHX)
{
    while (PL_op) {
	switch (PL_op->op_type) {
	    case OP_NULL:
	    case OP_SCALAR:
	    case OP_SCOPE:
	    case OP_LINESEQ:
	    case OP_REGCMAYBE:
		PL_op = NORMAL; break;
	    case OP_STUB:
		{
		    dSP;
		    if (GIMME_V == G_SCALAR)
			XPUSHs(&PL_sv_undef);
		    PUTBACK;
		    PL_op = NORMAL;
		}
		break;
	    case OP_PUSHMARK:
		PUSHMARK(PL_stack_sp);
		PL_op = NORMAL;
		break;
	    case OP_WANTARRAY:
		PL_op = Perl_pp_wantarray(aTHX); break;
	    case OP_CONST:
		{ dSP; XPUSHs(cSVOP_sv); PUTBACK; PL_op = NORMAL; }
		break;
	    case OP_GVSV:
		PL_op = Perl_pp_gvsv(aTHX); break;
	    case OP_GV:
		{
		    dSP;
		    XPUSHs((SV*)cGVOP_gv);
		    PUTBACK;
		    PL_op = NORMAL;
		}
		break;
	    case OP_GELEM:
		PL_op = Perl_pp_gelem(aTHX); break;
	    case OP_PADSV:
		PL_op = Perl_pp_padsv(aTHX); break;
	    case OP_PADAV:
		PL_op = Perl_pp_padav(aTHX); break;
	    case OP_PADHV:
		PL_op = Perl_pp_padhv(aTHX); break;
	    case OP_PADANY:
		PL_op = Perl_pp_padany(aTHX); break;
	    case OP_PUSHRE:
		PL_op = Perl_pp_pushre(aTHX); break;
	    case OP_RV2GV:
		PL_op = Perl_pp_rv2gv(aTHX); break;
	    case OP_RV2SV:
		PL_op = Perl_pp_rv2sv(aTHX); break;
	    case OP_AV2ARYLEN:
		PL_op = Perl_pp_av2arylen(aTHX); break;
	    case OP_RV2CV:
		PL_op = Perl_pp_rv2cv(aTHX); break;
	    case OP_ANONCODE:
		PL_op = Perl_pp_anoncode(aTHX); break;
	    case OP_PROTOTYPE:
		PL_op = Perl_pp_prototype(aTHX); break;
	    case OP_REFGEN:
		PL_op = Perl_pp_refgen(aTHX); break;
	    case OP_SREFGEN:
		PL_op = Perl_pp_srefgen(aTHX); break;
	    case OP_REF:
		PL_op = Perl_pp_ref(aTHX); break;
	    case OP_BLESS:
		PL_op = Perl_pp_bless(aTHX); break;
	    case OP_BACKTICK:
		PL_op = Perl_pp_backtick(aTHX); break;
	    case OP_GLOB:
		PL_op = Perl_pp_glob(aTHX); break;
	    case OP_READLINE:
		PL_op = Perl_pp_readline(aTHX); break;
	    case OP_RCATLINE:
		PL_op = Perl_pp_rcatline(aTHX); break;
	    case OP_REGCRESET:
		PL_op = Perl_pp_regcreset(aTHX); break;
	    case OP_REGCOMP:
		PL_op = Perl_pp_regcomp(aTHX); break;
	    case OP_MATCH:
		PL_op = Perl_pp_match(aTHX); break;
	    case OP_QR:
		PL_op = Perl_pp_qr(aTHX); break;
	    case OP_SUBST:
		PL_op = Perl_pp_subst(aTHX); break;
	    case OP_SUBSTCONT:
		PL_op = Perl_pp_substcont(aTHX); break;
	    case OP_TRANS:
		PL_op = Perl_pp_trans(aTHX); break;
	    case OP_SASSIGN:
		PL_op = Perl_pp_sassign(aTHX); break;
	    case OP_AASSIGN:
		PL_op = Perl_pp_aassign(aTHX); break;
	    case OP_CHOP:
		PL_op = Perl_pp_chop(aTHX); break;
	    case OP_SCHOP:
		PL_op = Perl_pp_schop(aTHX); break;
	    case OP_CHOMP:
		PL_op = Perl_pp_chomp(aTHX); break;
	    case OP_SCHOMP:
		PL_op = Perl_pp_schomp(aTHX); break;
	    case OP_DEFINED:
		PL_op = Perl_pp_defined(aTHX); break;
	    case OP_UNDEF:
		PL_op = Perl_pp_undef(aTHX); break;
	    case OP_STUDY:
		PL_op = Perl_pp_study(aTHX); break;
	    case OP_POS:
		PL_op = Perl_pp_pos(aTHX); break;
	    case OP_PREINC:
		PL_op = Perl_pp_preinc(aTHX); break;
	    case OP_I_PREINC:
		PL_op = Perl_pp_i_preinc(aTHX); break;
	    case OP_PREDEC:
		PL_op = Perl_pp_predec(aTHX); break;
	    case OP_I_PREDEC:
		PL_op = Perl_pp_i_predec(aTHX); break;
	    case OP_POSTINC:
		PL_op = Perl_pp_postinc(aTHX); break;
	    case OP_I_POSTINC:
		PL_op = Perl_pp_i_postinc(aTHX); break;
	    case OP_POSTDEC:
		PL_op = Perl_pp_postdec(aTHX); break;
	    case OP_I_POSTDEC:
		PL_op = Perl_pp_i_postdec(aTHX); break;
	    case OP_POW:
		PL_op = Perl_pp_pow(aTHX); break;
	    case OP_MULTIPLY:
		PL_op = Perl_pp_multiply(aTHX); break;
	    case OP_I_MULTIPLY:
		PL_op = Perl_pp_i_multiply(aTHX); break;
	    case OP_DIVIDE:
		PL_op = Perl_pp_divide(aTHX); break;
	    case OP_I_DIVIDE:
		PL_op = Perl_pp_i_divide(aTHX); break;
	    case OP_MODULO:
		PL_op = Perl_pp_modulo(aTHX); break;
	    case OP_I_MODULO:
		PL_op = Perl_pp_i_modulo(aTHX); break;
	    case OP_REPEAT:
		PL_op = Perl_pp_repeat(aTHX); break;
	    case OP_ADD:
		PL_op = Perl_pp_add(aTHX); break;
	    case OP_I_ADD:
		PL_op = Perl_pp_i_add(aTHX); break;
	    case OP_SUBTRACT:
		PL_op = Perl_pp_subtract(aTHX); break;
	    case OP_I_SUBTRACT:
		PL_op = Perl_pp_i_subtract(aTHX); break;
	    case OP_CONCAT:
		PL_op = Perl_pp_concat(aTHX); break;
	    case OP_STRINGIFY:
		{
		    dSP; dTARGET;
		    sv_copypv(TARG,TOPs);
		    SETTARG;
		    PUTBACK;
		    PL_op = NORMAL;
		}
		break;
	    case OP_LEFT_SHIFT:
		PL_op = Perl_pp_left_shift(aTHX); break;
	    case OP_RIGHT_SHIFT:
		PL_op = Perl_pp_right_shift(aTHX); break;
	    case OP_LT:
		PL_op = Perl_pp_lt(aTHX); break;
	    case OP_I_LT:
		PL_op = Perl_pp_i_lt(aTHX); break;
	    case OP_GT:
		PL_op = Perl_pp_gt(aTHX); break;
	    case OP_I_GT:
		PL_op = Perl_pp_i_gt(aTHX); break;
	    case OP_LE:
		PL_op = Perl_pp_le(aTHX); break;
	    case OP_I_LE:
		PL_op = Perl_pp_i_le(aTHX); break;
	    case OP_GE:
		PL_op = Perl_pp_ge(aTHX); break;
	    case OP_I_GE:
		PL_op = Perl_pp_i_ge(aTHX); break;
	    case OP_EQ:
		PL_op = Perl_pp_eq(aTHX); break;
	    case OP_I_EQ:
		PL_op = Perl_pp_i_eq(aTHX); break;
	    case OP_NE:
		PL_op = Perl_pp_ne(aTHX); break;
	    case OP_I_NE:
		PL_op = Perl_pp_i_ne(aTHX); break;
	    case OP_NCMP:
		PL_op = Perl_pp_ncmp(aTHX); break;
	    case OP_I_NCMP:
		PL_op = Perl_pp_i_ncmp(aTHX); break;
	    case OP_SLT:
		PL_op = Perl_pp_slt(aTHX); break;
	    case OP_SGT:
		PL_op = Perl_pp_sgt(aTHX); break;
	    case OP_SLE:
		PL_op = Perl_pp_sle(aTHX); break;
	    case OP_SGE:
		PL_op = Perl_pp_sge(aTHX); break;
	    case OP_SEQ:
		PL_op = Perl_pp_seq(aTHX); break;
	    case OP_SNE:
		PL_op = Perl_pp_sne(aTHX); break;
	    case OP_SCMP:
		PL_op = Perl_pp_scmp(aTHX); break;
	    case OP_BIT_AND:
		PL_op = Perl_pp_bit_and(aTHX); break;
	    case OP_BIT_XOR:
		PL_op = Perl_pp_bit_xor(aTHX); break;
	    case OP_BIT_OR:
		PL_op = Perl_pp_bit_or(aTHX); break;
	    case OP_NEGATE:
		PL_op = Perl_pp_negate(aTHX); break;
	    case OP_I_NEGATE:
		PL_op = Perl_pp_i_negate(aTHX); break;
	    case OP_NOT:
		PL_op = Perl_pp_not(aTHX); break;
	    case OP_COMPLEMENT:
		PL_op = Perl_pp_complement(aTHX); break;
	    case OP_ATAN2:
		PL_op = Perl_pp_atan2(aTHX); break;
	    case OP_SIN:
		PL_op = Perl_pp_sin(aTHX); break;
	    case OP_COS:
		PL_op = Perl_pp_cos(aTHX); break;
	    case OP_RAND:
		PL_op = Perl_pp_rand(aTHX); break;
	    case OP_SRAND:
		PL_op = Perl_pp_srand(aTHX); break;
	    case OP_EXP:
		PL_op = Perl_pp_exp(aTHX); break;
	    case OP_LOG:
		PL_op = Perl_pp_log(aTHX); break;
	    case OP_SQRT:
		PL_op = Perl_pp_sqrt(aTHX); break;
	    case OP_INT:
		PL_op = Perl_pp_int(aTHX); break;
	    case OP_HEX:
		PL_op = Perl_pp_hex(aTHX); break;
	    case OP_OCT:
		PL_op = Perl_pp_oct(aTHX); break;
	    case OP_ABS:
		PL_op = Perl_pp_abs(aTHX); break;
	    case OP_LENGTH:
		PL_op = Perl_pp_length(aTHX); break;
	    case OP_SUBSTR:
		PL_op = Perl_pp_substr(aTHX); break;
	    case OP_VEC:
		PL_op = Perl_pp_vec(aTHX); break;
	    case OP_INDEX:
		PL_op = Perl_pp_index(aTHX); break;
	    case OP_RINDEX:
		PL_op = Perl_pp_rindex(aTHX); break;
	    case OP_SPRINTF:
		PL_op = Perl_pp_sprintf(aTHX); break;
	    case OP_FORMLINE:
		PL_op = Perl_pp_formline(aTHX); break;
	    case OP_ORD:
		PL_op = Perl_pp_ord(aTHX); break;
	    case OP_CHR:
		PL_op = Perl_pp_chr(aTHX); break;
	    case OP_CRYPT:
		PL_op = Perl_pp_crypt(aTHX); break;
	    case OP_UCFIRST:
		PL_op = Perl_pp_ucfirst(aTHX); break;
	    case OP_LCFIRST:
		PL_op = Perl_pp_lcfirst(aTHX); break;
	    case OP_UC:
		PL_op = Perl_pp_uc(aTHX); break;
	    case OP_LC:
		PL_op = Perl_pp_lc(aTHX); break;
	    case OP_QUOTEMETA:
		PL_op = Perl_pp_quotemeta(aTHX); break;
	    case OP_RV2AV:
		PL_op = Perl_pp_rv2av(aTHX); break;
	    case OP_AELEMFAST:
		PL_op = Perl_pp_aelemfast(aTHX); break;
	    case OP_AELEM:
		PL_op = Perl_pp_aelem(aTHX); break;
	    case OP_ASLICE:
		PL_op = Perl_pp_aslice(aTHX); break;
	    case OP_EACH:
		PL_op = Perl_pp_each(aTHX); break;
	    case OP_VALUES:
		PL_op = Perl_pp_values(aTHX); break;
	    case OP_KEYS:
		PL_op = Perl_pp_keys(aTHX); break;
	    case OP_DELETE:
		PL_op = Perl_pp_delete(aTHX); break;
	    case OP_EXISTS:
		PL_op = Perl_pp_exists(aTHX); break;
	    case OP_RV2HV:
		PL_op = Perl_pp_rv2hv(aTHX); break;
	    case OP_HELEM:
		PL_op = Perl_pp_helem(aTHX); break;
	    case OP_HSLICE:
		PL_op = Perl_pp_hslice(aTHX); break;
	    case OP_UNPACK:
		PL_op = Perl_pp_unpack(aTHX); break;
	    case OP_PACK:
		PL_op = Perl_pp_pack(aTHX); break;
	    case OP_SPLIT:
		PL_op = Perl_pp_split(aTHX); break;
	    case OP_JOIN:
		PL_op = Perl_pp_join(aTHX); break;
	    case OP_LIST:
		PL_op = Perl_pp_list(aTHX); break;
	    case OP_LSLICE:
		PL_op = Perl_pp_lslice(aTHX); break;
	    case OP_ANONLIST:
		PL_op = Perl_pp_anonlist(aTHX); break;
	    case OP_ANONHASH:
		PL_op = Perl_pp_anonhash(aTHX); break;
	    case OP_SPLICE:
		PL_op = Perl_pp_splice(aTHX); break;
	    case OP_PUSH:
		PL_op = Perl_pp_push(aTHX); break;
	    case OP_POP:
		PL_op = Perl_pp_pop(aTHX); break;
	    case OP_SHIFT:
		PL_op = Perl_pp_shift(aTHX); break;
	    case OP_UNSHIFT:
		PL_op = Perl_pp_unshift(aTHX); break;
	    case OP_SORT:
		PL_op = Perl_pp_sort(aTHX); break;
	    case OP_REVERSE:
		PL_op = Perl_pp_reverse(aTHX); break;
	    case OP_GREPSTART:
	    case OP_MAPSTART: /* pp_mapstart isn't used */
		PL_op = Perl_pp_grepstart(aTHX); break;
	    case OP_GREPWHILE:
		PL_op = Perl_pp_grepwhile(aTHX); break;
	    case OP_MAPWHILE:
		PL_op = Perl_pp_mapwhile(aTHX); break;
	    case OP_RANGE:
		PL_op = Perl_pp_range(aTHX); break;
	    case OP_FLIP:
		PL_op = Perl_pp_flip(aTHX); break;
	    case OP_FLOP:
		PL_op = Perl_pp_flop(aTHX); break;
	    case OP_AND:
		{
		    dSP;
		    if (!SvTRUE(TOPs)) {
			PUTBACK;
			PL_op = NORMAL;
		    }
		    else {
			--SP;
			PUTBACK;
			PL_op = cLOGOP->op_other;
		    }
		}
		break;
	    case OP_OR:
		{
		    dSP;
		    if (SvTRUE(TOPs)) {
			PUTBACK;
			PL_op = NORMAL;
		    }
		    else {
			--SP;
			PUTBACK;
			PL_op = cLOGOP->op_other;
		    }
		}
		break;
	    case OP_XOR:
		PL_op = Perl_pp_xor(aTHX); break;
	    case OP_COND_EXPR:
		{
		    dSP;
		    if (SvTRUEx(POPs))
			PUTBACK, PL_op = cLOGOP->op_other;
		    else
			PUTBACK, PL_op = cLOGOP->op_next;
		}
		break;
	    case OP_ANDASSIGN:
		PL_op = Perl_pp_andassign(aTHX); break;
	    case OP_ORASSIGN:
		PL_op = Perl_pp_orassign(aTHX); break;
	    case OP_METHOD:
		PL_op = Perl_pp_method(aTHX); break;
	    case OP_ENTERSUB:
		PL_op = Perl_pp_entersub(aTHX); break;
	    case OP_LEAVESUB:
		PL_op = Perl_pp_leavesub(aTHX); break;
	    case OP_LEAVESUBLV:
		PL_op = Perl_pp_leavesublv(aTHX); break;
	    case OP_CALLER:
		PL_op = Perl_pp_caller(aTHX); break;
	    case OP_WARN:
		PL_op = Perl_pp_warn(aTHX); break;
	    case OP_DIE:
		PL_op = Perl_pp_die(aTHX); break;
	    case OP_RESET:
		PL_op = Perl_pp_reset(aTHX); break;
	    case OP_NEXTSTATE:
		PL_curcop = (COP*)PL_op;
		TAINT_NOT;		/* Each statement is presumed innocent */
		PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
		FREETMPS;
		PL_op = NORMAL;
		break;
	    case OP_DBSTATE:
		PL_op = Perl_pp_dbstate(aTHX); break;
	    case OP_UNSTACK:
		{
		    I32 oldsave;
		    TAINT_NOT;		/* Each statement is presumed innocent */
		    PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
		    FREETMPS;
		    oldsave = PL_scopestack[PL_scopestack_ix - 1];
		    LEAVE_SCOPE(oldsave);
		    PL_op = NORMAL;
		}
		break;
	    case OP_ENTER:
		PL_op = Perl_pp_enter(aTHX); break;
	    case OP_LEAVE:
		PL_op = Perl_pp_leave(aTHX); break;
	    case OP_ENTERITER:
		PL_op = Perl_pp_enteriter(aTHX); break;
	    case OP_ITER:
		PL_op = Perl_pp_iter(aTHX); break;
	    case OP_ENTERLOOP:
		PL_op = Perl_pp_enterloop(aTHX); break;
	    case OP_LEAVELOOP:
		PL_op = Perl_pp_leaveloop(aTHX); break;
	    case OP_RETURN:
		PL_op = Perl_pp_return(aTHX); break;
	    case OP_LAST:
		PL_op = Perl_pp_last(aTHX); break;
	    case OP_NEXT:
		PL_op = Perl_pp_next(aTHX); break;
	    case OP_REDO:
		PL_op = Perl_pp_redo(aTHX); break;
	    case OP_DUMP:
		PL_op = Perl_pp_dump(aTHX); break;
	    case OP_GOTO:
		PL_op = Perl_pp_goto(aTHX); break;
	    case OP_EXIT:
		PL_op = Perl_pp_exit(aTHX); break;
	    case OP_OPEN:
		PL_op = Perl_pp_open(aTHX); break;
	    case OP_CLOSE:
		PL_op = Perl_pp_close(aTHX); break;
	    case OP_PIPE_OP:
		PL_op = Perl_pp_pipe_op(aTHX); break;
	    case OP_FILENO:
		PL_op = Perl_pp_fileno(aTHX); break;
	    case OP_UMASK:
		PL_op = Perl_pp_umask(aTHX); break;
	    case OP_BINMODE:
		PL_op = Perl_pp_binmode(aTHX); break;
	    case OP_TIE:
		PL_op = Perl_pp_tie(aTHX); break;
	    case OP_UNTIE:
		PL_op = Perl_pp_untie(aTHX); break;
	    case OP_TIED:
		PL_op = Perl_pp_tied(aTHX); break;
	    case OP_DBMOPEN:
		PL_op = Perl_pp_dbmopen(aTHX); break;
	    case OP_DBMCLOSE:
		PL_op = Perl_pp_dbmclose(aTHX); break;
	    case OP_SSELECT:
		PL_op = Perl_pp_sselect(aTHX); break;
	    case OP_SELECT:
		PL_op = Perl_pp_select(aTHX); break;
	    case OP_GETC:
		PL_op = Perl_pp_getc(aTHX); break;
	    case OP_READ:
		PL_op = Perl_pp_read(aTHX); break;
	    case OP_ENTERWRITE:
		PL_op = Perl_pp_enterwrite(aTHX); break;
	    case OP_LEAVEWRITE:
		PL_op = Perl_pp_leavewrite(aTHX); break;
	    case OP_PRTF:
		PL_op = Perl_pp_prtf(aTHX); break;
	    case OP_PRINT:
#if PERL_VERSION >= 10
	    case OP_SAY:
#endif
		PL_op = Perl_pp_print(aTHX); break;
	    case OP_SYSOPEN:
		PL_op = Perl_pp_sysopen(aTHX); break;
	    case OP_SYSSEEK:
		PL_op = Perl_pp_sysseek(aTHX); break;
	    case OP_SYSREAD:
		PL_op = Perl_pp_sysread(aTHX); break;
	    case OP_SYSWRITE:
		PL_op = Perl_pp_syswrite(aTHX); break;
	    case OP_SEND:
		PL_op = Perl_pp_send(aTHX); break;
	    case OP_RECV:
		PL_op = Perl_pp_recv(aTHX); break;
	    case OP_EOF:
		PL_op = Perl_pp_eof(aTHX); break;
	    case OP_TELL:
		PL_op = Perl_pp_tell(aTHX); break;
	    case OP_SEEK:
		PL_op = Perl_pp_seek(aTHX); break;
	    case OP_TRUNCATE:
		PL_op = Perl_pp_truncate(aTHX); break;
	    case OP_FCNTL:
		PL_op = Perl_pp_fcntl(aTHX); break;
	    case OP_IOCTL:
		PL_op = Perl_pp_ioctl(aTHX); break;
	    case OP_FLOCK:
		PL_op = Perl_pp_flock(aTHX); break;
	    case OP_SOCKET:
		PL_op = Perl_pp_socket(aTHX); break;
	    case OP_SOCKPAIR:
		PL_op = Perl_pp_sockpair(aTHX); break;
	    case OP_BIND:
		PL_op = Perl_pp_bind(aTHX); break;
	    case OP_CONNECT:
		PL_op = Perl_pp_connect(aTHX); break;
	    case OP_LISTEN:
		PL_op = Perl_pp_listen(aTHX); break;
	    case OP_ACCEPT:
		PL_op = Perl_pp_accept(aTHX); break;
	    case OP_SHUTDOWN:
		PL_op = Perl_pp_shutdown(aTHX); break;
	    case OP_GSOCKOPT:
		PL_op = Perl_pp_gsockopt(aTHX); break;
	    case OP_SSOCKOPT:
		PL_op = Perl_pp_ssockopt(aTHX); break;
	    case OP_GETSOCKNAME:
		PL_op = Perl_pp_getsockname(aTHX); break;
	    case OP_GETPEERNAME:
		PL_op = Perl_pp_getpeername(aTHX); break;
	    case OP_LSTAT:
		PL_op = Perl_pp_lstat(aTHX); break;
	    case OP_STAT:
		PL_op = Perl_pp_stat(aTHX); break;
	    case OP_FTRREAD:
		PL_op = Perl_pp_ftrread(aTHX); break;
	    case OP_FTRWRITE:
		PL_op = Perl_pp_ftrwrite(aTHX); break;
	    case OP_FTREXEC:
		PL_op = Perl_pp_ftrexec(aTHX); break;
	    case OP_FTEREAD:
		PL_op = Perl_pp_fteread(aTHX); break;
	    case OP_FTEWRITE:
		PL_op = Perl_pp_ftewrite(aTHX); break;
	    case OP_FTEEXEC:
		PL_op = Perl_pp_fteexec(aTHX); break;
	    case OP_FTIS:
		PL_op = Perl_pp_ftis(aTHX); break;
	    case OP_FTEOWNED:
		PL_op = Perl_pp_fteowned(aTHX); break;
	    case OP_FTROWNED:
		PL_op = Perl_pp_ftrowned(aTHX); break;
	    case OP_FTZERO:
		PL_op = Perl_pp_ftzero(aTHX); break;
	    case OP_FTSIZE:
		PL_op = Perl_pp_ftsize(aTHX); break;
	    case OP_FTMTIME:
		PL_op = Perl_pp_ftmtime(aTHX); break;
	    case OP_FTATIME:
		PL_op = Perl_pp_ftatime(aTHX); break;
	    case OP_FTCTIME:
		PL_op = Perl_pp_ftctime(aTHX); break;
	    case OP_FTSOCK:
		PL_op = Perl_pp_ftsock(aTHX); break;
	    case OP_FTCHR:
		PL_op = Perl_pp_ftchr(aTHX); break;
	    case OP_FTBLK:
		PL_op = Perl_pp_ftblk(aTHX); break;
	    case OP_FTFILE:
		PL_op = Perl_pp_ftfile(aTHX); break;
	    case OP_FTDIR:
		PL_op = Perl_pp_ftdir(aTHX); break;
	    case OP_FTPIPE:
		PL_op = Perl_pp_ftpipe(aTHX); break;
	    case OP_FTLINK:
		PL_op = Perl_pp_ftlink(aTHX); break;
	    case OP_FTSUID:
		PL_op = Perl_pp_ftsuid(aTHX); break;
	    case OP_FTSGID:
		PL_op = Perl_pp_ftsgid(aTHX); break;
	    case OP_FTSVTX:
		PL_op = Perl_pp_ftsvtx(aTHX); break;
	    case OP_FTTTY:
		PL_op = Perl_pp_fttty(aTHX); break;
	    case OP_FTTEXT:
		PL_op = Perl_pp_fttext(aTHX); break;
	    case OP_FTBINARY:
		PL_op = Perl_pp_ftbinary(aTHX); break;
	    case OP_CHDIR:
		PL_op = Perl_pp_chdir(aTHX); break;
	    case OP_CHOWN:
		PL_op = Perl_pp_chown(aTHX); break;
	    case OP_CHROOT:
		PL_op = Perl_pp_chroot(aTHX); break;
	    case OP_UNLINK:
		PL_op = Perl_pp_unlink(aTHX); break;
	    case OP_CHMOD:
		PL_op = Perl_pp_chmod(aTHX); break;
	    case OP_UTIME:
		PL_op = Perl_pp_utime(aTHX); break;
	    case OP_RENAME:
		PL_op = Perl_pp_rename(aTHX); break;
	    case OP_LINK:
		PL_op = Perl_pp_link(aTHX); break;
	    case OP_SYMLINK:
		PL_op = Perl_pp_symlink(aTHX); break;
	    case OP_READLINK:
		PL_op = Perl_pp_readlink(aTHX); break;
	    case OP_MKDIR:
		PL_op = Perl_pp_mkdir(aTHX); break;
	    case OP_RMDIR:
		PL_op = Perl_pp_rmdir(aTHX); break;
	    case OP_OPEN_DIR:
		PL_op = Perl_pp_open_dir(aTHX); break;
	    case OP_READDIR:
		PL_op = Perl_pp_readdir(aTHX); break;
	    case OP_TELLDIR:
		PL_op = Perl_pp_telldir(aTHX); break;
	    case OP_SEEKDIR:
		PL_op = Perl_pp_seekdir(aTHX); break;
	    case OP_REWINDDIR:
		PL_op = Perl_pp_rewinddir(aTHX); break;
	    case OP_CLOSEDIR:
		PL_op = Perl_pp_closedir(aTHX); break;
	    case OP_FORK:
		PL_op = Perl_pp_fork(aTHX); break;
	    case OP_WAIT:
		PL_op = Perl_pp_wait(aTHX); break;
	    case OP_WAITPID:
		PL_op = Perl_pp_waitpid(aTHX); break;
	    case OP_SYSTEM:
		PL_op = Perl_pp_system(aTHX); break;
	    case OP_EXEC:
		PL_op = Perl_pp_exec(aTHX); break;
	    case OP_KILL:
		PL_op = Perl_pp_kill(aTHX); break;
	    case OP_GETPPID:
		PL_op = Perl_pp_getppid(aTHX); break;
	    case OP_GETPGRP:
		PL_op = Perl_pp_getpgrp(aTHX); break;
	    case OP_SETPGRP:
		PL_op = Perl_pp_setpgrp(aTHX); break;
	    case OP_GETPRIORITY:
		PL_op = Perl_pp_getpriority(aTHX); break;
	    case OP_SETPRIORITY:
		PL_op = Perl_pp_setpriority(aTHX); break;
	    case OP_TIME:
		PL_op = Perl_pp_time(aTHX); break;
	    case OP_TMS:
		PL_op = Perl_pp_tms(aTHX); break;
	    case OP_LOCALTIME:
		PL_op = Perl_pp_localtime(aTHX); break;
	    case OP_GMTIME:
		PL_op = Perl_pp_gmtime(aTHX); break;
	    case OP_ALARM:
		PL_op = Perl_pp_alarm(aTHX); break;
	    case OP_SLEEP:
		PL_op = Perl_pp_sleep(aTHX); break;
	    case OP_SHMGET:
		PL_op = Perl_pp_shmget(aTHX); break;
	    case OP_SHMCTL:
		PL_op = Perl_pp_shmctl(aTHX); break;
	    case OP_SHMREAD:
		PL_op = Perl_pp_shmread(aTHX); break;
	    case OP_SHMWRITE:
		PL_op = Perl_pp_shmwrite(aTHX); break;
	    case OP_MSGGET:
		PL_op = Perl_pp_msgget(aTHX); break;
	    case OP_MSGCTL:
		PL_op = Perl_pp_msgctl(aTHX); break;
	    case OP_MSGSND:
		PL_op = Perl_pp_msgsnd(aTHX); break;
	    case OP_MSGRCV:
		PL_op = Perl_pp_msgrcv(aTHX); break;
	    case OP_SEMGET:
		PL_op = Perl_pp_semget(aTHX); break;
	    case OP_SEMCTL:
		PL_op = Perl_pp_semctl(aTHX); break;
	    case OP_SEMOP:
		PL_op = Perl_pp_semop(aTHX); break;
	    case OP_REQUIRE:
	    case OP_DOFILE:
		PL_op = Perl_pp_require(aTHX); break;
	    case OP_ENTEREVAL:
		PL_op = Perl_pp_entereval(aTHX); break;
	    case OP_LEAVEEVAL:
		PL_op = Perl_pp_leaveeval(aTHX); break;
	    case OP_ENTERTRY:
		PL_op = Perl_pp_entertry(aTHX); break;
	    case OP_LEAVETRY:
		PL_op = Perl_pp_leavetry(aTHX); break;
	    case OP_GHBYNAME:
		PL_op = Perl_pp_ghbyname(aTHX); break;
	    case OP_GHBYADDR:
		PL_op = Perl_pp_ghbyaddr(aTHX); break;
	    case OP_GHOSTENT:
		PL_op = Perl_pp_ghostent(aTHX); break;
	    case OP_GNBYNAME:
		PL_op = Perl_pp_gnbyname(aTHX); break;
	    case OP_GNBYADDR:
		PL_op = Perl_pp_gnbyaddr(aTHX); break;
	    case OP_GNETENT:
		PL_op = Perl_pp_gnetent(aTHX); break;
	    case OP_GPBYNAME:
		PL_op = Perl_pp_gpbyname(aTHX); break;
	    case OP_GPBYNUMBER:
		PL_op = Perl_pp_gpbynumber(aTHX); break;
	    case OP_GPROTOENT:
		PL_op = Perl_pp_gprotoent(aTHX); break;
	    case OP_GSBYNAME:
		PL_op = Perl_pp_gsbyname(aTHX); break;
	    case OP_GSBYPORT:
		PL_op = Perl_pp_gsbyport(aTHX); break;
	    case OP_GSERVENT:
		PL_op = Perl_pp_gservent(aTHX); break;
	    case OP_SHOSTENT:
		PL_op = Perl_pp_shostent(aTHX); break;
	    case OP_SNETENT:
		PL_op = Perl_pp_snetent(aTHX); break;
	    case OP_SPROTOENT:
		PL_op = Perl_pp_sprotoent(aTHX); break;
	    case OP_SSERVENT:
		PL_op = Perl_pp_sservent(aTHX); break;
	    case OP_EHOSTENT:
		PL_op = Perl_pp_ehostent(aTHX); break;
	    case OP_ENETENT:
		PL_op = Perl_pp_enetent(aTHX); break;
	    case OP_EPROTOENT:
		PL_op = Perl_pp_eprotoent(aTHX); break;
	    case OP_ESERVENT:
		PL_op = Perl_pp_eservent(aTHX); break;
	    case OP_GPWNAM:
		PL_op = Perl_pp_gpwnam(aTHX); break;
	    case OP_GPWUID:
		PL_op = Perl_pp_gpwuid(aTHX); break;
	    case OP_GPWENT:
		PL_op = Perl_pp_gpwent(aTHX); break;
	    case OP_SPWENT:
		PL_op = Perl_pp_spwent(aTHX); break;
	    case OP_EPWENT:
		PL_op = Perl_pp_epwent(aTHX); break;
	    case OP_GGRNAM:
		PL_op = Perl_pp_ggrnam(aTHX); break;
	    case OP_GGRGID:
		PL_op = Perl_pp_ggrgid(aTHX); break;
	    case OP_GGRENT:
		PL_op = Perl_pp_ggrent(aTHX); break;
	    case OP_SGRENT:
		PL_op = Perl_pp_sgrent(aTHX); break;
	    case OP_EGRENT:
		PL_op = Perl_pp_egrent(aTHX); break;
	    case OP_GETLOGIN:
		PL_op = Perl_pp_getlogin(aTHX); break;
	    case OP_SYSCALL:
		PL_op = Perl_pp_syscall(aTHX); break;
	    case OP_LOCK:
		PL_op = Perl_pp_lock(aTHX); break;
#if PERL_VERSION < 10
	    case OP_THREADSV:
		PL_op = Perl_pp_threadsv(aTHX); break;
#endif
	    case OP_SETSTATE:
		PL_curcop = (COP*)PL_op;
		PL_op = NORMAL;
		break;
	    case OP_METHOD_NAMED:
		PL_op = Perl_pp_method_named(aTHX); break;
#if PERL_VERSION >= 9
	    case OP_DOR:
		PL_op = Perl_pp_dor(aTHX); break;
	    case OP_DORASSIGN:
		PL_op = Perl_pp_dorassign(aTHX); break;
#endif
#if PERL_VERSION >= 10
	    case OP_ENTERGIVEN:
		PL_op = Perl_pp_entergiven(aTHX); break;
	    case OP_LEAVEGIVEN:
		PL_op = Perl_pp_leavegiven(aTHX); break;
	    case OP_ENTERWHEN:
		PL_op = Perl_pp_enterwhen(aTHX); break;
	    case OP_LEAVEWHEN:
		PL_op = Perl_pp_leavewhen(aTHX); break;
	    case OP_BREAK:
		PL_op = Perl_pp_break(aTHX); break;
	    case OP_CONTINUE:
		PL_op = Perl_pp_continue(aTHX); break;
	    case OP_SMARTMATCH:
		PL_op = Perl_pp_smartmatch(aTHX); break;
	    case OP_ONCE:
		PL_op = Perl_pp_once(aTHX); break;
#endif
	    case OP_CUSTOM:
		PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX); break;
	    default:
		Perl_croak(aTHX_ "Invalid opcode '%s'\n", OP_NAME(PL_op));
	}
	PERL_ASYNC_CHECK();
    }
    TAINT_NOT;
    return 0;
}

MODULE = Runops::Switch PACKAGE = Runops::Switch

BOOT:
    PL_runops = runops_switch;