parent
663631f045
commit
076e4393f2
@ -1,371 +1,370 @@ |
|||||||
/* |
/* |
||||||
* Fernflower - The Analytical Java Decompiler |
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
* http://www.reversed-java.com
|
|
||||||
* |
* |
||||||
* (C) 2008 - 2010, Stiver |
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
* |
* |
||||||
* This software is NEITHER public domain NOR free software |
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* as per GNU License. See license.txt for more details. |
|
||||||
* |
* |
||||||
* This software is distributed WITHOUT ANY WARRANTY; without |
* Unless required by applicable law or agreed to in writing, software |
||||||
* even the implied warranty of MERCHANTABILITY or FITNESS FOR |
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
* A PARTICULAR PURPOSE. |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
*/ |
*/ |
||||||
|
|
||||||
package org.jetbrains.java.decompiler.code; |
package org.jetbrains.java.decompiler.code; |
||||||
|
|
||||||
public interface CodeConstants { |
public interface CodeConstants { |
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// BYTECODE VERSIONS
|
// BYTECODE VERSIONS
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public final static int BYTECODE_JAVA_LE_4 = 1; |
|
||||||
public final static int BYTECODE_JAVA_5 = 2; |
|
||||||
public final static int BYTECODE_JAVA_6 = 3; |
|
||||||
public final static int BYTECODE_JAVA_7 = 4; |
|
||||||
public final static int BYTECODE_JAVA_8 = 5; |
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
// VARIABLE TYPES
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
public final static int TYPE_BYTE = 0; |
public final static int BYTECODE_JAVA_LE_4 = 1; |
||||||
public final static int TYPE_CHAR = 1; |
public final static int BYTECODE_JAVA_5 = 2; |
||||||
public final static int TYPE_DOUBLE = 2; |
public final static int BYTECODE_JAVA_6 = 3; |
||||||
public final static int TYPE_FLOAT = 3; |
public final static int BYTECODE_JAVA_7 = 4; |
||||||
public final static int TYPE_INT = 4; |
public final static int BYTECODE_JAVA_8 = 5; |
||||||
public final static int TYPE_LONG = 5; |
|
||||||
public final static int TYPE_SHORT = 6; |
|
||||||
public final static int TYPE_BOOLEAN = 7; |
|
||||||
public final static int TYPE_OBJECT = 8; |
|
||||||
public final static int TYPE_ADDRESS = 9; |
|
||||||
public final static int TYPE_VOID = 10; |
|
||||||
public final static int TYPE_ANY = 11; |
|
||||||
public final static int TYPE_GROUP2EMPTY = 12; |
|
||||||
public final static int TYPE_NULL = 13; |
|
||||||
public final static int TYPE_NOTINITIALIZED = 14; |
|
||||||
public final static int TYPE_BYTECHAR = 15; |
|
||||||
public final static int TYPE_SHORTCHAR = 16; |
|
||||||
public final static int TYPE_UNKNOWN = 17; |
|
||||||
public final static int TYPE_GENVAR = 18; |
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// VARIABLE TYPE FAMILIES
|
// VARIABLE TYPES
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public final static int TYPE_FAMILY_UNKNOWN = 0; |
public final static int TYPE_BYTE = 0; |
||||||
public final static int TYPE_FAMILY_BOOLEAN = 1; |
public final static int TYPE_CHAR = 1; |
||||||
public final static int TYPE_FAMILY_INTEGER = 2; |
public final static int TYPE_DOUBLE = 2; |
||||||
public final static int TYPE_FAMILY_FLOAT = 3; |
public final static int TYPE_FLOAT = 3; |
||||||
public final static int TYPE_FAMILY_LONG = 4; |
public final static int TYPE_INT = 4; |
||||||
public final static int TYPE_FAMILY_DOUBLE = 5; |
public final static int TYPE_LONG = 5; |
||||||
public final static int TYPE_FAMILY_OBJECT = 6; |
public final static int TYPE_SHORT = 6; |
||||||
|
public final static int TYPE_BOOLEAN = 7; |
||||||
|
public final static int TYPE_OBJECT = 8; |
||||||
|
public final static int TYPE_ADDRESS = 9; |
||||||
|
public final static int TYPE_VOID = 10; |
||||||
|
public final static int TYPE_ANY = 11; |
||||||
|
public final static int TYPE_GROUP2EMPTY = 12; |
||||||
|
public final static int TYPE_NULL = 13; |
||||||
|
public final static int TYPE_NOTINITIALIZED = 14; |
||||||
|
public final static int TYPE_BYTECHAR = 15; |
||||||
|
public final static int TYPE_SHORTCHAR = 16; |
||||||
|
public final static int TYPE_UNKNOWN = 17; |
||||||
|
public final static int TYPE_GENVAR = 18; |
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// MODULE CONSTANTS
|
// VARIABLE TYPE FAMILIES
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public final static int STACKSIZE_SIMPLE = 1; |
public final static int TYPE_FAMILY_UNKNOWN = 0; |
||||||
public final static int STACKSIZE_DOUBLE = 2; |
public final static int TYPE_FAMILY_BOOLEAN = 1; |
||||||
|
public final static int TYPE_FAMILY_INTEGER = 2; |
||||||
|
public final static int TYPE_FAMILY_FLOAT = 3; |
||||||
|
public final static int TYPE_FAMILY_LONG = 4; |
||||||
|
public final static int TYPE_FAMILY_DOUBLE = 5; |
||||||
|
public final static int TYPE_FAMILY_OBJECT = 6; |
||||||
|
|
||||||
public final static int VAR_LOCAL = 0; |
// ----------------------------------------------------------------------
|
||||||
public final static int VAR_STACK = 1; |
// MODULE CONSTANTS
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public final static int VAR_WRITE = 0; |
public final static int STACKSIZE_SIMPLE = 1; |
||||||
public final static int VAR_READ = 1; |
public final static int STACKSIZE_DOUBLE = 2; |
||||||
|
|
||||||
|
public final static int VAR_LOCAL = 0; |
||||||
|
public final static int VAR_STACK = 1; |
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
public final static int VAR_WRITE = 0; |
||||||
// ACCESS FLAGS
|
public final static int VAR_READ = 1; |
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
public final static int ACC_PUBLIC = 0x0001; |
|
||||||
public final static int ACC_PRIVATE = 0x0002; |
|
||||||
public final static int ACC_PROTECTED = 0x0004; |
|
||||||
public final static int ACC_STATIC = 0x0008; |
|
||||||
public final static int ACC_FINAL = 0x0010; |
|
||||||
public final static int ACC_SYNCHRONIZED = 0x0020; |
|
||||||
public final static int ACC_NATIVE = 0x0100; |
|
||||||
public final static int ACC_ABSTRACT = 0x0400; |
|
||||||
public final static int ACC_STRICT = 0x0800; |
|
||||||
public final static int ACC_VOLATILE = 0x0040; |
|
||||||
public final static int ACC_BRIDGE = 0x0040; |
|
||||||
public final static int ACC_TRANSIENT = 0x0080; |
|
||||||
public final static int ACC_VARARGS = 0x0080; |
|
||||||
public final static int ACC_SYNTHETIC = 0x1000; |
|
||||||
public final static int ACC_ANNOTATION = 0x2000; |
|
||||||
public final static int ACC_ENUM = 0x4000; |
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// CLASS FLAGS
|
// ACCESS FLAGS
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public final static int ACC_SUPER = 0x0020; |
public final static int ACC_PUBLIC = 0x0001; |
||||||
public final static int ACC_INTERFACE = 0x0200; |
public final static int ACC_PRIVATE = 0x0002; |
||||||
|
public final static int ACC_PROTECTED = 0x0004; |
||||||
|
public final static int ACC_STATIC = 0x0008; |
||||||
|
public final static int ACC_FINAL = 0x0010; |
||||||
|
public final static int ACC_SYNCHRONIZED = 0x0020; |
||||||
|
public final static int ACC_NATIVE = 0x0100; |
||||||
|
public final static int ACC_ABSTRACT = 0x0400; |
||||||
|
public final static int ACC_STRICT = 0x0800; |
||||||
|
public final static int ACC_VOLATILE = 0x0040; |
||||||
|
public final static int ACC_BRIDGE = 0x0040; |
||||||
|
public final static int ACC_TRANSIENT = 0x0080; |
||||||
|
public final static int ACC_VARARGS = 0x0080; |
||||||
|
public final static int ACC_SYNTHETIC = 0x1000; |
||||||
|
public final static int ACC_ANNOTATION = 0x2000; |
||||||
|
public final static int ACC_ENUM = 0x4000; |
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// CLASS FLAGS
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
public final static int ACC_SUPER = 0x0020; |
||||||
// DEPENDENCY CONSTANTS
|
public final static int ACC_INTERFACE = 0x0200; |
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
public final static int DEP_CONSTANT = 0; |
|
||||||
public final static int DEP_UNKNOWN = 1; |
|
||||||
public final static int DEP_GENERAL = 2; |
|
||||||
public final static int DEP_PARAMS = 4; |
|
||||||
public final static int DEP_STATIC = 8; |
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// INSTRUCTION GROUPS
|
// DEPENDENCY CONSTANTS
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public final static int GROUP_GENERAL = 1; |
public final static int DEP_CONSTANT = 0; |
||||||
public final static int GROUP_JUMP = 2; |
public final static int DEP_UNKNOWN = 1; |
||||||
public final static int GROUP_SWITCH = 3; |
public final static int DEP_GENERAL = 2; |
||||||
public final static int GROUP_INVOCATION = 4; |
public final static int DEP_PARAMS = 4; |
||||||
public final static int GROUP_FIELDACCESS = 5; |
public final static int DEP_STATIC = 8; |
||||||
public final static int GROUP_RETURN = 6; |
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// POOL CONSTANTS
|
// INSTRUCTION GROUPS
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public final static int CONSTANT_Utf8 = 1; |
public final static int GROUP_GENERAL = 1; |
||||||
public final static int CONSTANT_Integer = 3; |
public final static int GROUP_JUMP = 2; |
||||||
public final static int CONSTANT_Float = 4; |
public final static int GROUP_SWITCH = 3; |
||||||
public final static int CONSTANT_Long = 5; |
public final static int GROUP_INVOCATION = 4; |
||||||
public final static int CONSTANT_Double = 6; |
public final static int GROUP_FIELDACCESS = 5; |
||||||
public final static int CONSTANT_Class = 7; |
public final static int GROUP_RETURN = 6; |
||||||
public final static int CONSTANT_String = 8; |
|
||||||
public final static int CONSTANT_Fieldref = 9; |
|
||||||
public final static int CONSTANT_Methodref = 10; |
|
||||||
public final static int CONSTANT_InterfaceMethodref = 11; |
|
||||||
public final static int CONSTANT_NameAndType = 12; |
|
||||||
public final static int CONSTANT_MethodHandle = 15; |
|
||||||
public final static int CONSTANT_MethodType = 16; |
|
||||||
public final static int CONSTANT_InvokeDynamic = 18; |
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// MethodHandle reference_kind values
|
// POOL CONSTANTS
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public final static int CONSTANT_MethodHandle_REF_getField = 1; |
public final static int CONSTANT_Utf8 = 1; |
||||||
public final static int CONSTANT_MethodHandle_REF_getStatic = 2; |
public final static int CONSTANT_Integer = 3; |
||||||
public final static int CONSTANT_MethodHandle_REF_putField = 3; |
public final static int CONSTANT_Float = 4; |
||||||
public final static int CONSTANT_MethodHandle_REF_putStatic = 4; |
public final static int CONSTANT_Long = 5; |
||||||
public final static int CONSTANT_MethodHandle_REF_invokeVirtual = 5; |
public final static int CONSTANT_Double = 6; |
||||||
public final static int CONSTANT_MethodHandle_REF_invokeStatic = 6; |
public final static int CONSTANT_Class = 7; |
||||||
public final static int CONSTANT_MethodHandle_REF_invokeSpecial = 7; |
public final static int CONSTANT_String = 8; |
||||||
public final static int CONSTANT_MethodHandle_REF_newInvokeSpecial = 8; |
public final static int CONSTANT_Fieldref = 9; |
||||||
public final static int CONSTANT_MethodHandle_REF_invokeInterface = 9; |
public final static int CONSTANT_Methodref = 10; |
||||||
|
public final static int CONSTANT_InterfaceMethodref = 11; |
||||||
|
public final static int CONSTANT_NameAndType = 12; |
||||||
|
public final static int CONSTANT_MethodHandle = 15; |
||||||
|
public final static int CONSTANT_MethodType = 16; |
||||||
|
public final static int CONSTANT_InvokeDynamic = 18; |
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// VM OPCODES
|
// MethodHandle reference_kind values
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public final static int opc_nop = 0; |
public final static int CONSTANT_MethodHandle_REF_getField = 1; |
||||||
public final static int opc_aconst_null = 1; |
public final static int CONSTANT_MethodHandle_REF_getStatic = 2; |
||||||
public final static int opc_iconst_m1 = 2; |
public final static int CONSTANT_MethodHandle_REF_putField = 3; |
||||||
public final static int opc_iconst_0 = 3; |
public final static int CONSTANT_MethodHandle_REF_putStatic = 4; |
||||||
public final static int opc_iconst_1 = 4; |
public final static int CONSTANT_MethodHandle_REF_invokeVirtual = 5; |
||||||
public final static int opc_iconst_2 = 5; |
public final static int CONSTANT_MethodHandle_REF_invokeStatic = 6; |
||||||
public final static int opc_iconst_3 = 6; |
public final static int CONSTANT_MethodHandle_REF_invokeSpecial = 7; |
||||||
public final static int opc_iconst_4 = 7; |
public final static int CONSTANT_MethodHandle_REF_newInvokeSpecial = 8; |
||||||
public final static int opc_iconst_5 = 8; |
public final static int CONSTANT_MethodHandle_REF_invokeInterface = 9; |
||||||
public final static int opc_lconst_0 = 9; |
|
||||||
public final static int opc_lconst_1 = 10; |
|
||||||
public final static int opc_fconst_0 = 11; |
|
||||||
public final static int opc_fconst_1 = 12; |
|
||||||
public final static int opc_fconst_2 = 13; |
|
||||||
public final static int opc_dconst_0 = 14; |
|
||||||
public final static int opc_dconst_1 = 15; |
|
||||||
public final static int opc_bipush = 16; |
|
||||||
public final static int opc_sipush = 17; |
|
||||||
public final static int opc_ldc = 18; |
|
||||||
public final static int opc_ldc_w = 19; |
|
||||||
public final static int opc_ldc2_w = 20; |
|
||||||
public final static int opc_iload = 21; |
|
||||||
public final static int opc_lload = 22; |
|
||||||
public final static int opc_fload = 23; |
|
||||||
public final static int opc_dload = 24; |
|
||||||
public final static int opc_aload = 25; |
|
||||||
public final static int opc_iload_0 = 26; |
|
||||||
public final static int opc_iload_1 = 27; |
|
||||||
public final static int opc_iload_2 = 28; |
|
||||||
public final static int opc_iload_3 = 29; |
|
||||||
public final static int opc_lload_0 = 30; |
|
||||||
public final static int opc_lload_1 = 31; |
|
||||||
public final static int opc_lload_2 = 32; |
|
||||||
public final static int opc_lload_3 = 33; |
|
||||||
public final static int opc_fload_0 = 34; |
|
||||||
public final static int opc_fload_1 = 35; |
|
||||||
public final static int opc_fload_2 = 36; |
|
||||||
public final static int opc_fload_3 = 37; |
|
||||||
public final static int opc_dload_0 = 38; |
|
||||||
public final static int opc_dload_1 = 39; |
|
||||||
public final static int opc_dload_2 = 40; |
|
||||||
public final static int opc_dload_3 = 41; |
|
||||||
public final static int opc_aload_0 = 42; |
|
||||||
public final static int opc_aload_1 = 43; |
|
||||||
public final static int opc_aload_2 = 44; |
|
||||||
public final static int opc_aload_3 = 45; |
|
||||||
public final static int opc_iaload = 46; |
|
||||||
public final static int opc_laload = 47; |
|
||||||
public final static int opc_faload = 48; |
|
||||||
public final static int opc_daload = 49; |
|
||||||
public final static int opc_aaload = 50; |
|
||||||
public final static int opc_baload = 51; |
|
||||||
public final static int opc_caload = 52; |
|
||||||
public final static int opc_saload = 53; |
|
||||||
public final static int opc_istore = 54; |
|
||||||
public final static int opc_lstore = 55; |
|
||||||
public final static int opc_fstore = 56; |
|
||||||
public final static int opc_dstore = 57; |
|
||||||
public final static int opc_astore = 58; |
|
||||||
public final static int opc_istore_0 = 59; |
|
||||||
public final static int opc_istore_1 = 60; |
|
||||||
public final static int opc_istore_2 = 61; |
|
||||||
public final static int opc_istore_3 = 62; |
|
||||||
public final static int opc_lstore_0 = 63; |
|
||||||
public final static int opc_lstore_1 = 64; |
|
||||||
public final static int opc_lstore_2 = 65; |
|
||||||
public final static int opc_lstore_3 = 66; |
|
||||||
public final static int opc_fstore_0 = 67; |
|
||||||
public final static int opc_fstore_1 = 68; |
|
||||||
public final static int opc_fstore_2 = 69; |
|
||||||
public final static int opc_fstore_3 = 70; |
|
||||||
public final static int opc_dstore_0 = 71; |
|
||||||
public final static int opc_dstore_1 = 72; |
|
||||||
public final static int opc_dstore_2 = 73; |
|
||||||
public final static int opc_dstore_3 = 74; |
|
||||||
public final static int opc_astore_0 = 75; |
|
||||||
public final static int opc_astore_1 = 76; |
|
||||||
public final static int opc_astore_2 = 77; |
|
||||||
public final static int opc_astore_3 = 78; |
|
||||||
public final static int opc_iastore = 79; |
|
||||||
public final static int opc_lastore = 80; |
|
||||||
public final static int opc_fastore = 81; |
|
||||||
public final static int opc_dastore = 82; |
|
||||||
public final static int opc_aastore = 83; |
|
||||||
public final static int opc_bastore = 84; |
|
||||||
public final static int opc_castore = 85; |
|
||||||
public final static int opc_sastore = 86; |
|
||||||
public final static int opc_pop = 87; |
|
||||||
public final static int opc_pop2 = 88; |
|
||||||
public final static int opc_dup = 89; |
|
||||||
public final static int opc_dup_x1 = 90; |
|
||||||
public final static int opc_dup_x2 = 91; |
|
||||||
public final static int opc_dup2 = 92; |
|
||||||
public final static int opc_dup2_x1 = 93; |
|
||||||
public final static int opc_dup2_x2 = 94; |
|
||||||
public final static int opc_swap = 95; |
|
||||||
public final static int opc_iadd = 96; |
|
||||||
public final static int opc_ladd = 97; |
|
||||||
public final static int opc_fadd = 98; |
|
||||||
public final static int opc_dadd = 99; |
|
||||||
public final static int opc_isub = 100; |
|
||||||
public final static int opc_lsub = 101; |
|
||||||
public final static int opc_fsub = 102; |
|
||||||
public final static int opc_dsub = 103; |
|
||||||
public final static int opc_imul = 104; |
|
||||||
public final static int opc_lmul = 105; |
|
||||||
public final static int opc_fmul = 106; |
|
||||||
public final static int opc_dmul = 107; |
|
||||||
public final static int opc_idiv = 108; |
|
||||||
public final static int opc_ldiv = 109; |
|
||||||
public final static int opc_fdiv = 110; |
|
||||||
public final static int opc_ddiv = 111; |
|
||||||
public final static int opc_irem = 112; |
|
||||||
public final static int opc_lrem = 113; |
|
||||||
public final static int opc_frem = 114; |
|
||||||
public final static int opc_drem = 115; |
|
||||||
public final static int opc_ineg = 116; |
|
||||||
public final static int opc_lneg = 117; |
|
||||||
public final static int opc_fneg = 118; |
|
||||||
public final static int opc_dneg = 119; |
|
||||||
public final static int opc_ishl = 120; |
|
||||||
public final static int opc_lshl = 121; |
|
||||||
public final static int opc_ishr = 122; |
|
||||||
public final static int opc_lshr = 123; |
|
||||||
public final static int opc_iushr = 124; |
|
||||||
public final static int opc_lushr = 125; |
|
||||||
public final static int opc_iand = 126; |
|
||||||
public final static int opc_land = 127; |
|
||||||
public final static int opc_ior = 128; |
|
||||||
public final static int opc_lor = 129; |
|
||||||
public final static int opc_ixor = 130; |
|
||||||
public final static int opc_lxor = 131; |
|
||||||
public final static int opc_iinc = 132; |
|
||||||
public final static int opc_i2l = 133; |
|
||||||
public final static int opc_i2f = 134; |
|
||||||
public final static int opc_i2d = 135; |
|
||||||
public final static int opc_l2i = 136; |
|
||||||
public final static int opc_l2f = 137; |
|
||||||
public final static int opc_l2d = 138; |
|
||||||
public final static int opc_f2i = 139; |
|
||||||
public final static int opc_f2l = 140; |
|
||||||
public final static int opc_f2d = 141; |
|
||||||
public final static int opc_d2i = 142; |
|
||||||
public final static int opc_d2l = 143; |
|
||||||
public final static int opc_d2f = 144; |
|
||||||
public final static int opc_i2b = 145; |
|
||||||
public final static int opc_i2c = 146; |
|
||||||
public final static int opc_i2s = 147; |
|
||||||
public final static int opc_lcmp = 148; |
|
||||||
public final static int opc_fcmpl = 149; |
|
||||||
public final static int opc_fcmpg = 150; |
|
||||||
public final static int opc_dcmpl = 151; |
|
||||||
public final static int opc_dcmpg = 152; |
|
||||||
public final static int opc_ifeq = 153; |
|
||||||
public final static int opc_ifne = 154; |
|
||||||
public final static int opc_iflt = 155; |
|
||||||
public final static int opc_ifge = 156; |
|
||||||
public final static int opc_ifgt = 157; |
|
||||||
public final static int opc_ifle = 158; |
|
||||||
public final static int opc_if_icmpeq = 159; |
|
||||||
public final static int opc_if_icmpne = 160; |
|
||||||
public final static int opc_if_icmplt = 161; |
|
||||||
public final static int opc_if_icmpge = 162; |
|
||||||
public final static int opc_if_icmpgt = 163; |
|
||||||
public final static int opc_if_icmple = 164; |
|
||||||
public final static int opc_if_acmpeq = 165; |
|
||||||
public final static int opc_if_acmpne = 166; |
|
||||||
public final static int opc_goto = 167; |
|
||||||
public final static int opc_jsr = 168; |
|
||||||
public final static int opc_ret = 169; |
|
||||||
public final static int opc_tableswitch = 170; |
|
||||||
public final static int opc_lookupswitch = 171; |
|
||||||
public final static int opc_ireturn = 172; |
|
||||||
public final static int opc_lreturn = 173; |
|
||||||
public final static int opc_freturn = 174; |
|
||||||
public final static int opc_dreturn = 175; |
|
||||||
public final static int opc_areturn = 176; |
|
||||||
public final static int opc_return = 177; |
|
||||||
public final static int opc_getstatic = 178; |
|
||||||
public final static int opc_putstatic = 179; |
|
||||||
public final static int opc_getfield = 180; |
|
||||||
public final static int opc_putfield = 181; |
|
||||||
public final static int opc_invokevirtual = 182; |
|
||||||
public final static int opc_invokespecial = 183; |
|
||||||
public final static int opc_invokestatic = 184; |
|
||||||
public final static int opc_invokeinterface = 185; |
|
||||||
public final static int opc_invokedynamic = 186; |
|
||||||
public final static int opc_xxxunusedxxx = 186; |
|
||||||
public final static int opc_new = 187; |
|
||||||
public final static int opc_newarray = 188; |
|
||||||
public final static int opc_anewarray = 189; |
|
||||||
public final static int opc_arraylength = 190; |
|
||||||
public final static int opc_athrow = 191; |
|
||||||
public final static int opc_checkcast = 192; |
|
||||||
public final static int opc_instanceof = 193; |
|
||||||
public final static int opc_monitorenter = 194; |
|
||||||
public final static int opc_monitorexit = 195; |
|
||||||
public final static int opc_wide = 196; |
|
||||||
public final static int opc_multianewarray = 197; |
|
||||||
public final static int opc_ifnull = 198; |
|
||||||
public final static int opc_ifnonnull = 199; |
|
||||||
public final static int opc_goto_w = 200; |
|
||||||
public final static int opc_jsr_w = 201; |
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// VM OPCODES
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
public final static int opc_nop = 0; |
||||||
|
public final static int opc_aconst_null = 1; |
||||||
|
public final static int opc_iconst_m1 = 2; |
||||||
|
public final static int opc_iconst_0 = 3; |
||||||
|
public final static int opc_iconst_1 = 4; |
||||||
|
public final static int opc_iconst_2 = 5; |
||||||
|
public final static int opc_iconst_3 = 6; |
||||||
|
public final static int opc_iconst_4 = 7; |
||||||
|
public final static int opc_iconst_5 = 8; |
||||||
|
public final static int opc_lconst_0 = 9; |
||||||
|
public final static int opc_lconst_1 = 10; |
||||||
|
public final static int opc_fconst_0 = 11; |
||||||
|
public final static int opc_fconst_1 = 12; |
||||||
|
public final static int opc_fconst_2 = 13; |
||||||
|
public final static int opc_dconst_0 = 14; |
||||||
|
public final static int opc_dconst_1 = 15; |
||||||
|
public final static int opc_bipush = 16; |
||||||
|
public final static int opc_sipush = 17; |
||||||
|
public final static int opc_ldc = 18; |
||||||
|
public final static int opc_ldc_w = 19; |
||||||
|
public final static int opc_ldc2_w = 20; |
||||||
|
public final static int opc_iload = 21; |
||||||
|
public final static int opc_lload = 22; |
||||||
|
public final static int opc_fload = 23; |
||||||
|
public final static int opc_dload = 24; |
||||||
|
public final static int opc_aload = 25; |
||||||
|
public final static int opc_iload_0 = 26; |
||||||
|
public final static int opc_iload_1 = 27; |
||||||
|
public final static int opc_iload_2 = 28; |
||||||
|
public final static int opc_iload_3 = 29; |
||||||
|
public final static int opc_lload_0 = 30; |
||||||
|
public final static int opc_lload_1 = 31; |
||||||
|
public final static int opc_lload_2 = 32; |
||||||
|
public final static int opc_lload_3 = 33; |
||||||
|
public final static int opc_fload_0 = 34; |
||||||
|
public final static int opc_fload_1 = 35; |
||||||
|
public final static int opc_fload_2 = 36; |
||||||
|
public final static int opc_fload_3 = 37; |
||||||
|
public final static int opc_dload_0 = 38; |
||||||
|
public final static int opc_dload_1 = 39; |
||||||
|
public final static int opc_dload_2 = 40; |
||||||
|
public final static int opc_dload_3 = 41; |
||||||
|
public final static int opc_aload_0 = 42; |
||||||
|
public final static int opc_aload_1 = 43; |
||||||
|
public final static int opc_aload_2 = 44; |
||||||
|
public final static int opc_aload_3 = 45; |
||||||
|
public final static int opc_iaload = 46; |
||||||
|
public final static int opc_laload = 47; |
||||||
|
public final static int opc_faload = 48; |
||||||
|
public final static int opc_daload = 49; |
||||||
|
public final static int opc_aaload = 50; |
||||||
|
public final static int opc_baload = 51; |
||||||
|
public final static int opc_caload = 52; |
||||||
|
public final static int opc_saload = 53; |
||||||
|
public final static int opc_istore = 54; |
||||||
|
public final static int opc_lstore = 55; |
||||||
|
public final static int opc_fstore = 56; |
||||||
|
public final static int opc_dstore = 57; |
||||||
|
public final static int opc_astore = 58; |
||||||
|
public final static int opc_istore_0 = 59; |
||||||
|
public final static int opc_istore_1 = 60; |
||||||
|
public final static int opc_istore_2 = 61; |
||||||
|
public final static int opc_istore_3 = 62; |
||||||
|
public final static int opc_lstore_0 = 63; |
||||||
|
public final static int opc_lstore_1 = 64; |
||||||
|
public final static int opc_lstore_2 = 65; |
||||||
|
public final static int opc_lstore_3 = 66; |
||||||
|
public final static int opc_fstore_0 = 67; |
||||||
|
public final static int opc_fstore_1 = 68; |
||||||
|
public final static int opc_fstore_2 = 69; |
||||||
|
public final static int opc_fstore_3 = 70; |
||||||
|
public final static int opc_dstore_0 = 71; |
||||||
|
public final static int opc_dstore_1 = 72; |
||||||
|
public final static int opc_dstore_2 = 73; |
||||||
|
public final static int opc_dstore_3 = 74; |
||||||
|
public final static int opc_astore_0 = 75; |
||||||
|
public final static int opc_astore_1 = 76; |
||||||
|
public final static int opc_astore_2 = 77; |
||||||
|
public final static int opc_astore_3 = 78; |
||||||
|
public final static int opc_iastore = 79; |
||||||
|
public final static int opc_lastore = 80; |
||||||
|
public final static int opc_fastore = 81; |
||||||
|
public final static int opc_dastore = 82; |
||||||
|
public final static int opc_aastore = 83; |
||||||
|
public final static int opc_bastore = 84; |
||||||
|
public final static int opc_castore = 85; |
||||||
|
public final static int opc_sastore = 86; |
||||||
|
public final static int opc_pop = 87; |
||||||
|
public final static int opc_pop2 = 88; |
||||||
|
public final static int opc_dup = 89; |
||||||
|
public final static int opc_dup_x1 = 90; |
||||||
|
public final static int opc_dup_x2 = 91; |
||||||
|
public final static int opc_dup2 = 92; |
||||||
|
public final static int opc_dup2_x1 = 93; |
||||||
|
public final static int opc_dup2_x2 = 94; |
||||||
|
public final static int opc_swap = 95; |
||||||
|
public final static int opc_iadd = 96; |
||||||
|
public final static int opc_ladd = 97; |
||||||
|
public final static int opc_fadd = 98; |
||||||
|
public final static int opc_dadd = 99; |
||||||
|
public final static int opc_isub = 100; |
||||||
|
public final static int opc_lsub = 101; |
||||||
|
public final static int opc_fsub = 102; |
||||||
|
public final static int opc_dsub = 103; |
||||||
|
public final static int opc_imul = 104; |
||||||
|
public final static int opc_lmul = 105; |
||||||
|
public final static int opc_fmul = 106; |
||||||
|
public final static int opc_dmul = 107; |
||||||
|
public final static int opc_idiv = 108; |
||||||
|
public final static int opc_ldiv = 109; |
||||||
|
public final static int opc_fdiv = 110; |
||||||
|
public final static int opc_ddiv = 111; |
||||||
|
public final static int opc_irem = 112; |
||||||
|
public final static int opc_lrem = 113; |
||||||
|
public final static int opc_frem = 114; |
||||||
|
public final static int opc_drem = 115; |
||||||
|
public final static int opc_ineg = 116; |
||||||
|
public final static int opc_lneg = 117; |
||||||
|
public final static int opc_fneg = 118; |
||||||
|
public final static int opc_dneg = 119; |
||||||
|
public final static int opc_ishl = 120; |
||||||
|
public final static int opc_lshl = 121; |
||||||
|
public final static int opc_ishr = 122; |
||||||
|
public final static int opc_lshr = 123; |
||||||
|
public final static int opc_iushr = 124; |
||||||
|
public final static int opc_lushr = 125; |
||||||
|
public final static int opc_iand = 126; |
||||||
|
public final static int opc_land = 127; |
||||||
|
public final static int opc_ior = 128; |
||||||
|
public final static int opc_lor = 129; |
||||||
|
public final static int opc_ixor = 130; |
||||||
|
public final static int opc_lxor = 131; |
||||||
|
public final static int opc_iinc = 132; |
||||||
|
public final static int opc_i2l = 133; |
||||||
|
public final static int opc_i2f = 134; |
||||||
|
public final static int opc_i2d = 135; |
||||||
|
public final static int opc_l2i = 136; |
||||||
|
public final static int opc_l2f = 137; |
||||||
|
public final static int opc_l2d = 138; |
||||||
|
public final static int opc_f2i = 139; |
||||||
|
public final static int opc_f2l = 140; |
||||||
|
public final static int opc_f2d = 141; |
||||||
|
public final static int opc_d2i = 142; |
||||||
|
public final static int opc_d2l = 143; |
||||||
|
public final static int opc_d2f = 144; |
||||||
|
public final static int opc_i2b = 145; |
||||||
|
public final static int opc_i2c = 146; |
||||||
|
public final static int opc_i2s = 147; |
||||||
|
public final static int opc_lcmp = 148; |
||||||
|
public final static int opc_fcmpl = 149; |
||||||
|
public final static int opc_fcmpg = 150; |
||||||
|
public final static int opc_dcmpl = 151; |
||||||
|
public final static int opc_dcmpg = 152; |
||||||
|
public final static int opc_ifeq = 153; |
||||||
|
public final static int opc_ifne = 154; |
||||||
|
public final static int opc_iflt = 155; |
||||||
|
public final static int opc_ifge = 156; |
||||||
|
public final static int opc_ifgt = 157; |
||||||
|
public final static int opc_ifle = 158; |
||||||
|
public final static int opc_if_icmpeq = 159; |
||||||
|
public final static int opc_if_icmpne = 160; |
||||||
|
public final static int opc_if_icmplt = 161; |
||||||
|
public final static int opc_if_icmpge = 162; |
||||||
|
public final static int opc_if_icmpgt = 163; |
||||||
|
public final static int opc_if_icmple = 164; |
||||||
|
public final static int opc_if_acmpeq = 165; |
||||||
|
public final static int opc_if_acmpne = 166; |
||||||
|
public final static int opc_goto = 167; |
||||||
|
public final static int opc_jsr = 168; |
||||||
|
public final static int opc_ret = 169; |
||||||
|
public final static int opc_tableswitch = 170; |
||||||
|
public final static int opc_lookupswitch = 171; |
||||||
|
public final static int opc_ireturn = 172; |
||||||
|
public final static int opc_lreturn = 173; |
||||||
|
public final static int opc_freturn = 174; |
||||||
|
public final static int opc_dreturn = 175; |
||||||
|
public final static int opc_areturn = 176; |
||||||
|
public final static int opc_return = 177; |
||||||
|
public final static int opc_getstatic = 178; |
||||||
|
public final static int opc_putstatic = 179; |
||||||
|
public final static int opc_getfield = 180; |
||||||
|
public final static int opc_putfield = 181; |
||||||
|
public final static int opc_invokevirtual = 182; |
||||||
|
public final static int opc_invokespecial = 183; |
||||||
|
public final static int opc_invokestatic = 184; |
||||||
|
public final static int opc_invokeinterface = 185; |
||||||
|
public final static int opc_invokedynamic = 186; |
||||||
|
public final static int opc_xxxunusedxxx = 186; |
||||||
|
public final static int opc_new = 187; |
||||||
|
public final static int opc_newarray = 188; |
||||||
|
public final static int opc_anewarray = 189; |
||||||
|
public final static int opc_arraylength = 190; |
||||||
|
public final static int opc_athrow = 191; |
||||||
|
public final static int opc_checkcast = 192; |
||||||
|
public final static int opc_instanceof = 193; |
||||||
|
public final static int opc_monitorenter = 194; |
||||||
|
public final static int opc_monitorexit = 195; |
||||||
|
public final static int opc_wide = 196; |
||||||
|
public final static int opc_multianewarray = 197; |
||||||
|
public final static int opc_ifnull = 198; |
||||||
|
public final static int opc_ifnonnull = 199; |
||||||
|
public final static int opc_goto_w = 200; |
||||||
|
public final static int opc_jsr_w = 201; |
||||||
} |
} |
||||||
|
@ -1,519 +1,482 @@ |
|||||||
/* |
/* |
||||||
* Fernflower - The Analytical Java Decompiler |
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
* http://www.reversed-java.com
|
|
||||||
* |
* |
||||||
* (C) 2008 - 2010, Stiver |
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
* |
* |
||||||
* This software is NEITHER public domain NOR free software |
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* as per GNU License. See license.txt for more details. |
|
||||||
* |
* |
||||||
* This software is distributed WITHOUT ANY WARRANTY; without |
* Unless required by applicable law or agreed to in writing, software |
||||||
* even the implied warranty of MERCHANTABILITY or FITNESS FOR |
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
* A PARTICULAR PURPOSE. |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
*/ |
*/ |
||||||
|
|
||||||
package org.jetbrains.java.decompiler.code; |
package org.jetbrains.java.decompiler.code; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.ALOAD; |
import org.jetbrains.java.decompiler.code.optinstructions.*; |
||||||
import org.jetbrains.java.decompiler.code.optinstructions.ANEWARRAY; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.ASTORE; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.BIPUSH; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.CHECKCAST; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.DLOAD; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.DSTORE; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.FLOAD; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.FSTORE; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.GETFIELD; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.GETSTATIC; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.GOTO; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.GOTO_W; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.IINC; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.ILOAD; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.INSTANCEOF; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.INVOKEDYNAMIC; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.INVOKEINTERFACE; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.INVOKESPECIAL; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.INVOKESTATIC; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.INVOKEVIRTUAL; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.ISTORE; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.JSR; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.JSR_W; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.LDC; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.LDC2_W; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.LDC_W; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.LLOAD; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.LOOKUPSWITCH; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.LSTORE; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.MULTIANEWARRAY; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.NEW; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.NEWARRAY; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.PUTFIELD; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.PUTSTATIC; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.RET; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.SIPUSH; |
|
||||||
import org.jetbrains.java.decompiler.code.optinstructions.TABLESWITCH; |
|
||||||
|
|
||||||
public class ConstantsUtil { |
public class ConstantsUtil { |
||||||
|
|
||||||
public static String getName(int opcode) { |
public static String getName(int opcode) { |
||||||
return opcodeNames[opcode]; |
return opcodeNames[opcode]; |
||||||
} |
} |
||||||
|
|
||||||
public static Instruction getInstructionInstance(int opcode, boolean wide, int group, int bytecode_version, int[] operands) { |
|
||||||
|
|
||||||
Instruction instr = getInstructionInstance(opcode, bytecode_version); |
|
||||||
instr.wide = wide; |
|
||||||
instr.group = group; |
|
||||||
instr.bytecode_version = bytecode_version; |
|
||||||
instr.setOperands(operands); |
|
||||||
|
|
||||||
return instr; |
|
||||||
} |
|
||||||
|
|
||||||
private static Instruction getInstructionInstance(int opcode, int bytecode_version) { |
|
||||||
try { |
|
||||||
Instruction instr; |
|
||||||
|
|
||||||
if((opcode >= CodeConstants.opc_ifeq && |
public static Instruction getInstructionInstance(int opcode, boolean wide, int group, int bytecode_version, int[] operands) { |
||||||
opcode <= CodeConstants.opc_if_acmpne) || |
|
||||||
opcode == CodeConstants.opc_ifnull || |
|
||||||
opcode == CodeConstants.opc_ifnonnull) { |
|
||||||
instr = new IfInstruction(); |
|
||||||
} else { |
|
||||||
|
|
||||||
Class cl = opcodeClasses[opcode]; |
Instruction instr = getInstructionInstance(opcode, bytecode_version); |
||||||
|
instr.wide = wide; |
||||||
|
instr.group = group; |
||||||
|
instr.bytecode_version = bytecode_version; |
||||||
|
instr.setOperands(operands); |
||||||
|
|
||||||
if(opcode == CodeConstants.opc_invokedynamic && bytecode_version < CodeConstants.BYTECODE_JAVA_7) { |
return instr; |
||||||
cl = null; // instruction unused in Java 6 and before
|
} |
||||||
} |
|
||||||
|
|
||||||
if(cl == null) { |
private static Instruction getInstructionInstance(int opcode, int bytecode_version) { |
||||||
instr = new Instruction(); |
try { |
||||||
} else { |
Instruction instr; |
||||||
instr = (Instruction)cl.newInstance(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
instr.opcode = opcode; |
if ((opcode >= CodeConstants.opc_ifeq && |
||||||
return instr; |
opcode <= CodeConstants.opc_if_acmpne) || |
||||||
} catch (Exception ex) { |
opcode == CodeConstants.opc_ifnull || |
||||||
return null; |
opcode == CodeConstants.opc_ifnonnull) { |
||||||
} |
instr = new IfInstruction(); |
||||||
|
} |
||||||
|
else { |
||||||
|
|
||||||
} |
Class cl = opcodeClasses[opcode]; |
||||||
|
|
||||||
|
if (opcode == CodeConstants.opc_invokedynamic && bytecode_version < CodeConstants.BYTECODE_JAVA_7) { |
||||||
|
cl = null; // instruction unused in Java 6 and before
|
||||||
|
} |
||||||
|
|
||||||
private static String[] opcodeNames = { |
if (cl == null) { |
||||||
"nop", // "nop",
|
instr = new Instruction(); |
||||||
"aconst_null", // "aconst_null",
|
} |
||||||
"iconst_m1", // "iconst_m1",
|
else { |
||||||
"iconst_0", // "iconst_0",
|
instr = (Instruction)cl.newInstance(); |
||||||
"iconst_1", // "iconst_1",
|
} |
||||||
"iconst_2", // "iconst_2",
|
} |
||||||
"iconst_3", // "iconst_3",
|
|
||||||
"iconst_4", // "iconst_4",
|
|
||||||
"iconst_5", // "iconst_5",
|
|
||||||
"lconst_0", // "lconst_0",
|
|
||||||
"lconst_1", // "lconst_1",
|
|
||||||
"fconst_0", // "fconst_0",
|
|
||||||
"fconst_1", // "fconst_1",
|
|
||||||
"fconst_2", // "fconst_2",
|
|
||||||
"dconst_0", // "dconst_0",
|
|
||||||
"dconst_1", // "dconst_1",
|
|
||||||
"bipush", // "bipush",
|
|
||||||
"sipush", // "sipush",
|
|
||||||
"ldc", // "ldc",
|
|
||||||
"ldc_w", // "ldc_w",
|
|
||||||
"ldc2_w", // "ldc2_w",
|
|
||||||
"iload", // "iload",
|
|
||||||
"lload", // "lload",
|
|
||||||
"fload", // "fload",
|
|
||||||
"dload", // "dload",
|
|
||||||
"aload", // "aload",
|
|
||||||
"iload_0", // "iload_0",
|
|
||||||
"iload_1", // "iload_1",
|
|
||||||
"iload_2", // "iload_2",
|
|
||||||
"iload_3", // "iload_3",
|
|
||||||
"lload_0", // "lload_0",
|
|
||||||
"lload_1", // "lload_1",
|
|
||||||
"lload_2", // "lload_2",
|
|
||||||
"lload_3", // "lload_3",
|
|
||||||
"fload_0", // "fload_0",
|
|
||||||
"fload_1", // "fload_1",
|
|
||||||
"fload_2", // "fload_2",
|
|
||||||
"fload_3", // "fload_3",
|
|
||||||
"dload_0", // "dload_0",
|
|
||||||
"dload_1", // "dload_1",
|
|
||||||
"dload_2", // "dload_2",
|
|
||||||
"dload_3", // "dload_3",
|
|
||||||
"aload_0", // "aload_0",
|
|
||||||
"aload_1", // "aload_1",
|
|
||||||
"aload_2", // "aload_2",
|
|
||||||
"aload_3", // "aload_3",
|
|
||||||
"iaload", // "iaload",
|
|
||||||
"laload", // "laload",
|
|
||||||
"faload", // "faload",
|
|
||||||
"daload", // "daload",
|
|
||||||
"aaload", // "aaload",
|
|
||||||
"baload", // "baload",
|
|
||||||
"caload", // "caload",
|
|
||||||
"saload", // "saload",
|
|
||||||
"istore", // "istore",
|
|
||||||
"lstore", // "lstore",
|
|
||||||
"fstore", // "fstore",
|
|
||||||
"dstore", // "dstore",
|
|
||||||
"astore", // "astore",
|
|
||||||
"istore_0", // "istore_0",
|
|
||||||
"istore_1", // "istore_1",
|
|
||||||
"istore_2", // "istore_2",
|
|
||||||
"istore_3", // "istore_3",
|
|
||||||
"lstore_0", // "lstore_0",
|
|
||||||
"lstore_1", // "lstore_1",
|
|
||||||
"lstore_2", // "lstore_2",
|
|
||||||
"lstore_3", // "lstore_3",
|
|
||||||
"fstore_0", // "fstore_0",
|
|
||||||
"fstore_1", // "fstore_1",
|
|
||||||
"fstore_2", // "fstore_2",
|
|
||||||
"fstore_3", // "fstore_3",
|
|
||||||
"dstore_0", // "dstore_0",
|
|
||||||
"dstore_1", // "dstore_1",
|
|
||||||
"dstore_2", // "dstore_2",
|
|
||||||
"dstore_3", // "dstore_3",
|
|
||||||
"astore_0", // "astore_0",
|
|
||||||
"astore_1", // "astore_1",
|
|
||||||
"astore_2", // "astore_2",
|
|
||||||
"astore_3", // "astore_3",
|
|
||||||
"iastore", // "iastore",
|
|
||||||
"lastore", // "lastore",
|
|
||||||
"fastore", // "fastore",
|
|
||||||
"dastore", // "dastore",
|
|
||||||
"aastore", // "aastore",
|
|
||||||
"bastore", // "bastore",
|
|
||||||
"castore", // "castore",
|
|
||||||
"sastore", // "sastore",
|
|
||||||
"pop", // "pop",
|
|
||||||
"pop2", // "pop2",
|
|
||||||
"dup", // "dup",
|
|
||||||
"dup_x1", // "dup_x1",
|
|
||||||
"dup_x2", // "dup_x2",
|
|
||||||
"dup2", // "dup2",
|
|
||||||
"dup2_x1", // "dup2_x1",
|
|
||||||
"dup2_x2", // "dup2_x2",
|
|
||||||
"swap", // "swap",
|
|
||||||
"iadd", // "iadd",
|
|
||||||
"ladd", // "ladd",
|
|
||||||
"fadd", // "fadd",
|
|
||||||
"dadd", // "dadd",
|
|
||||||
"isub", // "isub",
|
|
||||||
"lsub", // "lsub",
|
|
||||||
"fsub", // "fsub",
|
|
||||||
"dsub", // "dsub",
|
|
||||||
"imul", // "imul",
|
|
||||||
"lmul", // "lmul",
|
|
||||||
"fmul", // "fmul",
|
|
||||||
"dmul", // "dmul",
|
|
||||||
"idiv", // "idiv",
|
|
||||||
"ldiv", // "ldiv",
|
|
||||||
"fdiv", // "fdiv",
|
|
||||||
"ddiv", // "ddiv",
|
|
||||||
"irem", // "irem",
|
|
||||||
"lrem", // "lrem",
|
|
||||||
"frem", // "frem",
|
|
||||||
"drem", // "drem",
|
|
||||||
"ineg", // "ineg",
|
|
||||||
"lneg", // "lneg",
|
|
||||||
"fneg", // "fneg",
|
|
||||||
"dneg", // "dneg",
|
|
||||||
"ishl", // "ishl",
|
|
||||||
"lshl", // "lshl",
|
|
||||||
"ishr", // "ishr",
|
|
||||||
"lshr", // "lshr",
|
|
||||||
"iushr", // "iushr",
|
|
||||||
"lushr", // "lushr",
|
|
||||||
"iand", // "iand",
|
|
||||||
"land", // "land",
|
|
||||||
"ior", // "ior",
|
|
||||||
"lor", // "lor",
|
|
||||||
"ixor", // "ixor",
|
|
||||||
"lxor", // "lxor",
|
|
||||||
"iinc", // "iinc",
|
|
||||||
"i2l", // "i2l",
|
|
||||||
"i2f", // "i2f",
|
|
||||||
"i2d", // "i2d",
|
|
||||||
"l2i", // "l2i",
|
|
||||||
"l2f", // "l2f",
|
|
||||||
"l2d", // "l2d",
|
|
||||||
"f2i", // "f2i",
|
|
||||||
"f2l", // "f2l",
|
|
||||||
"f2d", // "f2d",
|
|
||||||
"d2i", // "d2i",
|
|
||||||
"d2l", // "d2l",
|
|
||||||
"d2f", // "d2f",
|
|
||||||
"i2b", // "i2b",
|
|
||||||
"i2c", // "i2c",
|
|
||||||
"i2s", // "i2s",
|
|
||||||
"lcmp", // "lcmp",
|
|
||||||
"fcmpl", // "fcmpl",
|
|
||||||
"fcmpg", // "fcmpg",
|
|
||||||
"dcmpl", // "dcmpl",
|
|
||||||
"dcmpg", // "dcmpg",
|
|
||||||
"ifeq", // "ifeq",
|
|
||||||
"ifne", // "ifne",
|
|
||||||
"iflt", // "iflt",
|
|
||||||
"ifge", // "ifge",
|
|
||||||
"ifgt", // "ifgt",
|
|
||||||
"ifle", // "ifle",
|
|
||||||
"if_icmpeq", // "if_icmpeq",
|
|
||||||
"if_icmpne", // "if_icmpne",
|
|
||||||
"if_icmplt", // "if_icmplt",
|
|
||||||
"if_icmpge", // "if_icmpge",
|
|
||||||
"if_icmpgt", // "if_icmpgt",
|
|
||||||
"if_icmple", // "if_icmple",
|
|
||||||
"if_acmpeq", // "if_acmpeq",
|
|
||||||
"if_acmpne", // "if_acmpne",
|
|
||||||
"goto", // "goto",
|
|
||||||
"jsr", // "jsr",
|
|
||||||
"ret", // "ret",
|
|
||||||
"tableswitch", // "tableswitch",
|
|
||||||
"lookupswitch", // "lookupswitch",
|
|
||||||
"ireturn", // "ireturn",
|
|
||||||
"lreturn", // "lreturn",
|
|
||||||
"freturn", // "freturn",
|
|
||||||
"dreturn", // "dreturn",
|
|
||||||
"areturn", // "areturn",
|
|
||||||
"return", // "return",
|
|
||||||
"getstatic", // "getstatic",
|
|
||||||
"putstatic", // "putstatic",
|
|
||||||
"getfield", // "getfield",
|
|
||||||
"putfield", // "putfield",
|
|
||||||
"invokevirtual", // "invokevirtual",
|
|
||||||
"invokespecial", // "invokespecial",
|
|
||||||
"invokestatic", // "invokestatic",
|
|
||||||
"invokeinterface", // "invokeinterface",
|
|
||||||
//"xxxunusedxxx", // "xxxunusedxxx", Java 6 and before
|
|
||||||
"invokedynamic", // "invokedynamic", Java 7 and later
|
|
||||||
"new", // "new",
|
|
||||||
"newarray", // "newarray",
|
|
||||||
"anewarray", // "anewarray",
|
|
||||||
"arraylength", // "arraylength",
|
|
||||||
"athrow", // "athrow",
|
|
||||||
"checkcast", // "checkcast",
|
|
||||||
"instanceof", // "instanceof",
|
|
||||||
"monitorenter", // "monitorenter",
|
|
||||||
"monitorexit", // "monitorexit",
|
|
||||||
"wide", // "wide",
|
|
||||||
"multianewarray", // "multianewarray",
|
|
||||||
"ifnull", // "ifnull",
|
|
||||||
"ifnonnull", // "ifnonnull",
|
|
||||||
"goto_w", // "goto_w",
|
|
||||||
"jsr_w" // "jsr_w"
|
|
||||||
}; |
|
||||||
|
|
||||||
private static Class[] opcodeClasses = { |
instr.opcode = opcode; |
||||||
null, // "nop",
|
return instr; |
||||||
null, // "aconst_null",
|
} |
||||||
null, // "iconst_m1",
|
catch (Exception ex) { |
||||||
null, // "iconst_0",
|
return null; |
||||||
null, // "iconst_1",
|
} |
||||||
null, // "iconst_2",
|
} |
||||||
null, // "iconst_3",
|
|
||||||
null, // "iconst_4",
|
|
||||||
null, // "iconst_5",
|
|
||||||
null, // "lconst_0",
|
|
||||||
null, // "lconst_1",
|
|
||||||
null, // "fconst_0",
|
|
||||||
null, // "fconst_1",
|
|
||||||
null, // "fconst_2",
|
|
||||||
null, // "dconst_0",
|
|
||||||
null, // "dconst_1",
|
|
||||||
BIPUSH.class, // "bipush",
|
|
||||||
SIPUSH.class, // "sipush",
|
|
||||||
LDC.class, // "ldc",
|
|
||||||
LDC_W.class, // "ldc_w",
|
|
||||||
LDC2_W.class, // "ldc2_w",
|
|
||||||
ILOAD.class, // "iload",
|
|
||||||
LLOAD.class, // "lload",
|
|
||||||
FLOAD.class, // "fload",
|
|
||||||
DLOAD.class, // "dload",
|
|
||||||
ALOAD.class, // "aload",
|
|
||||||
null, // "iload_0",
|
|
||||||
null, // "iload_1",
|
|
||||||
null, // "iload_2",
|
|
||||||
null, // "iload_3",
|
|
||||||
null, // "lload_0",
|
|
||||||
null, // "lload_1",
|
|
||||||
null, // "lload_2",
|
|
||||||
null, // "lload_3",
|
|
||||||
null, // "fload_0",
|
|
||||||
null, // "fload_1",
|
|
||||||
null, // "fload_2",
|
|
||||||
null, // "fload_3",
|
|
||||||
null, // "dload_0",
|
|
||||||
null, // "dload_1",
|
|
||||||
null, // "dload_2",
|
|
||||||
null, // "dload_3",
|
|
||||||
null, // "aload_0",
|
|
||||||
null, // "aload_1",
|
|
||||||
null, // "aload_2",
|
|
||||||
null, // "aload_3",
|
|
||||||
null, // "iaload",
|
|
||||||
null, // "laload",
|
|
||||||
null, // "faload",
|
|
||||||
null, // "daload",
|
|
||||||
null, // "aaload",
|
|
||||||
null, // "baload",
|
|
||||||
null, // "caload",
|
|
||||||
null, // "saload",
|
|
||||||
ISTORE.class, // "istore",
|
|
||||||
LSTORE.class, // "lstore",
|
|
||||||
FSTORE.class, // "fstore",
|
|
||||||
DSTORE.class, // "dstore",
|
|
||||||
ASTORE.class, // "astore",
|
|
||||||
null, // "istore_0",
|
|
||||||
null, // "istore_1",
|
|
||||||
null, // "istore_2",
|
|
||||||
null, // "istore_3",
|
|
||||||
null, // "lstore_0",
|
|
||||||
null, // "lstore_1",
|
|
||||||
null, // "lstore_2",
|
|
||||||
null, // "lstore_3",
|
|
||||||
null, // "fstore_0",
|
|
||||||
null, // "fstore_1",
|
|
||||||
null, // "fstore_2",
|
|
||||||
null, // "fstore_3",
|
|
||||||
null, // "dstore_0",
|
|
||||||
null, // "dstore_1",
|
|
||||||
null, // "dstore_2",
|
|
||||||
null, // "dstore_3",
|
|
||||||
null, // "astore_0",
|
|
||||||
null, // "astore_1",
|
|
||||||
null, // "astore_2",
|
|
||||||
null, // "astore_3",
|
|
||||||
null, // "iastore",
|
|
||||||
null, // "lastore",
|
|
||||||
null, // "fastore",
|
|
||||||
null, // "dastore",
|
|
||||||
null, // "aastore",
|
|
||||||
null, // "bastore",
|
|
||||||
null, // "castore",
|
|
||||||
null, // "sastore",
|
|
||||||
null, // "pop",
|
|
||||||
null, // "pop2",
|
|
||||||
null, // "dup",
|
|
||||||
null, // "dup_x1",
|
|
||||||
null, // "dup_x2",
|
|
||||||
null, // "dup2",
|
|
||||||
null, // "dup2_x1",
|
|
||||||
null, // "dup2_x2",
|
|
||||||
null, // "swap",
|
|
||||||
null, // "iadd",
|
|
||||||
null, // "ladd",
|
|
||||||
null, // "fadd",
|
|
||||||
null, // "dadd",
|
|
||||||
null, // "isub",
|
|
||||||
null, // "lsub",
|
|
||||||
null, // "fsub",
|
|
||||||
null, // "dsub",
|
|
||||||
null, // "imul",
|
|
||||||
null, // "lmul",
|
|
||||||
null, // "fmul",
|
|
||||||
null, // "dmul",
|
|
||||||
null, // "idiv",
|
|
||||||
null, // "ldiv",
|
|
||||||
null, // "fdiv",
|
|
||||||
null, // "ddiv",
|
|
||||||
null, // "irem",
|
|
||||||
null, // "lrem",
|
|
||||||
null, // "frem",
|
|
||||||
null, // "drem",
|
|
||||||
null, // "ineg",
|
|
||||||
null, // "lneg",
|
|
||||||
null, // "fneg",
|
|
||||||
null, // "dneg",
|
|
||||||
null, // "ishl",
|
|
||||||
null, // "lshl",
|
|
||||||
null, // "ishr",
|
|
||||||
null, // "lshr",
|
|
||||||
null, // "iushr",
|
|
||||||
null, // "lushr",
|
|
||||||
null, // "iand",
|
|
||||||
null, // "land",
|
|
||||||
null, // "ior",
|
|
||||||
null, // "lor",
|
|
||||||
null, // "ixor",
|
|
||||||
null, // "lxor",
|
|
||||||
IINC.class, // "iinc",
|
|
||||||
null, // "i2l",
|
|
||||||
null, // "i2f",
|
|
||||||
null, // "i2d",
|
|
||||||
null, // "l2i",
|
|
||||||
null, // "l2f",
|
|
||||||
null, // "l2d",
|
|
||||||
null, // "f2i",
|
|
||||||
null, // "f2l",
|
|
||||||
null, // "f2d",
|
|
||||||
null, // "d2i",
|
|
||||||
null, // "d2l",
|
|
||||||
null, // "d2f",
|
|
||||||
null, // "i2b",
|
|
||||||
null, // "i2c",
|
|
||||||
null, // "i2s",
|
|
||||||
null, // "lcmp",
|
|
||||||
null, // "fcmpl",
|
|
||||||
null, // "fcmpg",
|
|
||||||
null, // "dcmpl",
|
|
||||||
null, // "dcmpg",
|
|
||||||
null, // "ifeq",
|
|
||||||
null, // "ifne",
|
|
||||||
null, // "iflt",
|
|
||||||
null, // "ifge",
|
|
||||||
null, // "ifgt",
|
|
||||||
null, // "ifle",
|
|
||||||
null, // "if_icmpeq",
|
|
||||||
null, // "if_icmpne",
|
|
||||||
null, // "if_icmplt",
|
|
||||||
null, // "if_icmpge",
|
|
||||||
null, // "if_icmpgt",
|
|
||||||
null, // "if_icmple",
|
|
||||||
null, // "if_acmpeq",
|
|
||||||
null, // "if_acmpne",
|
|
||||||
GOTO.class, // "goto",
|
|
||||||
JSR.class, // "jsr",
|
|
||||||
RET.class, // "ret",
|
|
||||||
TABLESWITCH.class, // "tableswitch",
|
|
||||||
LOOKUPSWITCH.class, // "lookupswitch",
|
|
||||||
null, // "ireturn",
|
|
||||||
null, // "lreturn",
|
|
||||||
null, // "freturn",
|
|
||||||
null, // "dreturn",
|
|
||||||
null, // "areturn",
|
|
||||||
null, // "return",
|
|
||||||
GETSTATIC.class, // "getstatic",
|
|
||||||
PUTSTATIC.class, // "putstatic",
|
|
||||||
GETFIELD.class, // "getfield",
|
|
||||||
PUTFIELD.class, // "putfield",
|
|
||||||
INVOKEVIRTUAL.class, // "invokevirtual",
|
|
||||||
INVOKESPECIAL.class, // "invokespecial",
|
|
||||||
INVOKESTATIC.class, // "invokestatic",
|
|
||||||
INVOKEINTERFACE.class, // "invokeinterface",
|
|
||||||
INVOKEDYNAMIC.class, // "xxxunusedxxx" Java 6 and before, "invokedynamic" Java 7 and later
|
|
||||||
NEW.class, // "new",
|
|
||||||
NEWARRAY.class, // "newarray",
|
|
||||||
ANEWARRAY.class, // "anewarray",
|
|
||||||
null, // "arraylength",
|
|
||||||
null, // "athrow",
|
|
||||||
CHECKCAST.class, // "checkcast",
|
|
||||||
INSTANCEOF.class, // "instanceof",
|
|
||||||
null, // "monitorenter",
|
|
||||||
null, // "monitorexit",
|
|
||||||
null, // "wide",
|
|
||||||
MULTIANEWARRAY.class, // "multianewarray",
|
|
||||||
null, // "ifnull",
|
|
||||||
null, // "ifnonnull",
|
|
||||||
GOTO_W.class, // "goto_w",
|
|
||||||
JSR_W.class // "jsr_w"
|
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
|
private static String[] opcodeNames = { |
||||||
|
"nop", // "nop",
|
||||||
|
"aconst_null", // "aconst_null",
|
||||||
|
"iconst_m1", // "iconst_m1",
|
||||||
|
"iconst_0", // "iconst_0",
|
||||||
|
"iconst_1", // "iconst_1",
|
||||||
|
"iconst_2", // "iconst_2",
|
||||||
|
"iconst_3", // "iconst_3",
|
||||||
|
"iconst_4", // "iconst_4",
|
||||||
|
"iconst_5", // "iconst_5",
|
||||||
|
"lconst_0", // "lconst_0",
|
||||||
|
"lconst_1", // "lconst_1",
|
||||||
|
"fconst_0", // "fconst_0",
|
||||||
|
"fconst_1", // "fconst_1",
|
||||||
|
"fconst_2", // "fconst_2",
|
||||||
|
"dconst_0", // "dconst_0",
|
||||||
|
"dconst_1", // "dconst_1",
|
||||||
|
"bipush", // "bipush",
|
||||||
|
"sipush", // "sipush",
|
||||||
|
"ldc", // "ldc",
|
||||||
|
"ldc_w", // "ldc_w",
|
||||||
|
"ldc2_w", // "ldc2_w",
|
||||||
|
"iload", // "iload",
|
||||||
|
"lload", // "lload",
|
||||||
|
"fload", // "fload",
|
||||||
|
"dload", // "dload",
|
||||||
|
"aload", // "aload",
|
||||||
|
"iload_0", // "iload_0",
|
||||||
|
"iload_1", // "iload_1",
|
||||||
|
"iload_2", // "iload_2",
|
||||||
|
"iload_3", // "iload_3",
|
||||||
|
"lload_0", // "lload_0",
|
||||||
|
"lload_1", // "lload_1",
|
||||||
|
"lload_2", // "lload_2",
|
||||||
|
"lload_3", // "lload_3",
|
||||||
|
"fload_0", // "fload_0",
|
||||||
|
"fload_1", // "fload_1",
|
||||||
|
"fload_2", // "fload_2",
|
||||||
|
"fload_3", // "fload_3",
|
||||||
|
"dload_0", // "dload_0",
|
||||||
|
"dload_1", // "dload_1",
|
||||||
|
"dload_2", // "dload_2",
|
||||||
|
"dload_3", // "dload_3",
|
||||||
|
"aload_0", // "aload_0",
|
||||||
|
"aload_1", // "aload_1",
|
||||||
|
"aload_2", // "aload_2",
|
||||||
|
"aload_3", // "aload_3",
|
||||||
|
"iaload", // "iaload",
|
||||||
|
"laload", // "laload",
|
||||||
|
"faload", // "faload",
|
||||||
|
"daload", // "daload",
|
||||||
|
"aaload", // "aaload",
|
||||||
|
"baload", // "baload",
|
||||||
|
"caload", // "caload",
|
||||||
|
"saload", // "saload",
|
||||||
|
"istore", // "istore",
|
||||||
|
"lstore", // "lstore",
|
||||||
|
"fstore", // "fstore",
|
||||||
|
"dstore", // "dstore",
|
||||||
|
"astore", // "astore",
|
||||||
|
"istore_0", // "istore_0",
|
||||||
|
"istore_1", // "istore_1",
|
||||||
|
"istore_2", // "istore_2",
|
||||||
|
"istore_3", // "istore_3",
|
||||||
|
"lstore_0", // "lstore_0",
|
||||||
|
"lstore_1", // "lstore_1",
|
||||||
|
"lstore_2", // "lstore_2",
|
||||||
|
"lstore_3", // "lstore_3",
|
||||||
|
"fstore_0", // "fstore_0",
|
||||||
|
"fstore_1", // "fstore_1",
|
||||||
|
"fstore_2", // "fstore_2",
|
||||||
|
"fstore_3", // "fstore_3",
|
||||||
|
"dstore_0", // "dstore_0",
|
||||||
|
"dstore_1", // "dstore_1",
|
||||||
|
"dstore_2", // "dstore_2",
|
||||||
|
"dstore_3", // "dstore_3",
|
||||||
|
"astore_0", // "astore_0",
|
||||||
|
"astore_1", // "astore_1",
|
||||||
|
"astore_2", // "astore_2",
|
||||||
|
"astore_3", // "astore_3",
|
||||||
|
"iastore", // "iastore",
|
||||||
|
"lastore", // "lastore",
|
||||||
|
"fastore", // "fastore",
|
||||||
|
"dastore", // "dastore",
|
||||||
|
"aastore", // "aastore",
|
||||||
|
"bastore", // "bastore",
|
||||||
|
"castore", // "castore",
|
||||||
|
"sastore", // "sastore",
|
||||||
|
"pop", // "pop",
|
||||||
|
"pop2", // "pop2",
|
||||||
|
"dup", // "dup",
|
||||||
|
"dup_x1", // "dup_x1",
|
||||||
|
"dup_x2", // "dup_x2",
|
||||||
|
"dup2", // "dup2",
|
||||||
|
"dup2_x1", // "dup2_x1",
|
||||||
|
"dup2_x2", // "dup2_x2",
|
||||||
|
"swap", // "swap",
|
||||||
|
"iadd", // "iadd",
|
||||||
|
"ladd", // "ladd",
|
||||||
|
"fadd", // "fadd",
|
||||||
|
"dadd", // "dadd",
|
||||||
|
"isub", // "isub",
|
||||||
|
"lsub", // "lsub",
|
||||||
|
"fsub", // "fsub",
|
||||||
|
"dsub", // "dsub",
|
||||||
|
"imul", // "imul",
|
||||||
|
"lmul", // "lmul",
|
||||||
|
"fmul", // "fmul",
|
||||||
|
"dmul", // "dmul",
|
||||||
|
"idiv", // "idiv",
|
||||||
|
"ldiv", // "ldiv",
|
||||||
|
"fdiv", // "fdiv",
|
||||||
|
"ddiv", // "ddiv",
|
||||||
|
"irem", // "irem",
|
||||||
|
"lrem", // "lrem",
|
||||||
|
"frem", // "frem",
|
||||||
|
"drem", // "drem",
|
||||||
|
"ineg", // "ineg",
|
||||||
|
"lneg", // "lneg",
|
||||||
|
"fneg", // "fneg",
|
||||||
|
"dneg", // "dneg",
|
||||||
|
"ishl", // "ishl",
|
||||||
|
"lshl", // "lshl",
|
||||||
|
"ishr", // "ishr",
|
||||||
|
"lshr", // "lshr",
|
||||||
|
"iushr", // "iushr",
|
||||||
|
"lushr", // "lushr",
|
||||||
|
"iand", // "iand",
|
||||||
|
"land", // "land",
|
||||||
|
"ior", // "ior",
|
||||||
|
"lor", // "lor",
|
||||||
|
"ixor", // "ixor",
|
||||||
|
"lxor", // "lxor",
|
||||||
|
"iinc", // "iinc",
|
||||||
|
"i2l", // "i2l",
|
||||||
|
"i2f", // "i2f",
|
||||||
|
"i2d", // "i2d",
|
||||||
|
"l2i", // "l2i",
|
||||||
|
"l2f", // "l2f",
|
||||||
|
"l2d", // "l2d",
|
||||||
|
"f2i", // "f2i",
|
||||||
|
"f2l", // "f2l",
|
||||||
|
"f2d", // "f2d",
|
||||||
|
"d2i", // "d2i",
|
||||||
|
"d2l", // "d2l",
|
||||||
|
"d2f", // "d2f",
|
||||||
|
"i2b", // "i2b",
|
||||||
|
"i2c", // "i2c",
|
||||||
|
"i2s", // "i2s",
|
||||||
|
"lcmp", // "lcmp",
|
||||||
|
"fcmpl", // "fcmpl",
|
||||||
|
"fcmpg", // "fcmpg",
|
||||||
|
"dcmpl", // "dcmpl",
|
||||||
|
"dcmpg", // "dcmpg",
|
||||||
|
"ifeq", // "ifeq",
|
||||||
|
"ifne", // "ifne",
|
||||||
|
"iflt", // "iflt",
|
||||||
|
"ifge", // "ifge",
|
||||||
|
"ifgt", // "ifgt",
|
||||||
|
"ifle", // "ifle",
|
||||||
|
"if_icmpeq", // "if_icmpeq",
|
||||||
|
"if_icmpne", // "if_icmpne",
|
||||||
|
"if_icmplt", // "if_icmplt",
|
||||||
|
"if_icmpge", // "if_icmpge",
|
||||||
|
"if_icmpgt", // "if_icmpgt",
|
||||||
|
"if_icmple", // "if_icmple",
|
||||||
|
"if_acmpeq", // "if_acmpeq",
|
||||||
|
"if_acmpne", // "if_acmpne",
|
||||||
|
"goto", // "goto",
|
||||||
|
"jsr", // "jsr",
|
||||||
|
"ret", // "ret",
|
||||||
|
"tableswitch", // "tableswitch",
|
||||||
|
"lookupswitch", // "lookupswitch",
|
||||||
|
"ireturn", // "ireturn",
|
||||||
|
"lreturn", // "lreturn",
|
||||||
|
"freturn", // "freturn",
|
||||||
|
"dreturn", // "dreturn",
|
||||||
|
"areturn", // "areturn",
|
||||||
|
"return", // "return",
|
||||||
|
"getstatic", // "getstatic",
|
||||||
|
"putstatic", // "putstatic",
|
||||||
|
"getfield", // "getfield",
|
||||||
|
"putfield", // "putfield",
|
||||||
|
"invokevirtual", // "invokevirtual",
|
||||||
|
"invokespecial", // "invokespecial",
|
||||||
|
"invokestatic", // "invokestatic",
|
||||||
|
"invokeinterface", // "invokeinterface",
|
||||||
|
//"xxxunusedxxx", // "xxxunusedxxx", Java 6 and before
|
||||||
|
"invokedynamic", // "invokedynamic", Java 7 and later
|
||||||
|
"new", // "new",
|
||||||
|
"newarray", // "newarray",
|
||||||
|
"anewarray", // "anewarray",
|
||||||
|
"arraylength", // "arraylength",
|
||||||
|
"athrow", // "athrow",
|
||||||
|
"checkcast", // "checkcast",
|
||||||
|
"instanceof", // "instanceof",
|
||||||
|
"monitorenter", // "monitorenter",
|
||||||
|
"monitorexit", // "monitorexit",
|
||||||
|
"wide", // "wide",
|
||||||
|
"multianewarray", // "multianewarray",
|
||||||
|
"ifnull", // "ifnull",
|
||||||
|
"ifnonnull", // "ifnonnull",
|
||||||
|
"goto_w", // "goto_w",
|
||||||
|
"jsr_w" // "jsr_w"
|
||||||
|
}; |
||||||
|
|
||||||
|
private static Class[] opcodeClasses = { |
||||||
|
null, // "nop",
|
||||||
|
null, // "aconst_null",
|
||||||
|
null, // "iconst_m1",
|
||||||
|
null, // "iconst_0",
|
||||||
|
null, // "iconst_1",
|
||||||
|
null, // "iconst_2",
|
||||||
|
null, // "iconst_3",
|
||||||
|
null, // "iconst_4",
|
||||||
|
null, // "iconst_5",
|
||||||
|
null, // "lconst_0",
|
||||||
|
null, // "lconst_1",
|
||||||
|
null, // "fconst_0",
|
||||||
|
null, // "fconst_1",
|
||||||
|
null, // "fconst_2",
|
||||||
|
null, // "dconst_0",
|
||||||
|
null, // "dconst_1",
|
||||||
|
BIPUSH.class, // "bipush",
|
||||||
|
SIPUSH.class, // "sipush",
|
||||||
|
LDC.class, // "ldc",
|
||||||
|
LDC_W.class, // "ldc_w",
|
||||||
|
LDC2_W.class, // "ldc2_w",
|
||||||
|
ILOAD.class, // "iload",
|
||||||
|
LLOAD.class, // "lload",
|
||||||
|
FLOAD.class, // "fload",
|
||||||
|
DLOAD.class, // "dload",
|
||||||
|
ALOAD.class, // "aload",
|
||||||
|
null, // "iload_0",
|
||||||
|
null, // "iload_1",
|
||||||
|
null, // "iload_2",
|
||||||
|
null, // "iload_3",
|
||||||
|
null, // "lload_0",
|
||||||
|
null, // "lload_1",
|
||||||
|
null, // "lload_2",
|
||||||
|
null, // "lload_3",
|
||||||
|
null, // "fload_0",
|
||||||
|
null, // "fload_1",
|
||||||
|
null, // "fload_2",
|
||||||
|
null, // "fload_3",
|
||||||
|
null, // "dload_0",
|
||||||
|
null, // "dload_1",
|
||||||
|
null, // "dload_2",
|
||||||
|
null, // "dload_3",
|
||||||
|
null, // "aload_0",
|
||||||
|
null, // "aload_1",
|
||||||
|
null, // "aload_2",
|
||||||
|
null, // "aload_3",
|
||||||
|
null, // "iaload",
|
||||||
|
null, // "laload",
|
||||||
|
null, // "faload",
|
||||||
|
null, // "daload",
|
||||||
|
null, // "aaload",
|
||||||
|
null, // "baload",
|
||||||
|
null, // "caload",
|
||||||
|
null, // "saload",
|
||||||
|
ISTORE.class, // "istore",
|
||||||
|
LSTORE.class, // "lstore",
|
||||||
|
FSTORE.class, // "fstore",
|
||||||
|
DSTORE.class, // "dstore",
|
||||||
|
ASTORE.class, // "astore",
|
||||||
|
null, // "istore_0",
|
||||||
|
null, // "istore_1",
|
||||||
|
null, // "istore_2",
|
||||||
|
null, // "istore_3",
|
||||||
|
null, // "lstore_0",
|
||||||
|
null, // "lstore_1",
|
||||||
|
null, // "lstore_2",
|
||||||
|
null, // "lstore_3",
|
||||||
|
null, // "fstore_0",
|
||||||
|
null, // "fstore_1",
|
||||||
|
null, // "fstore_2",
|
||||||
|
null, // "fstore_3",
|
||||||
|
null, // "dstore_0",
|
||||||
|
null, // "dstore_1",
|
||||||
|
null, // "dstore_2",
|
||||||
|
null, // "dstore_3",
|
||||||
|
null, // "astore_0",
|
||||||
|
null, // "astore_1",
|
||||||
|
null, // "astore_2",
|
||||||
|
null, // "astore_3",
|
||||||
|
null, // "iastore",
|
||||||
|
null, // "lastore",
|
||||||
|
null, // "fastore",
|
||||||
|
null, // "dastore",
|
||||||
|
null, // "aastore",
|
||||||
|
null, // "bastore",
|
||||||
|
null, // "castore",
|
||||||
|
null, // "sastore",
|
||||||
|
null, // "pop",
|
||||||
|
null, // "pop2",
|
||||||
|
null, // "dup",
|
||||||
|
null, // "dup_x1",
|
||||||
|
null, // "dup_x2",
|
||||||
|
null, // "dup2",
|
||||||
|
null, // "dup2_x1",
|
||||||
|
null, // "dup2_x2",
|
||||||
|
null, // "swap",
|
||||||
|
null, // "iadd",
|
||||||
|
null, // "ladd",
|
||||||
|
null, // "fadd",
|
||||||
|
null, // "dadd",
|
||||||
|
null, // "isub",
|
||||||
|
null, // "lsub",
|
||||||
|
null, // "fsub",
|
||||||
|
null, // "dsub",
|
||||||
|
null, // "imul",
|
||||||
|
null, // "lmul",
|
||||||
|
null, // "fmul",
|
||||||
|
null, // "dmul",
|
||||||
|
null, // "idiv",
|
||||||
|
null, // "ldiv",
|
||||||
|
null, // "fdiv",
|
||||||
|
null, // "ddiv",
|
||||||
|
null, // "irem",
|
||||||
|
null, // "lrem",
|
||||||
|
null, // "frem",
|
||||||
|
null, // "drem",
|
||||||
|
null, // "ineg",
|
||||||
|
null, // "lneg",
|
||||||
|
null, // "fneg",
|
||||||
|
null, // "dneg",
|
||||||
|
null, // "ishl",
|
||||||
|
null, // "lshl",
|
||||||
|
null, // "ishr",
|
||||||
|
null, // "lshr",
|
||||||
|
null, // "iushr",
|
||||||
|
null, // "lushr",
|
||||||
|
null, // "iand",
|
||||||
|
null, // "land",
|
||||||
|
null, // "ior",
|
||||||
|
null, // "lor",
|
||||||
|
null, // "ixor",
|
||||||
|
null, // "lxor",
|
||||||
|
IINC.class, // "iinc",
|
||||||
|
null, // "i2l",
|
||||||
|
null, // "i2f",
|
||||||
|
null, // "i2d",
|
||||||
|
null, // "l2i",
|
||||||
|
null, // "l2f",
|
||||||
|
null, // "l2d",
|
||||||
|
null, // "f2i",
|
||||||
|
null, // "f2l",
|
||||||
|
null, // "f2d",
|
||||||
|
null, // "d2i",
|
||||||
|
null, // "d2l",
|
||||||
|
null, // "d2f",
|
||||||
|
null, // "i2b",
|
||||||
|
null, // "i2c",
|
||||||
|
null, // "i2s",
|
||||||
|
null, // "lcmp",
|
||||||
|
null, // "fcmpl",
|
||||||
|
null, // "fcmpg",
|
||||||
|
null, // "dcmpl",
|
||||||
|
null, // "dcmpg",
|
||||||
|
null, // "ifeq",
|
||||||
|
null, // "ifne",
|
||||||
|
null, // "iflt",
|
||||||
|
null, // "ifge",
|
||||||
|
null, // "ifgt",
|
||||||
|
null, // "ifle",
|
||||||
|
null, // "if_icmpeq",
|
||||||
|
null, // "if_icmpne",
|
||||||
|
null, // "if_icmplt",
|
||||||
|
null, // "if_icmpge",
|
||||||
|
null, // "if_icmpgt",
|
||||||
|
null, // "if_icmple",
|
||||||
|
null, // "if_acmpeq",
|
||||||
|
null, // "if_acmpne",
|
||||||
|
GOTO.class, // "goto",
|
||||||
|
JSR.class, // "jsr",
|
||||||
|
RET.class, // "ret",
|
||||||
|
TABLESWITCH.class, // "tableswitch",
|
||||||
|
LOOKUPSWITCH.class, // "lookupswitch",
|
||||||
|
null, // "ireturn",
|
||||||
|
null, // "lreturn",
|
||||||
|
null, // "freturn",
|
||||||
|
null, // "dreturn",
|
||||||
|
null, // "areturn",
|
||||||
|
null, // "return",
|
||||||
|
GETSTATIC.class, // "getstatic",
|
||||||
|
PUTSTATIC.class, // "putstatic",
|
||||||
|
GETFIELD.class, // "getfield",
|
||||||
|
PUTFIELD.class, // "putfield",
|
||||||
|
INVOKEVIRTUAL.class, // "invokevirtual",
|
||||||
|
INVOKESPECIAL.class, // "invokespecial",
|
||||||
|
INVOKESTATIC.class, // "invokestatic",
|
||||||
|
INVOKEINTERFACE.class, // "invokeinterface",
|
||||||
|
INVOKEDYNAMIC.class, // "xxxunusedxxx" Java 6 and before, "invokedynamic" Java 7 and later
|
||||||
|
NEW.class, // "new",
|
||||||
|
NEWARRAY.class, // "newarray",
|
||||||
|
ANEWARRAY.class, // "anewarray",
|
||||||
|
null, // "arraylength",
|
||||||
|
null, // "athrow",
|
||||||
|
CHECKCAST.class, // "checkcast",
|
||||||
|
INSTANCEOF.class, // "instanceof",
|
||||||
|
null, // "monitorenter",
|
||||||
|
null, // "monitorexit",
|
||||||
|
null, // "wide",
|
||||||
|
MULTIANEWARRAY.class, // "multianewarray",
|
||||||
|
null, // "ifnull",
|
||||||
|
null, // "ifnonnull",
|
||||||
|
GOTO_W.class, // "goto_w",
|
||||||
|
JSR_W.class // "jsr_w"
|
||||||
|
}; |
||||||
} |
} |
||||||
|
@ -1,62 +1,63 @@ |
|||||||
/* |
/* |
||||||
* Fernflower - The Analytical Java Decompiler |
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
* http://www.reversed-java.com
|
|
||||||
* |
* |
||||||
* (C) 2008 - 2010, Stiver |
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
* |
* |
||||||
* This software is NEITHER public domain NOR free software |
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* as per GNU License. See license.txt for more details. |
|
||||||
* |
* |
||||||
* This software is distributed WITHOUT ANY WARRANTY; without |
* Unless required by applicable law or agreed to in writing, software |
||||||
* even the implied warranty of MERCHANTABILITY or FITNESS FOR |
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
* A PARTICULAR PURPOSE. |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
*/ |
*/ |
||||||
|
|
||||||
package org.jetbrains.java.decompiler.code; |
package org.jetbrains.java.decompiler.code; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.main.DecompilerContext; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.main.DecompilerContext; |
|
||||||
|
|
||||||
public class ExceptionHandler { |
public class ExceptionHandler { |
||||||
|
|
||||||
public int from = 0; |
public int from = 0; |
||||||
public int to = 0; |
public int to = 0; |
||||||
public int handler = 0; |
public int handler = 0; |
||||||
|
|
||||||
public int from_instr = 0; |
|
||||||
public int to_instr = 0; |
|
||||||
public int handler_instr = 0; |
|
||||||
|
|
||||||
public int class_index = 0; |
public int from_instr = 0; |
||||||
public String exceptionClass = null; |
public int to_instr = 0; |
||||||
|
public int handler_instr = 0; |
||||||
|
|
||||||
public ExceptionHandler(){} |
public int class_index = 0; |
||||||
|
public String exceptionClass = null; |
||||||
|
|
||||||
public ExceptionHandler(int from_raw, int to_raw, int handler_raw, String exceptionClass) { |
public ExceptionHandler() { |
||||||
this.from = from_raw; |
} |
||||||
this.to = to_raw; |
|
||||||
this.handler = handler_raw; |
|
||||||
this.exceptionClass = exceptionClass; |
|
||||||
} |
|
||||||
|
|
||||||
public void writeToStream(DataOutputStream out) throws IOException { |
public ExceptionHandler(int from_raw, int to_raw, int handler_raw, String exceptionClass) { |
||||||
out.writeShort(from); |
this.from = from_raw; |
||||||
out.writeShort(to); |
this.to = to_raw; |
||||||
out.writeShort(handler); |
this.handler = handler_raw; |
||||||
out.writeShort(class_index); |
this.exceptionClass = exceptionClass; |
||||||
} |
} |
||||||
|
|
||||||
public String toString() { |
public void writeToStream(DataOutputStream out) throws IOException { |
||||||
|
out.writeShort(from); |
||||||
|
out.writeShort(to); |
||||||
|
out.writeShort(handler); |
||||||
|
out.writeShort(class_index); |
||||||
|
} |
||||||
|
|
||||||
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
public String toString() { |
||||||
|
|
||||||
StringBuffer buf = new StringBuffer(); |
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
||||||
buf.append("from: "+from+" to: "+to+" handler: "+handler+new_line_separator); |
|
||||||
buf.append("from_instr: "+from_instr+" to_instr: "+to_instr+" handler_instr: "+handler_instr+new_line_separator); |
|
||||||
buf.append("exceptionClass: "+exceptionClass+new_line_separator); |
|
||||||
return buf.toString(); |
|
||||||
} |
|
||||||
|
|
||||||
|
StringBuffer buf = new StringBuffer(); |
||||||
|
buf.append("from: " + from + " to: " + to + " handler: " + handler + new_line_separator); |
||||||
|
buf.append("from_instr: " + from_instr + " to_instr: " + to_instr + " handler_instr: " + handler_instr + new_line_separator); |
||||||
|
buf.append("exceptionClass: " + exceptionClass + new_line_separator); |
||||||
|
return buf.toString(); |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,57 +1,58 @@ |
|||||||
/* |
/* |
||||||
* Fernflower - The Analytical Java Decompiler |
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
* http://www.reversed-java.com
|
|
||||||
* |
* |
||||||
* (C) 2008 - 2010, Stiver |
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
* |
* |
||||||
* This software is NEITHER public domain NOR free software |
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* as per GNU License. See license.txt for more details. |
|
||||||
* |
* |
||||||
* This software is distributed WITHOUT ANY WARRANTY; without |
* Unless required by applicable law or agreed to in writing, software |
||||||
* even the implied warranty of MERCHANTABILITY or FITNESS FOR |
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
* A PARTICULAR PURPOSE. |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
*/ |
*/ |
||||||
|
|
||||||
package org.jetbrains.java.decompiler.code; |
package org.jetbrains.java.decompiler.code; |
||||||
|
|
||||||
import java.util.ArrayList; |
|
||||||
import java.util.List; |
|
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.interpreter.Util; |
import org.jetbrains.java.decompiler.code.interpreter.Util; |
||||||
import org.jetbrains.java.decompiler.struct.StructContext; |
import org.jetbrains.java.decompiler.struct.StructContext; |
||||||
|
|
||||||
public class ExceptionTable { |
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
private List<ExceptionHandler> handlers = new ArrayList<ExceptionHandler>(); |
public class ExceptionTable { |
||||||
|
|
||||||
public ExceptionTable() {} |
private List<ExceptionHandler> handlers = new ArrayList<ExceptionHandler>(); |
||||||
|
|
||||||
public ExceptionTable(List<ExceptionHandler> handlers) { |
public ExceptionTable() { |
||||||
this.handlers = handlers; |
} |
||||||
} |
|
||||||
|
|
||||||
|
public ExceptionTable(List<ExceptionHandler> handlers) { |
||||||
|
this.handlers = handlers; |
||||||
|
} |
||||||
|
|
||||||
public ExceptionHandler getHandlerByClass(StructContext context, int line, String valclass, boolean withany) { |
|
||||||
|
|
||||||
ExceptionHandler res = null; // no handler found
|
public ExceptionHandler getHandlerByClass(StructContext context, int line, String valclass, boolean withany) { |
||||||
|
|
||||||
for(ExceptionHandler handler : handlers) { |
ExceptionHandler res = null; // no handler found
|
||||||
if(handler.from<=line && handler.to>line) { |
|
||||||
String name = handler.exceptionClass; |
|
||||||
|
|
||||||
if((withany && name==null) || // any -> finally or synchronized handler
|
for (ExceptionHandler handler : handlers) { |
||||||
(name!=null && Util.instanceOf(context, valclass, name))) { |
if (handler.from <= line && handler.to > line) { |
||||||
res = handler; |
String name = handler.exceptionClass; |
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return res; |
if ((withany && name == null) || // any -> finally or synchronized handler
|
||||||
} |
(name != null && Util.instanceOf(context, valclass, name))) { |
||||||
|
res = handler; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
public List<ExceptionHandler> getHandlers() { |
return res; |
||||||
return handlers; |
} |
||||||
} |
|
||||||
|
|
||||||
|
public List<ExceptionHandler> getHandlers() { |
||||||
|
return handlers; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,219 +1,227 @@ |
|||||||
/* |
/* |
||||||
* Fernflower - The Analytical Java Decompiler |
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
* http://www.reversed-java.com
|
|
||||||
* |
* |
||||||
* (C) 2008 - 2010, Stiver |
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
* |
* |
||||||
* This software is NEITHER public domain NOR free software |
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* as per GNU License. See license.txt for more details. |
|
||||||
* |
* |
||||||
* This software is distributed WITHOUT ANY WARRANTY; without |
* Unless required by applicable law or agreed to in writing, software |
||||||
* even the implied warranty of MERCHANTABILITY or FITNESS FOR |
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
* A PARTICULAR PURPOSE. |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
*/ |
*/ |
||||||
|
|
||||||
package org.jetbrains.java.decompiler.code; |
package org.jetbrains.java.decompiler.code; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
|
||||||
import java.io.IOException; |
|
||||||
import java.util.Collections; |
|
||||||
import java.util.Comparator; |
|
||||||
import java.util.List; |
|
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.interpreter.Util; |
import org.jetbrains.java.decompiler.code.interpreter.Util; |
||||||
import org.jetbrains.java.decompiler.main.DecompilerContext; |
import org.jetbrains.java.decompiler.main.DecompilerContext; |
||||||
import org.jetbrains.java.decompiler.struct.StructContext; |
import org.jetbrains.java.decompiler.struct.StructContext; |
||||||
import org.jetbrains.java.decompiler.util.InterpreterUtil; |
import org.jetbrains.java.decompiler.util.InterpreterUtil; |
||||||
import org.jetbrains.java.decompiler.util.VBStyleCollection; |
import org.jetbrains.java.decompiler.util.VBStyleCollection; |
||||||
|
|
||||||
|
import java.io.DataOutputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.Comparator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
public abstract class InstructionSequence { |
|
||||||
|
|
||||||
// *****************************************************************************
|
|
||||||
// private fields
|
|
||||||
// *****************************************************************************
|
|
||||||
|
|
||||||
protected VBStyleCollection<Instruction, Integer> collinstr = new VBStyleCollection<Instruction, Integer>(); |
|
||||||
|
|
||||||
protected int pointer = 0; |
|
||||||
|
|
||||||
protected ExceptionTable exceptionTable = new ExceptionTable(); |
|
||||||
|
|
||||||
// *****************************************************************************
|
|
||||||
// public methods
|
|
||||||
// *****************************************************************************
|
|
||||||
|
|
||||||
// to nbe overwritten
|
|
||||||
public InstructionSequence clone() {return null;} |
|
||||||
|
|
||||||
public void clear() { |
|
||||||
collinstr.clear(); |
|
||||||
pointer = 0; |
|
||||||
exceptionTable = new ExceptionTable(); |
|
||||||
} |
|
||||||
|
|
||||||
public void addInstruction(Instruction inst, int offset){ |
|
||||||
collinstr.addWithKey(inst, offset); |
|
||||||
} |
|
||||||
|
|
||||||
public void addInstruction(int index, Instruction inst, int offset){ |
|
||||||
collinstr.addWithKeyAndIndex(index, inst, offset); |
|
||||||
} |
|
||||||
|
|
||||||
public void addSequence(InstructionSequence seq){ |
|
||||||
for(int i=0;i<seq.length();i++) { |
|
||||||
addInstruction(seq.getInstr(i), -1); // TODO: any sensible value possible?
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void removeInstruction(int index) { |
|
||||||
collinstr.remove(index); |
|
||||||
} |
|
||||||
|
|
||||||
public Instruction getCurrentInstr() { |
|
||||||
return (Instruction)collinstr.get(pointer); |
|
||||||
} |
|
||||||
|
|
||||||
public Instruction getInstr(int index) { |
|
||||||
return (Instruction)collinstr.get(index); |
|
||||||
} |
|
||||||
|
|
||||||
public Instruction getLastInstr() { |
|
||||||
return (Instruction)collinstr.getLast(); |
|
||||||
} |
|
||||||
|
|
||||||
public int getCurrentOffset() { |
|
||||||
return ((Integer)collinstr.getKey(pointer)).intValue(); |
|
||||||
} |
|
||||||
|
|
||||||
public int getOffset(int index) { |
|
||||||
return ((Integer)collinstr.getKey(index)).intValue(); |
|
||||||
} |
|
||||||
|
|
||||||
public int getPointerByAbsOffset(int offset) { |
|
||||||
Integer absoffset = new Integer(offset); |
|
||||||
if(collinstr.containsKey(absoffset)) { |
|
||||||
return collinstr.getIndexByKey(absoffset); |
|
||||||
} else { |
|
||||||
return -1; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public int getPointerByRelOffset(int offset) { |
|
||||||
Integer absoffset = new Integer(((Integer)collinstr.getKey(pointer)).intValue()+offset); |
|
||||||
if(collinstr.containsKey(absoffset)) { |
|
||||||
return collinstr.getIndexByKey(absoffset); |
|
||||||
} else { |
|
||||||
return -1; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void setPointerByAbsOffset(int offset) { |
|
||||||
Integer absoffset = new Integer(((Integer)collinstr.getKey(pointer)).intValue()+offset); |
|
||||||
if(collinstr.containsKey(absoffset)) { |
|
||||||
pointer = collinstr.getIndexByKey(absoffset); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public int length() { |
|
||||||
return collinstr.size(); |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isEmpty() { |
|
||||||
return collinstr.isEmpty(); |
|
||||||
} |
|
||||||
|
|
||||||
public void addToPointer(int diff) { |
|
||||||
this.pointer += diff; |
|
||||||
} |
|
||||||
|
|
||||||
public String toString() { |
|
||||||
return toString(0); |
|
||||||
} |
|
||||||
|
|
||||||
public String toString(int indent) { |
|
||||||
|
|
||||||
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
|
||||||
|
|
||||||
StringBuffer buf = new StringBuffer(); |
|
||||||
|
|
||||||
for(int i=0;i<collinstr.size();i++) { |
|
||||||
buf.append(InterpreterUtil.getIndentString(indent)); |
|
||||||
buf.append(((Integer)collinstr.getKey(i)).intValue()); |
|
||||||
buf.append(": "); |
|
||||||
buf.append(((Instruction)collinstr.get(i)).toString()); |
|
||||||
buf.append(new_line_separator); |
|
||||||
} |
|
||||||
|
|
||||||
return buf.toString(); |
|
||||||
} |
|
||||||
|
|
||||||
public void writeCodeToStream(DataOutputStream out) throws IOException { |
|
||||||
|
|
||||||
for(int i=0;i<collinstr.size();i++) { |
|
||||||
((Instruction)collinstr.get(i)).writeToStream(out, ((Integer)collinstr.getKey(i)).intValue()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void writeExceptionsToStream(DataOutputStream out) throws IOException { |
|
||||||
|
|
||||||
List<ExceptionHandler> handlers = exceptionTable.getHandlers(); |
|
||||||
|
|
||||||
out.writeShort(handlers.size()); |
|
||||||
for(int i=0;i<handlers.size();i++) { |
|
||||||
((ExceptionHandler)handlers.get(i)).writeToStream(out); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void sortHandlers(final StructContext context) { |
|
||||||
|
|
||||||
Collections.sort(exceptionTable.getHandlers(), new Comparator<ExceptionHandler>() { |
|
||||||
|
|
||||||
public int compare(ExceptionHandler handler0, ExceptionHandler handler1) { |
|
||||||
|
|
||||||
if(handler0.to == handler1.to) { |
|
||||||
if(handler0.exceptionClass == null) { |
|
||||||
return 1; |
|
||||||
} else { |
|
||||||
if(handler1.exceptionClass == null) { |
|
||||||
return -1; |
|
||||||
} else if(handler0.exceptionClass.equals(handler1.exceptionClass)){ |
|
||||||
return (handler0.from > handler1.from)?-1:1; // invalid code
|
|
||||||
} else { |
|
||||||
if(Util.instanceOf(context, handler0.exceptionClass, handler1.exceptionClass)) { |
|
||||||
return -1; |
|
||||||
} else { |
|
||||||
return 1; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} else { |
|
||||||
return (handler0.to > handler1.to)?1:-1; |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
// *****************************************************************************
|
|
||||||
// getter and setter methods
|
|
||||||
// *****************************************************************************
|
|
||||||
|
|
||||||
public int getPointer() { |
|
||||||
return pointer; |
|
||||||
} |
|
||||||
|
|
||||||
public void setPointer(int pointer) { |
|
||||||
this.pointer = pointer; |
|
||||||
} |
|
||||||
|
|
||||||
public ExceptionTable getExceptionTable() { |
public abstract class InstructionSequence { |
||||||
return exceptionTable; |
|
||||||
} |
|
||||||
|
|
||||||
public void setExceptionTable(ExceptionTable exceptionTable) { |
// *****************************************************************************
|
||||||
this.exceptionTable = exceptionTable; |
// private fields
|
||||||
} |
// *****************************************************************************
|
||||||
|
|
||||||
|
protected VBStyleCollection<Instruction, Integer> collinstr = new VBStyleCollection<Instruction, Integer>(); |
||||||
|
|
||||||
|
protected int pointer = 0; |
||||||
|
|
||||||
|
protected ExceptionTable exceptionTable = new ExceptionTable(); |
||||||
|
|
||||||
|
// *****************************************************************************
|
||||||
|
// public methods
|
||||||
|
// *****************************************************************************
|
||||||
|
|
||||||
|
// to nbe overwritten
|
||||||
|
public InstructionSequence clone() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public void clear() { |
||||||
|
collinstr.clear(); |
||||||
|
pointer = 0; |
||||||
|
exceptionTable = new ExceptionTable(); |
||||||
|
} |
||||||
|
|
||||||
|
public void addInstruction(Instruction inst, int offset) { |
||||||
|
collinstr.addWithKey(inst, offset); |
||||||
|
} |
||||||
|
|
||||||
|
public void addInstruction(int index, Instruction inst, int offset) { |
||||||
|
collinstr.addWithKeyAndIndex(index, inst, offset); |
||||||
|
} |
||||||
|
|
||||||
|
public void addSequence(InstructionSequence seq) { |
||||||
|
for (int i = 0; i < seq.length(); i++) { |
||||||
|
addInstruction(seq.getInstr(i), -1); // TODO: any sensible value possible?
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void removeInstruction(int index) { |
||||||
|
collinstr.remove(index); |
||||||
|
} |
||||||
|
|
||||||
|
public Instruction getCurrentInstr() { |
||||||
|
return (Instruction)collinstr.get(pointer); |
||||||
|
} |
||||||
|
|
||||||
|
public Instruction getInstr(int index) { |
||||||
|
return (Instruction)collinstr.get(index); |
||||||
|
} |
||||||
|
|
||||||
|
public Instruction getLastInstr() { |
||||||
|
return (Instruction)collinstr.getLast(); |
||||||
|
} |
||||||
|
|
||||||
|
public int getCurrentOffset() { |
||||||
|
return ((Integer)collinstr.getKey(pointer)).intValue(); |
||||||
|
} |
||||||
|
|
||||||
|
public int getOffset(int index) { |
||||||
|
return ((Integer)collinstr.getKey(index)).intValue(); |
||||||
|
} |
||||||
|
|
||||||
|
public int getPointerByAbsOffset(int offset) { |
||||||
|
Integer absoffset = new Integer(offset); |
||||||
|
if (collinstr.containsKey(absoffset)) { |
||||||
|
return collinstr.getIndexByKey(absoffset); |
||||||
|
} |
||||||
|
else { |
||||||
|
return -1; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public int getPointerByRelOffset(int offset) { |
||||||
|
Integer absoffset = new Integer(((Integer)collinstr.getKey(pointer)).intValue() + offset); |
||||||
|
if (collinstr.containsKey(absoffset)) { |
||||||
|
return collinstr.getIndexByKey(absoffset); |
||||||
|
} |
||||||
|
else { |
||||||
|
return -1; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void setPointerByAbsOffset(int offset) { |
||||||
|
Integer absoffset = new Integer(((Integer)collinstr.getKey(pointer)).intValue() + offset); |
||||||
|
if (collinstr.containsKey(absoffset)) { |
||||||
|
pointer = collinstr.getIndexByKey(absoffset); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public int length() { |
||||||
|
return collinstr.size(); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isEmpty() { |
||||||
|
return collinstr.isEmpty(); |
||||||
|
} |
||||||
|
|
||||||
|
public void addToPointer(int diff) { |
||||||
|
this.pointer += diff; |
||||||
|
} |
||||||
|
|
||||||
|
public String toString() { |
||||||
|
return toString(0); |
||||||
|
} |
||||||
|
|
||||||
|
public String toString(int indent) { |
||||||
|
|
||||||
|
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
||||||
|
|
||||||
|
StringBuffer buf = new StringBuffer(); |
||||||
|
|
||||||
|
for (int i = 0; i < collinstr.size(); i++) { |
||||||
|
buf.append(InterpreterUtil.getIndentString(indent)); |
||||||
|
buf.append(((Integer)collinstr.getKey(i)).intValue()); |
||||||
|
buf.append(": "); |
||||||
|
buf.append(((Instruction)collinstr.get(i)).toString()); |
||||||
|
buf.append(new_line_separator); |
||||||
|
} |
||||||
|
|
||||||
|
return buf.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
public void writeCodeToStream(DataOutputStream out) throws IOException { |
||||||
|
|
||||||
|
for (int i = 0; i < collinstr.size(); i++) { |
||||||
|
((Instruction)collinstr.get(i)).writeToStream(out, ((Integer)collinstr.getKey(i)).intValue()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void writeExceptionsToStream(DataOutputStream out) throws IOException { |
||||||
|
|
||||||
|
List<ExceptionHandler> handlers = exceptionTable.getHandlers(); |
||||||
|
|
||||||
|
out.writeShort(handlers.size()); |
||||||
|
for (int i = 0; i < handlers.size(); i++) { |
||||||
|
((ExceptionHandler)handlers.get(i)).writeToStream(out); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void sortHandlers(final StructContext context) { |
||||||
|
|
||||||
|
Collections.sort(exceptionTable.getHandlers(), new Comparator<ExceptionHandler>() { |
||||||
|
|
||||||
|
public int compare(ExceptionHandler handler0, ExceptionHandler handler1) { |
||||||
|
|
||||||
|
if (handler0.to == handler1.to) { |
||||||
|
if (handler0.exceptionClass == null) { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
else { |
||||||
|
if (handler1.exceptionClass == null) { |
||||||
|
return -1; |
||||||
|
} |
||||||
|
else if (handler0.exceptionClass.equals(handler1.exceptionClass)) { |
||||||
|
return (handler0.from > handler1.from) ? -1 : 1; // invalid code
|
||||||
|
} |
||||||
|
else { |
||||||
|
if (Util.instanceOf(context, handler0.exceptionClass, handler1.exceptionClass)) { |
||||||
|
return -1; |
||||||
|
} |
||||||
|
else { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
else { |
||||||
|
return (handler0.to > handler1.to) ? 1 : -1; |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// *****************************************************************************
|
||||||
|
// getter and setter methods
|
||||||
|
// *****************************************************************************
|
||||||
|
|
||||||
|
public int getPointer() { |
||||||
|
return pointer; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPointer(int pointer) { |
||||||
|
this.pointer = pointer; |
||||||
|
} |
||||||
|
|
||||||
|
public ExceptionTable getExceptionTable() { |
||||||
|
return exceptionTable; |
||||||
|
} |
||||||
|
|
||||||
|
public void setExceptionTable(ExceptionTable exceptionTable) { |
||||||
|
this.exceptionTable = exceptionTable; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,39 +1,39 @@ |
|||||||
/* |
/* |
||||||
* Fernflower - The Analytical Java Decompiler |
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
* http://www.reversed-java.com
|
|
||||||
* |
* |
||||||
* (C) 2008 - 2010, Stiver |
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
* |
* |
||||||
* This software is NEITHER public domain NOR free software |
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* as per GNU License. See license.txt for more details. |
|
||||||
* |
* |
||||||
* This software is distributed WITHOUT ANY WARRANTY; without |
* Unless required by applicable law or agreed to in writing, software |
||||||
* even the implied warranty of MERCHANTABILITY or FITNESS FOR |
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
* A PARTICULAR PURPOSE. |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
*/ |
*/ |
||||||
|
|
||||||
package org.jetbrains.java.decompiler.code; |
package org.jetbrains.java.decompiler.code; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.util.VBStyleCollection; |
import org.jetbrains.java.decompiler.util.VBStyleCollection; |
||||||
|
|
||||||
public class SimpleInstructionSequence extends InstructionSequence { |
public class SimpleInstructionSequence extends InstructionSequence { |
||||||
|
|
||||||
public SimpleInstructionSequence() {} |
public SimpleInstructionSequence() { |
||||||
|
} |
||||||
public SimpleInstructionSequence(VBStyleCollection<Instruction, Integer> collinstr) { |
|
||||||
this.collinstr = collinstr; |
|
||||||
} |
|
||||||
|
|
||||||
public SimpleInstructionSequence clone() { |
|
||||||
SimpleInstructionSequence newseq = new SimpleInstructionSequence(collinstr.clone()); |
|
||||||
newseq.setPointer(this.getPointer()); |
|
||||||
|
|
||||||
return newseq; |
public SimpleInstructionSequence(VBStyleCollection<Instruction, Integer> collinstr) { |
||||||
} |
this.collinstr = collinstr; |
||||||
|
} |
||||||
|
|
||||||
public void removeInstruction(int index) { |
public SimpleInstructionSequence clone() { |
||||||
collinstr.remove(index); |
SimpleInstructionSequence newseq = new SimpleInstructionSequence(collinstr.clone()); |
||||||
} |
newseq.setPointer(this.getPointer()); |
||||||
|
|
||||||
|
return newseq; |
||||||
|
} |
||||||
|
|
||||||
|
public void removeInstruction(int index) { |
||||||
|
collinstr.remove(index); |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,265 +1,266 @@ |
|||||||
/* |
/* |
||||||
* Fernflower - The Analytical Java Decompiler |
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
* http://www.reversed-java.com
|
|
||||||
* |
* |
||||||
* (C) 2008 - 2010, Stiver |
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
* |
* |
||||||
* This software is NEITHER public domain NOR free software |
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* as per GNU License. See license.txt for more details. |
|
||||||
* |
* |
||||||
* This software is distributed WITHOUT ANY WARRANTY; without |
* Unless required by applicable law or agreed to in writing, software |
||||||
* even the implied warranty of MERCHANTABILITY or FITNESS FOR |
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
* A PARTICULAR PURPOSE. |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
*/ |
*/ |
||||||
|
|
||||||
package org.jetbrains.java.decompiler.code.cfg; |
package org.jetbrains.java.decompiler.code.cfg; |
||||||
|
|
||||||
import java.util.ArrayList; |
|
||||||
import java.util.List; |
|
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
import org.jetbrains.java.decompiler.code.InstructionSequence; |
import org.jetbrains.java.decompiler.code.InstructionSequence; |
||||||
import org.jetbrains.java.decompiler.code.SimpleInstructionSequence; |
import org.jetbrains.java.decompiler.code.SimpleInstructionSequence; |
||||||
import org.jetbrains.java.decompiler.main.DecompilerContext; |
import org.jetbrains.java.decompiler.main.DecompilerContext; |
||||||
import org.jetbrains.java.decompiler.modules.decompiler.decompose.IGraphNode; |
import org.jetbrains.java.decompiler.modules.decompiler.decompose.IGraphNode; |
||||||
|
|
||||||
public class BasicBlock implements IGraphNode { |
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
// *****************************************************************************
|
|
||||||
// public fields
|
|
||||||
// *****************************************************************************
|
|
||||||
|
|
||||||
public int id = 0; |
|
||||||
|
|
||||||
public int mark = 0; |
|
||||||
|
|
||||||
// *****************************************************************************
|
|
||||||
// private fields
|
|
||||||
// *****************************************************************************
|
|
||||||
|
|
||||||
private InstructionSequence seq = new SimpleInstructionSequence(); |
|
||||||
|
|
||||||
private List<BasicBlock> preds = new ArrayList<BasicBlock>(); |
|
||||||
|
|
||||||
private List<BasicBlock> succs = new ArrayList<BasicBlock>(); |
|
||||||
|
|
||||||
private List<Integer> instrOldOffsets = new ArrayList<Integer>(); |
|
||||||
|
|
||||||
private List<BasicBlock> predExceptions = new ArrayList<BasicBlock>(); |
|
||||||
|
|
||||||
private List<BasicBlock> succExceptions = new ArrayList<BasicBlock>(); |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public BasicBlock() {} |
|
||||||
|
|
||||||
public BasicBlock(int id) { |
|
||||||
this.id = id; |
|
||||||
} |
|
||||||
|
|
||||||
// *****************************************************************************
|
|
||||||
// public methods
|
|
||||||
// *****************************************************************************
|
|
||||||
|
|
||||||
public Object clone() { |
|
||||||
|
|
||||||
BasicBlock block = new BasicBlock(); |
|
||||||
block.id = id; |
|
||||||
block.setSeq(seq.clone()); |
|
||||||
block.setInstrOldOffsets(new ArrayList<Integer>(instrOldOffsets)); |
|
||||||
|
|
||||||
return block; |
public class BasicBlock implements IGraphNode { |
||||||
} |
|
||||||
|
|
||||||
public void free() { |
// *****************************************************************************
|
||||||
preds.clear(); |
// public fields
|
||||||
succs.clear(); |
// *****************************************************************************
|
||||||
instrOldOffsets.clear(); |
|
||||||
succExceptions.clear(); |
|
||||||
seq = new SimpleInstructionSequence(); |
|
||||||
} |
|
||||||
|
|
||||||
public Instruction getInstruction(int index) { |
public int id = 0; |
||||||
return seq.getInstr(index); |
|
||||||
} |
|
||||||
|
|
||||||
public Instruction getLastInstruction() { |
public int mark = 0; |
||||||
if(seq.isEmpty()) { |
|
||||||
return null; |
|
||||||
} else { |
|
||||||
return seq.getLastInstr(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public int size() { |
// *****************************************************************************
|
||||||
return seq.length(); |
// private fields
|
||||||
} |
// *****************************************************************************
|
||||||
|
|
||||||
public void addPredecessor(BasicBlock block) { |
private InstructionSequence seq = new SimpleInstructionSequence(); |
||||||
preds.add(block); |
|
||||||
} |
|
||||||
|
|
||||||
public void removePredecessor(BasicBlock block) { |
private List<BasicBlock> preds = new ArrayList<BasicBlock>(); |
||||||
while(preds.remove(block)); |
|
||||||
} |
|
||||||
|
|
||||||
public void addSuccessor(BasicBlock block) { |
private List<BasicBlock> succs = new ArrayList<BasicBlock>(); |
||||||
succs.add(block); |
|
||||||
block.addPredecessor(this); |
|
||||||
} |
|
||||||
|
|
||||||
public void removeSuccessor(BasicBlock block) { |
|
||||||
while(succs.remove(block)); |
|
||||||
block.removePredecessor(this); |
|
||||||
} |
|
||||||
|
|
||||||
// FIXME: unify block comparisons: id or direkt equality
|
private List<Integer> instrOldOffsets = new ArrayList<Integer>(); |
||||||
public void replaceSuccessor(BasicBlock oldBlock, BasicBlock newBlock) { |
|
||||||
for(int i=0;i<succs.size();i++) { |
|
||||||
if(succs.get(i).id == oldBlock.id) { |
|
||||||
succs.set(i, newBlock); |
|
||||||
oldBlock.removePredecessor(this); |
|
||||||
newBlock.addPredecessor(this); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
for(int i=0;i<succExceptions.size();i++) { |
private List<BasicBlock> predExceptions = new ArrayList<BasicBlock>(); |
||||||
if(succExceptions.get(i).id == oldBlock.id) { |
|
||||||
succExceptions.set(i, newBlock); |
|
||||||
oldBlock.removePredecessorException(this); |
|
||||||
newBlock.addPredecessorException(this); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void addPredecessorException(BasicBlock block) { |
|
||||||
predExceptions.add(block); |
|
||||||
} |
|
||||||
|
|
||||||
public void removePredecessorException(BasicBlock block) { |
|
||||||
while(predExceptions.remove(block)); |
|
||||||
} |
|
||||||
|
|
||||||
public void addSuccessorException(BasicBlock block) { |
|
||||||
if(!succExceptions.contains(block)) { |
|
||||||
succExceptions.add(block); |
|
||||||
block.addPredecessorException(this); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void removeSuccessorException(BasicBlock block) { |
|
||||||
while(succExceptions.remove(block)); |
|
||||||
block.removePredecessorException(this); |
|
||||||
} |
|
||||||
|
|
||||||
public String toString() { |
|
||||||
return toString(0); |
|
||||||
} |
|
||||||
|
|
||||||
public String toString(int indent) { |
|
||||||
|
|
||||||
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
|
||||||
|
|
||||||
return id+":" + new_line_separator +seq.toString(indent); |
|
||||||
} |
|
||||||
|
|
||||||
public String toStringOldIndices() { |
|
||||||
|
|
||||||
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
|
||||||
|
|
||||||
StringBuffer buf = new StringBuffer(); |
|
||||||
|
|
||||||
for(int i=0;i<seq.length();i++) { |
|
||||||
if(i<instrOldOffsets.size()) { |
|
||||||
buf.append(instrOldOffsets.get(i)); |
|
||||||
} else { |
|
||||||
buf.append("-1"); |
|
||||||
} |
|
||||||
buf.append(": "); |
|
||||||
buf.append(seq.getInstr(i).toString()); |
|
||||||
buf.append(new_line_separator); |
|
||||||
} |
|
||||||
|
|
||||||
return buf.toString(); |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isSuccessor(BasicBlock block) { |
|
||||||
for(BasicBlock succ : succs) { |
|
||||||
if(succ.id == block.id) { |
|
||||||
return true; |
|
||||||
} |
|
||||||
} |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isPredecessor(BasicBlock block) { |
|
||||||
for(int i=0;i<preds.size();i++) { |
|
||||||
if(preds.get(i).id == block.id) { |
|
||||||
return true; |
|
||||||
} |
|
||||||
} |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
// *****************************************************************************
|
|
||||||
// getter and setter methods
|
|
||||||
// *****************************************************************************
|
|
||||||
|
|
||||||
public List<Integer> getInstrOldOffsets() { |
|
||||||
return instrOldOffsets; |
|
||||||
} |
|
||||||
|
|
||||||
public void setInstrOldOffsets(List<Integer> instrInds) { |
|
||||||
this.instrOldOffsets = instrInds; |
|
||||||
} |
|
||||||
|
|
||||||
public List<? extends IGraphNode> getPredecessors() { |
|
||||||
List<BasicBlock> lst = new ArrayList<BasicBlock>(preds); |
|
||||||
lst.addAll(predExceptions); |
|
||||||
return lst; |
|
||||||
} |
|
||||||
|
|
||||||
public List<BasicBlock> getPreds() { |
|
||||||
return preds; |
|
||||||
} |
|
||||||
|
|
||||||
public void setPreds(List<BasicBlock> preds) { |
|
||||||
this.preds = preds; |
|
||||||
} |
|
||||||
|
|
||||||
public InstructionSequence getSeq() { |
|
||||||
return seq; |
|
||||||
} |
|
||||||
|
|
||||||
public void setSeq(InstructionSequence seq) { |
private List<BasicBlock> succExceptions = new ArrayList<BasicBlock>(); |
||||||
this.seq = seq; |
|
||||||
} |
|
||||||
|
|
||||||
public List<BasicBlock> getSuccs() { |
|
||||||
return succs; |
|
||||||
} |
|
||||||
|
|
||||||
public void setSuccs(List<BasicBlock> succs) { |
public BasicBlock() { |
||||||
this.succs = succs; |
} |
||||||
} |
|
||||||
|
|
||||||
|
public BasicBlock(int id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
|
||||||
public List<BasicBlock> getSuccExceptions() { |
// *****************************************************************************
|
||||||
return succExceptions; |
// public methods
|
||||||
} |
// *****************************************************************************
|
||||||
|
|
||||||
|
public Object clone() { |
||||||
|
|
||||||
public void setSuccExceptions(List<BasicBlock> succExceptions) { |
BasicBlock block = new BasicBlock(); |
||||||
this.succExceptions = succExceptions; |
block.id = id; |
||||||
} |
block.setSeq(seq.clone()); |
||||||
|
block.setInstrOldOffsets(new ArrayList<Integer>(instrOldOffsets)); |
||||||
|
|
||||||
public List<BasicBlock> getPredExceptions() { |
return block; |
||||||
return predExceptions; |
} |
||||||
} |
|
||||||
|
|
||||||
public void setPredExceptions(List<BasicBlock> predExceptions) { |
public void free() { |
||||||
this.predExceptions = predExceptions; |
preds.clear(); |
||||||
} |
succs.clear(); |
||||||
|
instrOldOffsets.clear(); |
||||||
|
succExceptions.clear(); |
||||||
|
seq = new SimpleInstructionSequence(); |
||||||
|
} |
||||||
|
|
||||||
|
public Instruction getInstruction(int index) { |
||||||
|
return seq.getInstr(index); |
||||||
|
} |
||||||
|
|
||||||
|
public Instruction getLastInstruction() { |
||||||
|
if (seq.isEmpty()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
else { |
||||||
|
return seq.getLastInstr(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public int size() { |
||||||
|
return seq.length(); |
||||||
|
} |
||||||
|
|
||||||
|
public void addPredecessor(BasicBlock block) { |
||||||
|
preds.add(block); |
||||||
|
} |
||||||
|
|
||||||
|
public void removePredecessor(BasicBlock block) { |
||||||
|
while (preds.remove(block)) ; |
||||||
|
} |
||||||
|
|
||||||
|
public void addSuccessor(BasicBlock block) { |
||||||
|
succs.add(block); |
||||||
|
block.addPredecessor(this); |
||||||
|
} |
||||||
|
|
||||||
|
public void removeSuccessor(BasicBlock block) { |
||||||
|
while (succs.remove(block)) ; |
||||||
|
block.removePredecessor(this); |
||||||
|
} |
||||||
|
|
||||||
|
// FIXME: unify block comparisons: id or direkt equality
|
||||||
|
public void replaceSuccessor(BasicBlock oldBlock, BasicBlock newBlock) { |
||||||
|
for (int i = 0; i < succs.size(); i++) { |
||||||
|
if (succs.get(i).id == oldBlock.id) { |
||||||
|
succs.set(i, newBlock); |
||||||
|
oldBlock.removePredecessor(this); |
||||||
|
newBlock.addPredecessor(this); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
for (int i = 0; i < succExceptions.size(); i++) { |
||||||
|
if (succExceptions.get(i).id == oldBlock.id) { |
||||||
|
succExceptions.set(i, newBlock); |
||||||
|
oldBlock.removePredecessorException(this); |
||||||
|
newBlock.addPredecessorException(this); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void addPredecessorException(BasicBlock block) { |
||||||
|
predExceptions.add(block); |
||||||
|
} |
||||||
|
|
||||||
|
public void removePredecessorException(BasicBlock block) { |
||||||
|
while (predExceptions.remove(block)) ; |
||||||
|
} |
||||||
|
|
||||||
|
public void addSuccessorException(BasicBlock block) { |
||||||
|
if (!succExceptions.contains(block)) { |
||||||
|
succExceptions.add(block); |
||||||
|
block.addPredecessorException(this); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void removeSuccessorException(BasicBlock block) { |
||||||
|
while (succExceptions.remove(block)) ; |
||||||
|
block.removePredecessorException(this); |
||||||
|
} |
||||||
|
|
||||||
|
public String toString() { |
||||||
|
return toString(0); |
||||||
|
} |
||||||
|
|
||||||
|
public String toString(int indent) { |
||||||
|
|
||||||
|
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
||||||
|
|
||||||
|
return id + ":" + new_line_separator + seq.toString(indent); |
||||||
|
} |
||||||
|
|
||||||
|
public String toStringOldIndices() { |
||||||
|
|
||||||
|
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
||||||
|
|
||||||
|
StringBuffer buf = new StringBuffer(); |
||||||
|
|
||||||
|
for (int i = 0; i < seq.length(); i++) { |
||||||
|
if (i < instrOldOffsets.size()) { |
||||||
|
buf.append(instrOldOffsets.get(i)); |
||||||
|
} |
||||||
|
else { |
||||||
|
buf.append("-1"); |
||||||
|
} |
||||||
|
buf.append(": "); |
||||||
|
buf.append(seq.getInstr(i).toString()); |
||||||
|
buf.append(new_line_separator); |
||||||
|
} |
||||||
|
|
||||||
|
return buf.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isSuccessor(BasicBlock block) { |
||||||
|
for (BasicBlock succ : succs) { |
||||||
|
if (succ.id == block.id) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isPredecessor(BasicBlock block) { |
||||||
|
for (int i = 0; i < preds.size(); i++) { |
||||||
|
if (preds.get(i).id == block.id) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
// *****************************************************************************
|
||||||
|
// getter and setter methods
|
||||||
|
// *****************************************************************************
|
||||||
|
|
||||||
|
public List<Integer> getInstrOldOffsets() { |
||||||
|
return instrOldOffsets; |
||||||
|
} |
||||||
|
|
||||||
|
public void setInstrOldOffsets(List<Integer> instrInds) { |
||||||
|
this.instrOldOffsets = instrInds; |
||||||
|
} |
||||||
|
|
||||||
|
public List<? extends IGraphNode> getPredecessors() { |
||||||
|
List<BasicBlock> lst = new ArrayList<BasicBlock>(preds); |
||||||
|
lst.addAll(predExceptions); |
||||||
|
return lst; |
||||||
|
} |
||||||
|
|
||||||
|
public List<BasicBlock> getPreds() { |
||||||
|
return preds; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPreds(List<BasicBlock> preds) { |
||||||
|
this.preds = preds; |
||||||
|
} |
||||||
|
|
||||||
|
public InstructionSequence getSeq() { |
||||||
|
return seq; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSeq(InstructionSequence seq) { |
||||||
|
this.seq = seq; |
||||||
|
} |
||||||
|
|
||||||
|
public List<BasicBlock> getSuccs() { |
||||||
|
return succs; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSuccs(List<BasicBlock> succs) { |
||||||
|
this.succs = succs; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public List<BasicBlock> getSuccExceptions() { |
||||||
|
return succExceptions; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setSuccExceptions(List<BasicBlock> succExceptions) { |
||||||
|
this.succExceptions = succExceptions; |
||||||
|
} |
||||||
|
|
||||||
|
public List<BasicBlock> getPredExceptions() { |
||||||
|
return predExceptions; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPredExceptions(List<BasicBlock> predExceptions) { |
||||||
|
this.predExceptions = predExceptions; |
||||||
|
} |
||||||
} |
} |
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,128 +1,129 @@ |
|||||||
/* |
/* |
||||||
* Fernflower - The Analytical Java Decompiler |
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
* http://www.reversed-java.com
|
|
||||||
* |
* |
||||||
* (C) 2008 - 2010, Stiver |
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
* |
* |
||||||
* This software is NEITHER public domain NOR free software |
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
* as per GNU License. See license.txt for more details. |
|
||||||
* |
* |
||||||
* This software is distributed WITHOUT ANY WARRANTY; without |
* Unless required by applicable law or agreed to in writing, software |
||||||
* even the implied warranty of MERCHANTABILITY or FITNESS FOR |
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
* A PARTICULAR PURPOSE. |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
*/ |
*/ |
||||||
|
|
||||||
package org.jetbrains.java.decompiler.code.cfg; |
package org.jetbrains.java.decompiler.code.cfg; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.main.DecompilerContext; |
||||||
|
|
||||||
import java.util.ArrayList; |
import java.util.ArrayList; |
||||||
import java.util.HashSet; |
import java.util.HashSet; |
||||||
import java.util.List; |
import java.util.List; |
||||||
import java.util.Set; |
import java.util.Set; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.main.DecompilerContext; |
|
||||||
|
|
||||||
public class ExceptionRangeCFG { |
public class ExceptionRangeCFG { |
||||||
|
|
||||||
private List<BasicBlock> protectedRange = new ArrayList<BasicBlock>(); // FIXME: replace with set
|
private List<BasicBlock> protectedRange = new ArrayList<BasicBlock>(); // FIXME: replace with set
|
||||||
|
|
||||||
private BasicBlock handler; |
|
||||||
|
|
||||||
private List<String> exceptionTypes; |
private BasicBlock handler; |
||||||
|
|
||||||
public ExceptionRangeCFG(List<BasicBlock> protectedRange, BasicBlock handler, List<String> exceptionType) { |
private List<String> exceptionTypes; |
||||||
this.protectedRange = protectedRange; |
|
||||||
this.handler = handler; |
|
||||||
|
|
||||||
if(exceptionType != null) { |
public ExceptionRangeCFG(List<BasicBlock> protectedRange, BasicBlock handler, List<String> exceptionType) { |
||||||
this.exceptionTypes = new ArrayList<String>(exceptionType); |
this.protectedRange = protectedRange; |
||||||
} |
this.handler = handler; |
||||||
} |
|
||||||
|
|
||||||
public boolean isCircular() { |
if (exceptionType != null) { |
||||||
return protectedRange.contains(handler); |
this.exceptionTypes = new ArrayList<String>(exceptionType); |
||||||
} |
} |
||||||
|
} |
||||||
|
|
||||||
public String toString() { |
public boolean isCircular() { |
||||||
|
return protectedRange.contains(handler); |
||||||
|
} |
||||||
|
|
||||||
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
public String toString() { |
||||||
|
|
||||||
StringBuffer buf = new StringBuffer(); |
String new_line_separator = DecompilerContext.getNewLineSeparator(); |
||||||
|
|
||||||
buf.append("exceptionType:"); |
StringBuffer buf = new StringBuffer(); |
||||||
for(String exception_type : exceptionTypes) { |
|
||||||
buf.append(" "+exception_type); |
|
||||||
} |
|
||||||
buf.append(new_line_separator); |
|
||||||
|
|
||||||
buf.append("handler: "+handler.id+new_line_separator); |
buf.append("exceptionType:"); |
||||||
buf.append("range: "); |
for (String exception_type : exceptionTypes) { |
||||||
for(int i=0;i<protectedRange.size();i++) { |
buf.append(" " + exception_type); |
||||||
buf.append(protectedRange.get(i).id+" "); |
} |
||||||
} |
buf.append(new_line_separator); |
||||||
buf.append(new_line_separator); |
|
||||||
|
|
||||||
return buf.toString(); |
buf.append("handler: " + handler.id + new_line_separator); |
||||||
} |
buf.append("range: "); |
||||||
|
for (int i = 0; i < protectedRange.size(); i++) { |
||||||
|
buf.append(protectedRange.get(i).id + " "); |
||||||
|
} |
||||||
|
buf.append(new_line_separator); |
||||||
|
|
||||||
public BasicBlock getHandler() { |
return buf.toString(); |
||||||
return handler; |
} |
||||||
} |
|
||||||
|
|
||||||
public void setHandler(BasicBlock handler) { |
public BasicBlock getHandler() { |
||||||
this.handler = handler; |
return handler; |
||||||
} |
} |
||||||
|
|
||||||
public List<BasicBlock> getProtectedRange() { |
public void setHandler(BasicBlock handler) { |
||||||
return protectedRange; |
this.handler = handler; |
||||||
} |
} |
||||||
|
|
||||||
public void setProtectedRange(List<BasicBlock> protectedRange) { |
public List<BasicBlock> getProtectedRange() { |
||||||
this.protectedRange = protectedRange; |
return protectedRange; |
||||||
} |
} |
||||||
|
|
||||||
public List<String> getExceptionTypes() { |
public void setProtectedRange(List<BasicBlock> protectedRange) { |
||||||
return this.exceptionTypes; |
this.protectedRange = protectedRange; |
||||||
} |
} |
||||||
|
|
||||||
public void addExceptionType(String exceptionType) { |
public List<String> getExceptionTypes() { |
||||||
|
return this.exceptionTypes; |
||||||
|
} |
||||||
|
|
||||||
if(this.exceptionTypes == null) { |
public void addExceptionType(String exceptionType) { |
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
if(exceptionType == null) { |
if (this.exceptionTypes == null) { |
||||||
this.exceptionTypes = null; |
return; |
||||||
} else { |
} |
||||||
this.exceptionTypes.add(exceptionType); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public String getUniqueExceptionsString() { |
if (exceptionType == null) { |
||||||
|
this.exceptionTypes = null; |
||||||
|
} |
||||||
|
else { |
||||||
|
this.exceptionTypes.add(exceptionType); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
if(exceptionTypes == null) { |
public String getUniqueExceptionsString() { |
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
Set<String> setExceptionStrings = new HashSet<String>(); |
if (exceptionTypes == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
for(String exceptionType : exceptionTypes) { // normalize order
|
Set<String> setExceptionStrings = new HashSet<String>(); |
||||||
setExceptionStrings.add(exceptionType); |
|
||||||
} |
|
||||||
|
|
||||||
String ret = ""; |
for (String exceptionType : exceptionTypes) { // normalize order
|
||||||
for(String exception : setExceptionStrings) { |
setExceptionStrings.add(exceptionType); |
||||||
if(!ret.isEmpty()) { |
} |
||||||
ret += ":"; |
|
||||||
} |
|
||||||
ret += exception; |
|
||||||
} |
|
||||||
|
|
||||||
return ret; |
String ret = ""; |
||||||
} |
for (String exception : setExceptionStrings) { |
||||||
|
if (!ret.isEmpty()) { |
||||||
|
ret += ":"; |
||||||
|
} |
||||||
|
ret += exception; |
||||||
|
} |
||||||
|
|
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
// public void setExceptionType(String exceptionType) {
|
|
||||||
// this.exceptionType = exceptionType;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
// public void setExceptionType(String exceptionType) {
|
||||||
|
// this.exceptionType = exceptionType;
|
||||||
|
// }
|
||||||
} |
} |
||||||
|
@ -1,43 +1,60 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class ALOAD extends Instruction { |
public class ALOAD extends Instruction { |
||||||
|
|
||||||
private static int[] opcodes = new int[] {opc_aload_0,opc_aload_1,opc_aload_2,opc_aload_3}; |
private static int[] opcodes = new int[]{opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3}; |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
int index = getOperand(0); |
int index = getOperand(0); |
||||||
if(index>3) { |
if (index > 3) { |
||||||
if(wide) { |
if (wide) { |
||||||
out.writeByte(opc_wide); |
out.writeByte(opc_wide); |
||||||
} |
} |
||||||
out.writeByte(opc_aload); |
out.writeByte(opc_aload); |
||||||
if(wide) { |
if (wide) { |
||||||
out.writeShort(index); |
out.writeShort(index); |
||||||
} else { |
} |
||||||
out.writeByte(index); |
else { |
||||||
} |
out.writeByte(index); |
||||||
} else { |
} |
||||||
out.writeByte(opcodes[index]); |
} |
||||||
} |
else { |
||||||
} |
out.writeByte(opcodes[index]); |
||||||
|
} |
||||||
public int length() { |
} |
||||||
int index = getOperand(0); |
|
||||||
if(index>3) { |
public int length() { |
||||||
if(wide) { |
int index = getOperand(0); |
||||||
return 4; |
if (index > 3) { |
||||||
} else { |
if (wide) { |
||||||
return 2; |
return 4; |
||||||
} |
} |
||||||
} else { |
else { |
||||||
return 1; |
return 2; |
||||||
} |
} |
||||||
} |
} |
||||||
|
else { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class ANEWARRAY extends Instruction { |
public class ANEWARRAY extends Instruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_anewarray); |
out.writeByte(opc_anewarray); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,42 +1,60 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class ASTORE extends Instruction { |
public class ASTORE extends Instruction { |
||||||
|
|
||||||
private static int[] opcodes = new int[] {opc_astore_0,opc_astore_1,opc_astore_2,opc_astore_3}; |
private static int[] opcodes = new int[]{opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3}; |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
|
||||||
int index = getOperand(0); |
|
||||||
if(index>3) { |
|
||||||
if(wide) { |
|
||||||
out.writeByte(opc_wide); |
|
||||||
} |
|
||||||
out.writeByte(opc_astore); |
|
||||||
if(wide) { |
|
||||||
out.writeShort(index); |
|
||||||
} else { |
|
||||||
out.writeByte(index); |
|
||||||
} |
|
||||||
} else { |
|
||||||
out.writeByte(opcodes[index]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public int length() { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
int index = getOperand(0); |
int index = getOperand(0); |
||||||
if(index>3) { |
if (index > 3) { |
||||||
if(wide) { |
if (wide) { |
||||||
return 4; |
out.writeByte(opc_wide); |
||||||
} else { |
} |
||||||
return 2; |
out.writeByte(opc_astore); |
||||||
} |
if (wide) { |
||||||
} else { |
out.writeShort(index); |
||||||
return 1; |
} |
||||||
} |
else { |
||||||
} |
out.writeByte(index); |
||||||
|
} |
||||||
|
} |
||||||
|
else { |
||||||
|
out.writeByte(opcodes[index]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public int length() { |
||||||
|
int index = getOperand(0); |
||||||
|
if (index > 3) { |
||||||
|
if (wide) { |
||||||
|
return 4; |
||||||
|
} |
||||||
|
else { |
||||||
|
return 2; |
||||||
|
} |
||||||
|
} |
||||||
|
else { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,30 +1,48 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class BIPUSH extends Instruction { |
public class BIPUSH extends Instruction { |
||||||
|
|
||||||
private static int[] opcodes = new int[] {opc_iconst_m1,opc_iconst_0,opc_iconst_1,opc_iconst_2,opc_iconst_3,opc_iconst_4,opc_iconst_5}; |
private static int[] opcodes = |
||||||
|
new int[]{opc_iconst_m1, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5}; |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
int value = getOperand(0); |
int value = getOperand(0); |
||||||
if(value<-1 || value > 5) { |
if (value < -1 || value > 5) { |
||||||
out.writeByte(opc_bipush); |
out.writeByte(opc_bipush); |
||||||
out.writeByte(value); |
out.writeByte(value); |
||||||
} else { |
} |
||||||
out.writeByte(opcodes[value+1]); |
else { |
||||||
} |
out.writeByte(opcodes[value + 1]); |
||||||
} |
} |
||||||
|
} |
||||||
|
|
||||||
public int length() { |
public int length() { |
||||||
int value = getOperand(0); |
int value = getOperand(0); |
||||||
if(value<-1 || value > 5) { |
if (value < -1 || value > 5) { |
||||||
return 2; |
return 2; |
||||||
} else { |
} |
||||||
return 1; |
else { |
||||||
} |
return 1; |
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,20 +1,34 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class CHECKCAST extends Instruction { |
public class CHECKCAST extends Instruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_checkcast); |
out.writeByte(opc_checkcast); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
|
@ -1,42 +1,60 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class DLOAD extends Instruction { |
public class DLOAD extends Instruction { |
||||||
|
|
||||||
private static int[] opcodes = new int[] {opc_dload_0,opc_dload_1,opc_dload_2,opc_dload_3}; |
private static int[] opcodes = new int[]{opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3}; |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
|
||||||
int index = getOperand(0); |
|
||||||
if(index>3) { |
|
||||||
if(wide) { |
|
||||||
out.writeByte(opc_wide); |
|
||||||
} |
|
||||||
out.writeByte(opc_dload); |
|
||||||
if(wide) { |
|
||||||
out.writeShort(index); |
|
||||||
} else { |
|
||||||
out.writeByte(index); |
|
||||||
} |
|
||||||
} else { |
|
||||||
out.writeByte(opcodes[index]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public int length() { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
int index = getOperand(0); |
int index = getOperand(0); |
||||||
if(index>3) { |
if (index > 3) { |
||||||
if(wide) { |
if (wide) { |
||||||
return 4; |
out.writeByte(opc_wide); |
||||||
} else { |
} |
||||||
return 2; |
out.writeByte(opc_dload); |
||||||
} |
if (wide) { |
||||||
} else { |
out.writeShort(index); |
||||||
return 1; |
} |
||||||
} |
else { |
||||||
} |
out.writeByte(index); |
||||||
|
} |
||||||
|
} |
||||||
|
else { |
||||||
|
out.writeByte(opcodes[index]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public int length() { |
||||||
|
int index = getOperand(0); |
||||||
|
if (index > 3) { |
||||||
|
if (wide) { |
||||||
|
return 4; |
||||||
|
} |
||||||
|
else { |
||||||
|
return 2; |
||||||
|
} |
||||||
|
} |
||||||
|
else { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,41 +1,60 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class DSTORE extends Instruction { |
public class DSTORE extends Instruction { |
||||||
|
|
||||||
private static int[] opcodes = new int[] {opc_dstore_0,opc_dstore_1,opc_dstore_2,opc_dstore_3}; |
private static int[] opcodes = new int[]{opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3}; |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
int index = getOperand(0); |
int index = getOperand(0); |
||||||
if(index>3) { |
if (index > 3) { |
||||||
if(wide) { |
if (wide) { |
||||||
out.writeByte(opc_wide); |
out.writeByte(opc_wide); |
||||||
} |
} |
||||||
out.writeByte(opc_dstore); |
out.writeByte(opc_dstore); |
||||||
if(wide) { |
if (wide) { |
||||||
out.writeShort(index); |
out.writeShort(index); |
||||||
} else { |
} |
||||||
out.writeByte(index); |
else { |
||||||
} |
out.writeByte(index); |
||||||
} else { |
} |
||||||
out.writeByte(opcodes[index]); |
} |
||||||
} |
else { |
||||||
} |
out.writeByte(opcodes[index]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
public int length() { |
public int length() { |
||||||
int index = getOperand(0); |
int index = getOperand(0); |
||||||
if(index>3) { |
if (index > 3) { |
||||||
if(wide) { |
if (wide) { |
||||||
return 4; |
return 4; |
||||||
} else { |
} |
||||||
return 2; |
else { |
||||||
} |
return 2; |
||||||
} else { |
} |
||||||
return 1; |
} |
||||||
} |
else { |
||||||
} |
return 1; |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,42 +1,60 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class FLOAD extends Instruction { |
public class FLOAD extends Instruction { |
||||||
|
|
||||||
private static int[] opcodes = new int[] {opc_fload_0,opc_fload_1,opc_fload_2,opc_fload_3}; |
private static int[] opcodes = new int[]{opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3}; |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
|
||||||
int index = getOperand(0); |
|
||||||
if(index>3) { |
|
||||||
if(wide) { |
|
||||||
out.writeByte(opc_wide); |
|
||||||
} |
|
||||||
out.writeByte(opc_fload); |
|
||||||
if(wide) { |
|
||||||
out.writeShort(index); |
|
||||||
} else { |
|
||||||
out.writeByte(index); |
|
||||||
} |
|
||||||
} else { |
|
||||||
out.writeByte(opcodes[index]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public int length() { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
int index = getOperand(0); |
int index = getOperand(0); |
||||||
if(index>3) { |
if (index > 3) { |
||||||
if(wide) { |
if (wide) { |
||||||
return 4; |
out.writeByte(opc_wide); |
||||||
} else { |
} |
||||||
return 2; |
out.writeByte(opc_fload); |
||||||
} |
if (wide) { |
||||||
} else { |
out.writeShort(index); |
||||||
return 1; |
} |
||||||
} |
else { |
||||||
} |
out.writeByte(index); |
||||||
|
} |
||||||
|
} |
||||||
|
else { |
||||||
|
out.writeByte(opcodes[index]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public int length() { |
||||||
|
int index = getOperand(0); |
||||||
|
if (index > 3) { |
||||||
|
if (wide) { |
||||||
|
return 4; |
||||||
|
} |
||||||
|
else { |
||||||
|
return 2; |
||||||
|
} |
||||||
|
} |
||||||
|
else { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,41 +1,60 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class FSTORE extends Instruction { |
public class FSTORE extends Instruction { |
||||||
|
|
||||||
private static int[] opcodes = new int[] {opc_fstore_0,opc_fstore_1,opc_fstore_2,opc_fstore_3}; |
private static int[] opcodes = new int[]{opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3}; |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
int index = getOperand(0); |
int index = getOperand(0); |
||||||
if(index>3) { |
if (index > 3) { |
||||||
if(wide) { |
if (wide) { |
||||||
out.writeByte(opc_wide); |
out.writeByte(opc_wide); |
||||||
} |
} |
||||||
out.writeByte(opc_fstore); |
out.writeByte(opc_fstore); |
||||||
if(wide) { |
if (wide) { |
||||||
out.writeShort(index); |
out.writeShort(index); |
||||||
} else { |
} |
||||||
out.writeByte(index); |
else { |
||||||
} |
out.writeByte(index); |
||||||
} else { |
} |
||||||
out.writeByte(opcodes[index]); |
} |
||||||
} |
else { |
||||||
} |
out.writeByte(opcodes[index]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
public int length() { |
public int length() { |
||||||
int index = getOperand(0); |
int index = getOperand(0); |
||||||
if(index>3) { |
if (index > 3) { |
||||||
if(wide) { |
if (wide) { |
||||||
return 4; |
return 4; |
||||||
} else { |
} |
||||||
return 2; |
else { |
||||||
} |
return 2; |
||||||
} else { |
} |
||||||
return 1; |
} |
||||||
} |
else { |
||||||
} |
return 1; |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,18 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class GETFIELD extends Instruction { |
public class GETFIELD extends Instruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_getfield); |
out.writeByte(opc_getfield); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
public int length() { |
||||||
return 3; |
return 3; |
||||||
} |
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.Instruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.Instruction; |
|
||||||
|
|
||||||
public class GETSTATIC extends Instruction { |
public class GETSTATIC extends Instruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_getstatic); |
out.writeByte(opc_getstatic); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,30 +1,46 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class GOTO extends JumpInstruction { |
public class GOTO extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
int operand = getOperand(0); |
int operand = getOperand(0); |
||||||
if(operand < -32768 || operand > 32767) { |
if (operand < -32768 || operand > 32767) { |
||||||
out.writeByte(opc_goto_w); |
out.writeByte(opc_goto_w); |
||||||
out.writeInt(operand); |
out.writeInt(operand); |
||||||
} else { |
} |
||||||
out.writeByte(opc_goto); |
else { |
||||||
out.writeShort(operand); |
out.writeByte(opc_goto); |
||||||
} |
out.writeShort(operand); |
||||||
} |
} |
||||||
|
} |
||||||
public int length() { |
|
||||||
int operand = getOperand(0); |
|
||||||
if(operand < -32768 || operand > 32767) { |
|
||||||
return 5; |
|
||||||
} else { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
int operand = getOperand(0); |
||||||
|
if (operand < -32768 || operand > 32767) { |
||||||
|
return 5; |
||||||
|
} |
||||||
|
else { |
||||||
|
return 3; |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class GOTO_W extends JumpInstruction { |
public class GOTO_W extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_goto_w); |
out.writeByte(opc_goto_w); |
||||||
out.writeInt(getOperand(0)); |
out.writeInt(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 5; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 5; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IFEQ extends JumpInstruction { |
public class IFEQ extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_ifeq); |
out.writeByte(opc_ifeq); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IFGE extends JumpInstruction { |
public class IFGE extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_ifge); |
out.writeByte(opc_ifge); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IFGT extends JumpInstruction { |
public class IFGT extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_ifgt); |
out.writeByte(opc_ifgt); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IFLE extends JumpInstruction { |
public class IFLE extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_ifle); |
out.writeByte(opc_ifle); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IFLT extends JumpInstruction { |
public class IFLT extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_iflt); |
out.writeByte(opc_iflt); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IFNE extends JumpInstruction { |
public class IFNE extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_ifne); |
out.writeByte(opc_ifne); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IFNONNULL extends JumpInstruction { |
public class IFNONNULL extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_ifnonnull); |
out.writeByte(opc_ifnonnull); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IFNULL extends JumpInstruction { |
public class IFNULL extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_ifnull); |
out.writeByte(opc_ifnull); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,20 +1,34 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IF_ACMPEQ extends JumpInstruction { |
public class IF_ACMPEQ extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_if_acmpeq); |
out.writeByte(opc_if_acmpeq); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IF_ACMPNE extends JumpInstruction { |
public class IF_ACMPNE extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_if_acmpne); |
out.writeByte(opc_if_acmpne); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IF_ICMPEQ extends JumpInstruction { |
public class IF_ICMPEQ extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_if_icmpeq); |
out.writeByte(opc_if_icmpeq); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IF_ICMPGE extends JumpInstruction { |
public class IF_ICMPGE extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_if_icmpge); |
out.writeByte(opc_if_icmpge); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,19 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2014 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
package org.jetbrains.java.decompiler.code.instructions; |
package org.jetbrains.java.decompiler.code.instructions; |
||||||
|
|
||||||
|
import org.jetbrains.java.decompiler.code.JumpInstruction; |
||||||
|
|
||||||
import java.io.DataOutputStream; |
import java.io.DataOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
|
|
||||||
import org.jetbrains.java.decompiler.code.JumpInstruction; |
|
||||||
|
|
||||||
public class IF_ICMPGT extends JumpInstruction { |
public class IF_ICMPGT extends JumpInstruction { |
||||||
|
|
||||||
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
public void writeToStream(DataOutputStream out, int offset) throws IOException { |
||||||
out.writeByte(opc_if_icmpgt); |
out.writeByte(opc_if_icmpgt); |
||||||
out.writeShort(getOperand(0)); |
out.writeShort(getOperand(0)); |
||||||
} |
} |
||||||
|
|
||||||
public int length() { |
|
||||||
return 3; |
|
||||||
} |
|
||||||
|
|
||||||
|
public int length() { |
||||||
|
return 3; |
||||||
|
} |
||||||
} |
} |
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue