| 54 | } |
| 55 | |
| 56 | pub fn instruction_parser(input: &[u8], address: usize) -> IResult<&[u8], Instruction> { |
| 57 | let (input, b0) = be_u8(input)?; |
| 58 | let (input, instruction) = match b0 { |
| 59 | 0x32 => success(Instruction::Aaload)(input)?, |
| 60 | 0x53 => success(Instruction::Aastore)(input)?, |
| 61 | 0x01 => success(Instruction::Aconstnull)(input)?, |
| 62 | 0x19 => map(be_u8, Instruction::Aload)(input)?, |
| 63 | 0x2a => success(Instruction::Aload0)(input)?, |
| 64 | 0x2b => success(Instruction::Aload1)(input)?, |
| 65 | 0x2c => success(Instruction::Aload2)(input)?, |
| 66 | 0x2d => success(Instruction::Aload3)(input)?, |
| 67 | 0xbd => map(be_u16, Instruction::Anewarray)(input)?, |
| 68 | 0xb0 => success(Instruction::Areturn)(input)?, |
| 69 | 0xbe => success(Instruction::Arraylength)(input)?, |
| 70 | 0x3a => map(be_u8, Instruction::Astore)(input)?, |
| 71 | 0x4b => success(Instruction::Astore0)(input)?, |
| 72 | 0x4c => success(Instruction::Astore1)(input)?, |
| 73 | 0x4d => success(Instruction::Astore2)(input)?, |
| 74 | 0x4e => success(Instruction::Astore3)(input)?, |
| 75 | 0xbf => success(Instruction::Athrow)(input)?, |
| 76 | 0x33 => success(Instruction::Baload)(input)?, |
| 77 | 0x54 => success(Instruction::Bastore)(input)?, |
| 78 | 0x10 => map(be_i8, Instruction::Bipush)(input)?, |
| 79 | 0x34 => success(Instruction::Caload)(input)?, |
| 80 | 0x55 => success(Instruction::Castore)(input)?, |
| 81 | 0xc0 => map(be_u16, Instruction::Checkcast)(input)?, |
| 82 | 0x90 => success(Instruction::D2f)(input)?, |
| 83 | 0x8e => success(Instruction::D2i)(input)?, |
| 84 | 0x8f => success(Instruction::D2l)(input)?, |
| 85 | 0x63 => success(Instruction::Dadd)(input)?, |
| 86 | 0x31 => success(Instruction::Daload)(input)?, |
| 87 | 0x52 => success(Instruction::Dastore)(input)?, |
| 88 | 0x98 => success(Instruction::Dcmpg)(input)?, |
| 89 | 0x97 => success(Instruction::Dcmpl)(input)?, |
| 90 | 0x0e => success(Instruction::Dconst0)(input)?, |
| 91 | 0x0f => success(Instruction::Dconst1)(input)?, |
| 92 | 0x6f => success(Instruction::Ddiv)(input)?, |
| 93 | 0x18 => map(be_u8, Instruction::Dload)(input)?, |
| 94 | 0x26 => success(Instruction::Dload0)(input)?, |
| 95 | 0x27 => success(Instruction::Dload1)(input)?, |
| 96 | 0x28 => success(Instruction::Dload2)(input)?, |
| 97 | 0x29 => success(Instruction::Dload3)(input)?, |
| 98 | 0x6b => success(Instruction::Dmul)(input)?, |
| 99 | 0x77 => success(Instruction::Dneg)(input)?, |
| 100 | 0x73 => success(Instruction::Drem)(input)?, |
| 101 | 0xaf => success(Instruction::Dreturn)(input)?, |
| 102 | 0x39 => map(be_u8, Instruction::Dstore)(input)?, |
| 103 | 0x47 => success(Instruction::Dstore0)(input)?, |
| 104 | 0x48 => success(Instruction::Dstore1)(input)?, |
| 105 | 0x49 => success(Instruction::Dstore2)(input)?, |
| 106 | 0x4a => success(Instruction::Dstore3)(input)?, |
| 107 | 0x67 => success(Instruction::Dsub)(input)?, |
| 108 | 0x59 => success(Instruction::Dup)(input)?, |
| 109 | 0x5a => success(Instruction::Dupx1)(input)?, |
| 110 | 0x5b => success(Instruction::Dupx2)(input)?, |
| 111 | 0x5c => success(Instruction::Dup2)(input)?, |
| 112 | 0x5d => success(Instruction::Dup2x1)(input)?, |
| 113 | 0x5e => success(Instruction::Dup2x2)(input)?, |