Ejemplo n.º 1
0
 public OpcodeBase(StreamNavigator sn)
 {
     _pos    = sn.Position;
     _opcode = (JcOpcodes)sn.GetByte();
 }
Ejemplo n.º 2
0
        private IOpcode DecodeInsAndAdvance(StreamNavigator sn)
        {
            // peak-only, full advance is made on an opcode class side!
            JcOpcodes op = (JcOpcodes)sn.PeakByte();

            switch (op)
            {
            case JcOpcodes.aaload:
            case JcOpcodes.aastore:
            case JcOpcodes.aconst_null:
            case JcOpcodes.aload_0:
            case JcOpcodes.aload_1:
            case JcOpcodes.aload_2:
            case JcOpcodes.aload_3:
            case JcOpcodes.areturn:
            case JcOpcodes.arraylength:
            case JcOpcodes.astore_0:
            case JcOpcodes.astore_1:
            case JcOpcodes.astore_2:
            case JcOpcodes.astore_3:
            case JcOpcodes.athrow:
            case JcOpcodes.baload:
            case JcOpcodes.bastore:
            case JcOpcodes.dup:
            case JcOpcodes.dup2:
            case JcOpcodes.i2b:
            case JcOpcodes.i2s:
            case JcOpcodes.iadd:
            case JcOpcodes.iaload:
            case JcOpcodes.iand:
            case JcOpcodes.iastore:
            case JcOpcodes.icmp:
            case JcOpcodes.iconst_m1:
            case JcOpcodes.iconst_0:
            case JcOpcodes.iconst_1:
            case JcOpcodes.iconst_2:
            case JcOpcodes.iconst_3:
            case JcOpcodes.iconst_4:
            case JcOpcodes.iconst_5:
            case JcOpcodes.idiv:
            case JcOpcodes.iload_0:
            case JcOpcodes.iload_1:
            case JcOpcodes.iload_2:
            case JcOpcodes.iload_3:
            case JcOpcodes.imul:
            case JcOpcodes.ineg:
            case JcOpcodes.ior:
            case JcOpcodes.irem:
            case JcOpcodes.ireturn:
            case JcOpcodes.ishl:
            case JcOpcodes.ishr:
            case JcOpcodes.istore_0:
            case JcOpcodes.istore_1:
            case JcOpcodes.istore_2:
            case JcOpcodes.istore_3:
            case JcOpcodes.isub:
            case JcOpcodes.iushr:
            case JcOpcodes.ixor:
            case JcOpcodes.nop:
            case JcOpcodes.pop:
            case JcOpcodes.pop2:
            case JcOpcodes.Return:
            case JcOpcodes.s2b:
            case JcOpcodes.s2i:
            case JcOpcodes.sadd:
            case JcOpcodes.saload:
            case JcOpcodes.sand:
            case JcOpcodes.sastore:
            case JcOpcodes.sconst_m1:
            case JcOpcodes.sconst_0:
            case JcOpcodes.sconst_1:
            case JcOpcodes.sconst_2:
            case JcOpcodes.sconst_3:
            case JcOpcodes.sconst_4:
            case JcOpcodes.sconst_5:
            case JcOpcodes.sdiv:
            case JcOpcodes.sload_0:
            case JcOpcodes.sload_1:
            case JcOpcodes.sload_2:
            case JcOpcodes.sload_3:
            case JcOpcodes.smul:
            case JcOpcodes.sneg:
            case JcOpcodes.sor:
            case JcOpcodes.srem:
            case JcOpcodes.sreturn:
            case JcOpcodes.sshl:
            case JcOpcodes.sshr:
            case JcOpcodes.sstore_0:
            case JcOpcodes.sstore_1:
            case JcOpcodes.sstore_2:
            case JcOpcodes.sstore_3:
            case JcOpcodes.ssub:
            case JcOpcodes.sushr:
            case JcOpcodes.sxor:
                return(new NoOperandsOpcode(sn));

            case JcOpcodes.aload:
            case JcOpcodes.astore:
            case JcOpcodes.bipush:
            case JcOpcodes.bspush:
            case JcOpcodes.dup_x:
            case JcOpcodes.getfield_a:
            case JcOpcodes.getfield_b:
            case JcOpcodes.getfield_s:
            case JcOpcodes.getfield_i:
            case JcOpcodes.getfield_a_this:
            case JcOpcodes.getfield_b_this:
            case JcOpcodes.getfield_s_this:
            case JcOpcodes.getfield_i_this:
            case JcOpcodes._goto:
            case JcOpcodes.if_acmpeq:
            case JcOpcodes.if_acmpne:
            case JcOpcodes.if_scmpeq:
            case JcOpcodes.if_scmpne:
            case JcOpcodes.if_scmplt:
            case JcOpcodes.if_scmpge:
            case JcOpcodes.if_scmpgt:
            case JcOpcodes.if_scmple:
            case JcOpcodes.ifeq:
            case JcOpcodes.ifne:
            case JcOpcodes.iflt:
            case JcOpcodes.ifge:
            case JcOpcodes.ifgt:
            case JcOpcodes.ifle:
            case JcOpcodes.ifnonnull:
            case JcOpcodes.ifnull:
            case JcOpcodes.iload:
            case JcOpcodes.istore:
            case JcOpcodes.newarray:
            case JcOpcodes.putfield_a:
            case JcOpcodes.putfield_b:
            case JcOpcodes.putfield_s:
            case JcOpcodes.putfield_i:
            case JcOpcodes.putfield_a_this:
            case JcOpcodes.putfield_b_this:
            case JcOpcodes.putfield_s_this:
            case JcOpcodes.putfield_i_this:
            case JcOpcodes.ret:
            case JcOpcodes.sload:
            case JcOpcodes.sstore:
            case JcOpcodes.swap_x:
                return(new SingleByteOperandOpcode(sn));

            case JcOpcodes.anewarray:
            case JcOpcodes.getfield_a_w:
            case JcOpcodes.getfield_b_w:
            case JcOpcodes.getfield_s_w:
            case JcOpcodes.getfield_i_w:
            case JcOpcodes.getstatic_a:
            case JcOpcodes.getstatic_b:
            case JcOpcodes.getstatic_s:
            case JcOpcodes.getstatic_i:
            case JcOpcodes.goto_w:
            case JcOpcodes.if_acmpeq_w:
            case JcOpcodes.if_acmpne_w:
            case JcOpcodes.if_scmpeq_w:
            case JcOpcodes.if_scmpne_w:
            case JcOpcodes.if_scmplt_w:
            case JcOpcodes.if_scmpge_w:
            case JcOpcodes.if_scmpgt_w:
            case JcOpcodes.if_scmple_w:
            case JcOpcodes.ifeq_w:
            case JcOpcodes.ifne_w:
            case JcOpcodes.iflt_w:
            case JcOpcodes.ifge_w:
            case JcOpcodes.ifgt_w:
            case JcOpcodes.ifle_w:
            case JcOpcodes.ifnonnull_w:
            case JcOpcodes.ifnull_w:
            case JcOpcodes.invokespecial:
            case JcOpcodes.invokestatic:
            case JcOpcodes.invokevirtual:
            case JcOpcodes.jsr:
            case JcOpcodes._new:
            case JcOpcodes.putfield_a_w:
            case JcOpcodes.putfield_b_w:
            case JcOpcodes.putfield_s_w:
            case JcOpcodes.putfield_i_w:
            case JcOpcodes.putstatic_a:
            case JcOpcodes.putstatic_b:
            case JcOpcodes.putstatic_s:
            case JcOpcodes.putstatic_i:
            case JcOpcodes.sipush:
            case JcOpcodes.sspush:
                return(new SingleShortOperandOpcode(sn));

            case JcOpcodes.checkcast:
            case JcOpcodes.iinc_w:
            case JcOpcodes.instanceof:
            case JcOpcodes.sinc_w:
                return(new ByteShortOperandOpcode(sn));

            case JcOpcodes.iinc:
            case JcOpcodes.sinc:
                return(new TwoBytesOperandOpcode(sn));

            case JcOpcodes.iipush:
                return(new UintOperandOpcode(sn));

            case JcOpcodes.invokeinterface:
                return(new InvokeInterfaceOpcode(sn));

            case JcOpcodes.ilookupswitch:
                return(new IlookupSwitchOpcode(sn));

            case JcOpcodes.itableswitch:
                return(new ItableSwitchOpcode(sn));

            case JcOpcodes.slookupswitch:
                return(new SlookupSwitchOpcode(sn));

            case JcOpcodes.stableswitch:
                return(new StableSwitchOpcode(sn));

            default:
                throw new Exception("Undefined opcode: " + op.ToString("X"));
            }
            ;
        }