home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / ext / ByteLoader / byterun.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-03-06  |  15.3 KB  |  900 lines

  1. /*
  2.  *      Copyright (c) 1996-1999 Malcolm Beattie
  3.  *
  4.  *      You may distribute under the terms of either the GNU General Public
  5.  *      License or the Artistic License, as specified in the README file.
  6.  *
  7.  */
  8. /*
  9.  * This file is autogenerated from bytecode.pl. Changes made here will be lost.
  10.  */
  11.  
  12. #define PERL_NO_GET_CONTEXT
  13. #include "EXTERN.h"
  14. #include "perl.h"
  15. #define NO_XSLOCKS
  16. #include "XSUB.h"
  17.  
  18. #ifdef PERL_OBJECT
  19. #undef CALL_FPTR
  20. #define CALL_FPTR(fptr) (pPerl->*fptr)
  21. #undef PL_ppaddr
  22. #define PL_ppaddr (*get_ppaddr())
  23. #endif
  24.  
  25. #include "byterun.h"
  26. #include "bytecode.h"
  27.  
  28.  
  29. static int optype_size[] = {
  30.     sizeof(OP),
  31.     sizeof(UNOP),
  32.     sizeof(BINOP),
  33.     sizeof(LOGOP),
  34.     sizeof(LISTOP),
  35.     sizeof(PMOP),
  36.     sizeof(SVOP),
  37.     sizeof(PADOP),
  38.     sizeof(PVOP),
  39.     sizeof(LOOP),
  40.     sizeof(COP)
  41. };
  42.  
  43. static SV *specialsv_list[4];
  44.  
  45. static int bytecode_iv_overflows = 0;
  46. static SV *bytecode_sv;
  47. static XPV bytecode_pv;
  48. static void **bytecode_obj_list;
  49. static I32 bytecode_obj_list_fill = -1;
  50.  
  51. void *
  52. bset_obj_store(pTHXo_ void *obj, I32 ix)
  53. {
  54.     if (ix > bytecode_obj_list_fill) {
  55.     if (bytecode_obj_list_fill == -1)
  56.         New(666, bytecode_obj_list, ix + 1, void*);
  57.     else
  58.         Renew(bytecode_obj_list, ix + 1, void*);
  59.     bytecode_obj_list_fill = ix;
  60.     }
  61.     bytecode_obj_list[ix] = obj;
  62.     return obj;
  63. }
  64.  
  65. void
  66. byterun(pTHXo_ struct bytestream bs)
  67. {
  68.     dTHR;
  69.     int insn;
  70.  
  71.     specialsv_list[0] = Nullsv;
  72.     specialsv_list[1] = &PL_sv_undef;
  73.     specialsv_list[2] = &PL_sv_yes;
  74.     specialsv_list[3] = &PL_sv_no;
  75.  
  76.     while ((insn = BGET_FGETC()) != EOF) {
  77.     switch (insn) {
  78.       case INSN_COMMENT:        /* 35 */
  79.         {
  80.         comment_t arg;
  81.         BGET_comment_t(arg);
  82.         arg = arg;
  83.         break;
  84.         }
  85.       case INSN_NOP:        /* 10 */
  86.         {
  87.         break;
  88.         }
  89.       case INSN_RET:        /* 0 */
  90.         {
  91.         BSET_ret(none);
  92.         break;
  93.         }
  94.       case INSN_LDSV:        /* 1 */
  95.         {
  96.         svindex arg;
  97.         BGET_svindex(arg);
  98.         bytecode_sv = arg;
  99.         break;
  100.         }
  101.       case INSN_LDOP:        /* 2 */
  102.         {
  103.         opindex arg;
  104.         BGET_opindex(arg);
  105.         PL_op = arg;
  106.         break;
  107.         }
  108.       case INSN_STSV:        /* 3 */
  109.         {
  110.         U32 arg;
  111.         BGET_U32(arg);
  112.         BSET_OBJ_STORE(bytecode_sv, arg);
  113.         break;
  114.         }
  115.       case INSN_STOP:        /* 4 */
  116.         {
  117.         U32 arg;
  118.         BGET_U32(arg);
  119.         BSET_OBJ_STORE(PL_op, arg);
  120.         break;
  121.         }
  122.       case INSN_LDSPECSV:        /* 5 */
  123.         {
  124.         U8 arg;
  125.         BGET_U8(arg);
  126.         BSET_ldspecsv(bytecode_sv, arg);
  127.         break;
  128.         }
  129.       case INSN_NEWSV:        /* 6 */
  130.         {
  131.         U8 arg;
  132.         BGET_U8(arg);
  133.         BSET_newsv(bytecode_sv, arg);
  134.         break;
  135.         }
  136.       case INSN_NEWOP:        /* 7 */
  137.         {
  138.         U8 arg;
  139.         BGET_U8(arg);
  140.         BSET_newop(PL_op, arg);
  141.         break;
  142.         }
  143.       case INSN_NEWOPN:        /* 8 */
  144.         {
  145.         U8 arg;
  146.         BGET_U8(arg);
  147.         BSET_newopn(PL_op, arg);
  148.         break;
  149.         }
  150.       case INSN_NEWPV:        /* 9 */
  151.         {
  152.         PV arg;
  153.         BGET_PV(arg);
  154.         break;
  155.         }
  156.       case INSN_PV_CUR:        /* 11 */
  157.         {
  158.         STRLEN arg;
  159.         BGET_U32(arg);
  160.         bytecode_pv.xpv_cur = arg;
  161.         break;
  162.         }
  163.       case INSN_PV_FREE:        /* 12 */
  164.         {
  165.         BSET_pv_free(bytecode_pv);
  166.         break;
  167.         }
  168.       case INSN_SV_UPGRADE:        /* 13 */
  169.         {
  170.         char arg;
  171.         BGET_U8(arg);
  172.         BSET_sv_upgrade(bytecode_sv, arg);
  173.         break;
  174.         }
  175.       case INSN_SV_REFCNT:        /* 14 */
  176.         {
  177.         U32 arg;
  178.         BGET_U32(arg);
  179.         SvREFCNT(bytecode_sv) = arg;
  180.         break;
  181.         }
  182.       case INSN_SV_REFCNT_ADD:        /* 15 */
  183.         {
  184.         I32 arg;
  185.         BGET_I32(arg);
  186.         BSET_sv_refcnt_add(SvREFCNT(bytecode_sv), arg);
  187.         break;
  188.         }
  189.       case INSN_SV_FLAGS:        /* 16 */
  190.         {
  191.         U32 arg;
  192.         BGET_U32(arg);
  193.         SvFLAGS(bytecode_sv) = arg;
  194.         break;
  195.         }
  196.       case INSN_XRV:        /* 17 */
  197.         {
  198.         svindex arg;
  199.         BGET_svindex(arg);
  200.         SvRV(bytecode_sv) = arg;
  201.         break;
  202.         }
  203.       case INSN_XPV:        /* 18 */
  204.         {
  205.         BSET_xpv(bytecode_sv);
  206.         break;
  207.         }
  208.       case INSN_XIV32:        /* 19 */
  209.         {
  210.         I32 arg;
  211.         BGET_I32(arg);
  212.         SvIVX(bytecode_sv) = arg;
  213.         break;
  214.         }
  215.       case INSN_XIV64:        /* 20 */
  216.         {
  217.         IV64 arg;
  218.         BGET_IV64(arg);
  219.         SvIVX(bytecode_sv) = arg;
  220.         break;
  221.         }
  222.       case INSN_XNV:        /* 21 */
  223.         {
  224.         NV arg;
  225.         BGET_NV(arg);
  226.         SvNVX(bytecode_sv) = arg;
  227.         break;
  228.         }
  229.       case INSN_XLV_TARGOFF:        /* 22 */
  230.         {
  231.         STRLEN arg;
  232.         BGET_U32(arg);
  233.         LvTARGOFF(bytecode_sv) = arg;
  234.         break;
  235.         }
  236.       case INSN_XLV_TARGLEN:        /* 23 */
  237.         {
  238.         STRLEN arg;
  239.         BGET_U32(arg);
  240.         LvTARGLEN(bytecode_sv) = arg;
  241.         break;
  242.         }
  243.       case INSN_XLV_TARG:        /* 24 */
  244.         {
  245.         svindex arg;
  246.         BGET_svindex(arg);
  247.         LvTARG(bytecode_sv) = arg;
  248.         break;
  249.         }
  250.       case INSN_XLV_TYPE:        /* 25 */
  251.         {
  252.         char arg;
  253.         BGET_U8(arg);
  254.         LvTYPE(bytecode_sv) = arg;
  255.         break;
  256.         }
  257.       case INSN_XBM_USEFUL:        /* 26 */
  258.         {
  259.         I32 arg;
  260.         BGET_I32(arg);
  261.         BmUSEFUL(bytecode_sv) = arg;
  262.         break;
  263.         }
  264.       case INSN_XBM_PREVIOUS:        /* 27 */
  265.         {
  266.         U16 arg;
  267.         BGET_U16(arg);
  268.         BmPREVIOUS(bytecode_sv) = arg;
  269.         break;
  270.         }
  271.       case INSN_XBM_RARE:        /* 28 */
  272.         {
  273.         U8 arg;
  274.         BGET_U8(arg);
  275.         BmRARE(bytecode_sv) = arg;
  276.         break;
  277.         }
  278.       case INSN_XFM_LINES:        /* 29 */
  279.         {
  280.         I32 arg;
  281.         BGET_I32(arg);
  282.         FmLINES(bytecode_sv) = arg;
  283.         break;
  284.         }
  285.       case INSN_XIO_LINES:        /* 30 */
  286.         {
  287.         long arg;
  288.         BGET_I32(arg);
  289.         IoLINES(bytecode_sv) = arg;
  290.         break;
  291.         }
  292.       case INSN_XIO_PAGE:        /* 31 */
  293.         {
  294.         long arg;
  295.         BGET_I32(arg);
  296.         IoPAGE(bytecode_sv) = arg;
  297.         break;
  298.         }
  299.       case INSN_XIO_PAGE_LEN:        /* 32 */
  300.         {
  301.         long arg;
  302.         BGET_I32(arg);
  303.         IoPAGE_LEN(bytecode_sv) = arg;
  304.         break;
  305.         }
  306.       case INSN_XIO_LINES_LEFT:        /* 33 */
  307.         {
  308.         long arg;
  309.         BGET_I32(arg);
  310.         IoLINES_LEFT(bytecode_sv) = arg;
  311.         break;
  312.         }
  313.       case INSN_XIO_TOP_NAME:        /* 34 */
  314.         {
  315.         pvcontents arg;
  316.         BGET_pvcontents(arg);
  317.         IoTOP_NAME(bytecode_sv) = arg;
  318.         break;
  319.         }
  320.       case INSN_XIO_TOP_GV:        /* 36 */
  321.         {
  322.         svindex arg;
  323.         BGET_svindex(arg);
  324.         *(SV**)&IoTOP_GV(bytecode_sv) = arg;
  325.         break;
  326.         }
  327.       case INSN_XIO_FMT_NAME:        /* 37 */
  328.         {
  329.         pvcontents arg;
  330.         BGET_pvcontents(arg);
  331.         IoFMT_NAME(bytecode_sv) = arg;
  332.         break;
  333.         }
  334.       case INSN_XIO_FMT_GV:        /* 38 */
  335.         {
  336.         svindex arg;
  337.         BGET_svindex(arg);
  338.         *(SV**)&IoFMT_GV(bytecode_sv) = arg;
  339.         break;
  340.         }
  341.       case INSN_XIO_BOTTOM_NAME:        /* 39 */
  342.         {
  343.         pvcontents arg;
  344.         BGET_pvcontents(arg);
  345.         IoBOTTOM_NAME(bytecode_sv) = arg;
  346.         break;
  347.         }
  348.       case INSN_XIO_BOTTOM_GV:        /* 40 */
  349.         {
  350.         svindex arg;
  351.         BGET_svindex(arg);
  352.         *(SV**)&IoBOTTOM_GV(bytecode_sv) = arg;
  353.         break;
  354.         }
  355.       case INSN_XIO_SUBPROCESS:        /* 41 */
  356.         {
  357.         short arg;
  358.         BGET_U16(arg);
  359.         IoSUBPROCESS(bytecode_sv) = arg;
  360.         break;
  361.         }
  362.       case INSN_XIO_TYPE:        /* 42 */
  363.         {
  364.         char arg;
  365.         BGET_U8(arg);
  366.         IoTYPE(bytecode_sv) = arg;
  367.         break;
  368.         }
  369.       case INSN_XIO_FLAGS:        /* 43 */
  370.         {
  371.         char arg;
  372.         BGET_U8(arg);
  373.         IoFLAGS(bytecode_sv) = arg;
  374.         break;
  375.         }
  376.       case INSN_XCV_STASH:        /* 44 */
  377.         {
  378.         svindex arg;
  379.         BGET_svindex(arg);
  380.         *(SV**)&CvSTASH(bytecode_sv) = arg;
  381.         break;
  382.         }
  383.       case INSN_XCV_START:        /* 45 */
  384.         {
  385.         opindex arg;
  386.         BGET_opindex(arg);
  387.         CvSTART(bytecode_sv) = arg;
  388.         break;
  389.         }
  390.       case INSN_XCV_ROOT:        /* 46 */
  391.         {
  392.         opindex arg;
  393.         BGET_opindex(arg);
  394.         CvROOT(bytecode_sv) = arg;
  395.         break;
  396.         }
  397.       case INSN_XCV_GV:        /* 47 */
  398.         {
  399.         svindex arg;
  400.         BGET_svindex(arg);
  401.         *(SV**)&CvGV(bytecode_sv) = arg;
  402.         break;
  403.         }
  404.       case INSN_XCV_FILE:        /* 48 */
  405.         {
  406.         pvcontents arg;
  407.         BGET_pvcontents(arg);
  408.         CvFILE(bytecode_sv) = arg;
  409.         break;
  410.         }
  411.       case INSN_XCV_DEPTH:        /* 49 */
  412.         {
  413.         long arg;
  414.         BGET_I32(arg);
  415.         CvDEPTH(bytecode_sv) = arg;
  416.         break;
  417.         }
  418.       case INSN_XCV_PADLIST:        /* 50 */
  419.         {
  420.         svindex arg;
  421.         BGET_svindex(arg);
  422.         *(SV**)&CvPADLIST(bytecode_sv) = arg;
  423.         break;
  424.         }
  425.       case INSN_XCV_OUTSIDE:        /* 51 */
  426.         {
  427.         svindex arg;
  428.         BGET_svindex(arg);
  429.         *(SV**)&CvOUTSIDE(bytecode_sv) = arg;
  430.         break;
  431.         }
  432.       case INSN_XCV_FLAGS:        /* 52 */
  433.         {
  434.         U16 arg;
  435.         BGET_U16(arg);
  436.         CvFLAGS(bytecode_sv) = arg;
  437.         break;
  438.         }
  439.       case INSN_AV_EXTEND:        /* 53 */
  440.         {
  441.         SSize_t arg;
  442.         BGET_I32(arg);
  443.         BSET_av_extend(bytecode_sv, arg);
  444.         break;
  445.         }
  446.       case INSN_AV_PUSH:        /* 54 */
  447.         {
  448.         svindex arg;
  449.         BGET_svindex(arg);
  450.         BSET_av_push(bytecode_sv, arg);
  451.         break;
  452.         }
  453.       case INSN_XAV_FILL:        /* 55 */
  454.         {
  455.         SSize_t arg;
  456.         BGET_I32(arg);
  457.         AvFILLp(bytecode_sv) = arg;
  458.         break;
  459.         }
  460.       case INSN_XAV_MAX:        /* 56 */
  461.         {
  462.         SSize_t arg;
  463.         BGET_I32(arg);
  464.         AvMAX(bytecode_sv) = arg;
  465.         break;
  466.         }
  467.       case INSN_XAV_FLAGS:        /* 57 */
  468.         {
  469.         U8 arg;
  470.         BGET_U8(arg);
  471.         AvFLAGS(bytecode_sv) = arg;
  472.         break;
  473.         }
  474.       case INSN_XHV_RITER:        /* 58 */
  475.         {
  476.         I32 arg;
  477.         BGET_I32(arg);
  478.         HvRITER(bytecode_sv) = arg;
  479.         break;
  480.         }
  481.       case INSN_XHV_NAME:        /* 59 */
  482.         {
  483.         pvcontents arg;
  484.         BGET_pvcontents(arg);
  485.         HvNAME(bytecode_sv) = arg;
  486.         break;
  487.         }
  488.       case INSN_HV_STORE:        /* 60 */
  489.         {
  490.         svindex arg;
  491.         BGET_svindex(arg);
  492.         BSET_hv_store(bytecode_sv, arg);
  493.         break;
  494.         }
  495.       case INSN_SV_MAGIC:        /* 61 */
  496.         {
  497.         char arg;
  498.         BGET_U8(arg);
  499.         BSET_sv_magic(bytecode_sv, arg);
  500.         break;
  501.         }
  502.       case INSN_MG_OBJ:        /* 62 */
  503.         {
  504.         svindex arg;
  505.         BGET_svindex(arg);
  506.         SvMAGIC(bytecode_sv)->mg_obj = arg;
  507.         break;
  508.         }
  509.       case INSN_MG_PRIVATE:        /* 63 */
  510.         {
  511.         U16 arg;
  512.         BGET_U16(arg);
  513.         SvMAGIC(bytecode_sv)->mg_private = arg;
  514.         break;
  515.         }
  516.       case INSN_MG_FLAGS:        /* 64 */
  517.         {
  518.         U8 arg;
  519.         BGET_U8(arg);
  520.         SvMAGIC(bytecode_sv)->mg_flags = arg;
  521.         break;
  522.         }
  523.       case INSN_MG_PV:        /* 65 */
  524.         {
  525.         pvcontents arg;
  526.         BGET_pvcontents(arg);
  527.         BSET_mg_pv(SvMAGIC(bytecode_sv), arg);
  528.         break;
  529.         }
  530.       case INSN_XMG_STASH:        /* 66 */
  531.         {
  532.         svindex arg;
  533.         BGET_svindex(arg);
  534.         *(SV**)&SvSTASH(bytecode_sv) = arg;
  535.         break;
  536.         }
  537.       case INSN_GV_FETCHPV:        /* 67 */
  538.         {
  539.         strconst arg;
  540.         BGET_strconst(arg);
  541.         BSET_gv_fetchpv(bytecode_sv, arg);
  542.         break;
  543.         }
  544.       case INSN_GV_STASHPV:        /* 68 */
  545.         {
  546.         strconst arg;
  547.         BGET_strconst(arg);
  548.         BSET_gv_stashpv(bytecode_sv, arg);
  549.         break;
  550.         }
  551.       case INSN_GP_SV:        /* 69 */
  552.         {
  553.         svindex arg;
  554.         BGET_svindex(arg);
  555.         GvSV(bytecode_sv) = arg;
  556.         break;
  557.         }
  558.       case INSN_GP_REFCNT:        /* 70 */
  559.         {
  560.         U32 arg;
  561.         BGET_U32(arg);
  562.         GvREFCNT(bytecode_sv) = arg;
  563.         break;
  564.         }
  565.       case INSN_GP_REFCNT_ADD:        /* 71 */
  566.         {
  567.         I32 arg;
  568.         BGET_I32(arg);
  569.         BSET_gp_refcnt_add(GvREFCNT(bytecode_sv), arg);
  570.         break;
  571.         }
  572.       case INSN_GP_AV:        /* 72 */
  573.         {
  574.         svindex arg;
  575.         BGET_svindex(arg);
  576.         *(SV**)&GvAV(bytecode_sv) = arg;
  577.         break;
  578.         }
  579.       case INSN_GP_HV:        /* 73 */
  580.         {
  581.         svindex arg;
  582.         BGET_svindex(arg);
  583.         *(SV**)&GvHV(bytecode_sv) = arg;
  584.         break;
  585.         }
  586.       case INSN_GP_CV:        /* 74 */
  587.         {
  588.         svindex arg;
  589.         BGET_svindex(arg);
  590.         *(SV**)&GvCV(bytecode_sv) = arg;
  591.         break;
  592.         }
  593.       case INSN_GP_FILE:        /* 75 */
  594.         {
  595.         pvcontents arg;
  596.         BGET_pvcontents(arg);
  597.         GvFILE(bytecode_sv) = arg;
  598.         break;
  599.         }
  600.       case INSN_GP_IO:        /* 76 */
  601.         {
  602.         svindex arg;
  603.         BGET_svindex(arg);
  604.         *(SV**)&GvIOp(bytecode_sv) = arg;
  605.         break;
  606.         }
  607.       case INSN_GP_FORM:        /* 77 */
  608.         {
  609.         svindex arg;
  610.         BGET_svindex(arg);
  611.         *(SV**)&GvFORM(bytecode_sv) = arg;
  612.         break;
  613.         }
  614.       case INSN_GP_CVGEN:        /* 78 */
  615.         {
  616.         U32 arg;
  617.         BGET_U32(arg);
  618.         GvCVGEN(bytecode_sv) = arg;
  619.         break;
  620.         }
  621.       case INSN_GP_LINE:        /* 79 */
  622.         {
  623.         line_t arg;
  624.         BGET_U16(arg);
  625.         GvLINE(bytecode_sv) = arg;
  626.         break;
  627.         }
  628.       case INSN_GP_SHARE:        /* 80 */
  629.         {
  630.         svindex arg;
  631.         BGET_svindex(arg);
  632.         BSET_gp_share(bytecode_sv, arg);
  633.         break;
  634.         }
  635.       case INSN_XGV_FLAGS:        /* 81 */
  636.         {
  637.         U8 arg;
  638.         BGET_U8(arg);
  639.         GvFLAGS(bytecode_sv) = arg;
  640.         break;
  641.         }
  642.       case INSN_OP_NEXT:        /* 82 */
  643.         {
  644.         opindex arg;
  645.         BGET_opindex(arg);
  646.         PL_op->op_next = arg;
  647.         break;
  648.         }
  649.       case INSN_OP_SIBLING:        /* 83 */
  650.         {
  651.         opindex arg;
  652.         BGET_opindex(arg);
  653.         PL_op->op_sibling = arg;
  654.         break;
  655.         }
  656.       case INSN_OP_PPADDR:        /* 84 */
  657.         {
  658.         strconst arg;
  659.         BGET_strconst(arg);
  660.         BSET_op_ppaddr(PL_op->op_ppaddr, arg);
  661.         break;
  662.         }
  663.       case INSN_OP_TARG:        /* 85 */
  664.         {
  665.         PADOFFSET arg;
  666.         BGET_U32(arg);
  667.         PL_op->op_targ = arg;
  668.         break;
  669.         }
  670.       case INSN_OP_TYPE:        /* 86 */
  671.         {
  672.         OPCODE arg;
  673.         BGET_U16(arg);
  674.         BSET_op_type(PL_op, arg);
  675.         break;
  676.         }
  677.       case INSN_OP_SEQ:        /* 87 */
  678.         {
  679.         U16 arg;
  680.         BGET_U16(arg);
  681.         PL_op->op_seq = arg;
  682.         break;
  683.         }
  684.       case INSN_OP_FLAGS:        /* 88 */
  685.         {
  686.         U8 arg;
  687.         BGET_U8(arg);
  688.         PL_op->op_flags = arg;
  689.         break;
  690.         }
  691.       case INSN_OP_PRIVATE:        /* 89 */
  692.         {
  693.         U8 arg;
  694.         BGET_U8(arg);
  695.         PL_op->op_private = arg;
  696.         break;
  697.         }
  698.       case INSN_OP_FIRST:        /* 90 */
  699.         {
  700.         opindex arg;
  701.         BGET_opindex(arg);
  702.         cUNOP->op_first = arg;
  703.         break;
  704.         }
  705.       case INSN_OP_LAST:        /* 91 */
  706.         {
  707.         opindex arg;
  708.         BGET_opindex(arg);
  709.         cBINOP->op_last = arg;
  710.         break;
  711.         }
  712.       case INSN_OP_OTHER:        /* 92 */
  713.         {
  714.         opindex arg;
  715.         BGET_opindex(arg);
  716.         cLOGOP->op_other = arg;
  717.         break;
  718.         }
  719.       case INSN_OP_CHILDREN:        /* 93 */
  720.         {
  721.         U32 arg;
  722.         BGET_U32(arg);
  723.         cLISTOP->op_children = arg;
  724.         break;
  725.         }
  726.       case INSN_OP_PMREPLROOT:        /* 94 */
  727.         {
  728.         opindex arg;
  729.         BGET_opindex(arg);
  730.         cPMOP->op_pmreplroot = arg;
  731.         break;
  732.         }
  733.       case INSN_OP_PMREPLROOTGV:        /* 95 */
  734.         {
  735.         svindex arg;
  736.         BGET_svindex(arg);
  737.         *(SV**)&cPMOP->op_pmreplroot = arg;
  738.         break;
  739.         }
  740.       case INSN_OP_PMREPLSTART:        /* 96 */
  741.         {
  742.         opindex arg;
  743.         BGET_opindex(arg);
  744.         cPMOP->op_pmreplstart = arg;
  745.         break;
  746.         }
  747.       case INSN_OP_PMNEXT:        /* 97 */
  748.         {
  749.         opindex arg;
  750.         BGET_opindex(arg);
  751.         *(OP**)&cPMOP->op_pmnext = arg;
  752.         break;
  753.         }
  754.       case INSN_PREGCOMP:        /* 98 */
  755.         {
  756.         pvcontents arg;
  757.         BGET_pvcontents(arg);
  758.         BSET_pregcomp(PL_op, arg);
  759.         break;
  760.         }
  761.       case INSN_OP_PMFLAGS:        /* 99 */
  762.         {
  763.         U16 arg;
  764.         BGET_U16(arg);
  765.         cPMOP->op_pmflags = arg;
  766.         break;
  767.         }
  768.       case INSN_OP_PMPERMFLAGS:        /* 100 */
  769.         {
  770.         U16 arg;
  771.         BGET_U16(arg);
  772.         cPMOP->op_pmpermflags = arg;
  773.         break;
  774.         }
  775.       case INSN_OP_SV:        /* 101 */
  776.         {
  777.         svindex arg;
  778.         BGET_svindex(arg);
  779.         cSVOP->op_sv = arg;
  780.         break;
  781.         }
  782.       case INSN_OP_PADIX:        /* 102 */
  783.         {
  784.         PADOFFSET arg;
  785.         BGET_U32(arg);
  786.         cPADOP->op_padix = arg;
  787.         break;
  788.         }
  789.       case INSN_OP_PV:        /* 103 */
  790.         {
  791.         pvcontents arg;
  792.         BGET_pvcontents(arg);
  793.         cPVOP->op_pv = arg;
  794.         break;
  795.         }
  796.       case INSN_OP_PV_TR:        /* 104 */
  797.         {
  798.         op_tr_array arg;
  799.         BGET_op_tr_array(arg);
  800.         cPVOP->op_pv = arg;
  801.         break;
  802.         }
  803.       case INSN_OP_REDOOP:        /* 105 */
  804.         {
  805.         opindex arg;
  806.         BGET_opindex(arg);
  807.         cLOOP->op_redoop = arg;
  808.         break;
  809.         }
  810.       case INSN_OP_NEXTOP:        /* 106 */
  811.         {
  812.         opindex arg;
  813.         BGET_opindex(arg);
  814.         cLOOP->op_nextop = arg;
  815.         break;
  816.         }
  817.       case INSN_OP_LASTOP:        /* 107 */
  818.         {
  819.         opindex arg;
  820.         BGET_opindex(arg);
  821.         cLOOP->op_lastop = arg;
  822.         break;
  823.         }
  824.       case INSN_COP_LABEL:        /* 108 */
  825.         {
  826.         pvcontents arg;
  827.         BGET_pvcontents(arg);
  828.         cCOP->cop_label = arg;
  829.         break;
  830.         }
  831.       case INSN_COP_STASHPV:        /* 109 */
  832.         {
  833.         pvcontents arg;
  834.         BGET_pvcontents(arg);
  835.         BSET_cop_stashpv(cCOP, arg);
  836.         break;
  837.         }
  838.       case INSN_COP_FILE:        /* 110 */
  839.         {
  840.         pvcontents arg;
  841.         BGET_pvcontents(arg);
  842.         BSET_cop_file(cCOP, arg);
  843.         break;
  844.         }
  845.       case INSN_COP_SEQ:        /* 111 */
  846.         {
  847.         U32 arg;
  848.         BGET_U32(arg);
  849.         cCOP->cop_seq = arg;
  850.         break;
  851.         }
  852.       case INSN_COP_ARYBASE:        /* 112 */
  853.         {
  854.         I32 arg;
  855.         BGET_I32(arg);
  856.         cCOP->cop_arybase = arg;
  857.         break;
  858.         }
  859.       case INSN_COP_LINE:        /* 113 */
  860.         {
  861.         line_t arg;
  862.         BGET_U16(arg);
  863.         BSET_cop_line(cCOP, arg);
  864.         break;
  865.         }
  866.       case INSN_COP_WARNINGS:        /* 114 */
  867.         {
  868.         svindex arg;
  869.         BGET_svindex(arg);
  870.         cCOP->cop_warnings = arg;
  871.         break;
  872.         }
  873.       case INSN_MAIN_START:        /* 115 */
  874.         {
  875.         opindex arg;
  876.         BGET_opindex(arg);
  877.         PL_main_start = arg;
  878.         break;
  879.         }
  880.       case INSN_MAIN_ROOT:        /* 116 */
  881.         {
  882.         opindex arg;
  883.         BGET_opindex(arg);
  884.         PL_main_root = arg;
  885.         break;
  886.         }
  887.       case INSN_CURPAD:        /* 117 */
  888.         {
  889.         svindex arg;
  890.         BGET_svindex(arg);
  891.         BSET_curpad(PL_curpad, arg);
  892.         break;
  893.         }
  894.       default:
  895.         Perl_croak(aTHX_ "Illegal bytecode instruction %d\n", insn);
  896.         /* NOTREACHED */
  897.     }
  898.     }
  899. }
  900.