package de.fernflower.code;

public class ConstantsUtilOld {
	public static String getName(int opcode) {
		return opcodeNames[opcode];
	}

	public static Instruction getInstructionInstance(int opcode, boolean wide, int group, int[] operands) {

		Instruction instr = getInstructionInstance(opcode);
		instr.wide = wide;
		instr.group = group;
		instr.setOperands(operands);

		return instr;
	}
	
	public static Instruction getInstructionInstance(int opcode) {
		try {
			Instruction instr = (Instruction)Class.forName("de.fernflower.code.instructions."+opcodeClasses[opcode]).newInstance();
			instr.opcode = opcode;
			return instr;
		} catch (Exception ex) {
			return null;
		}
		
	}

	
	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",
		"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 String[] opcodeClasses = {
		"NOP",				//    "nop",
		"ACONST_NULL",		//    "aconst_null",
		null,			//    "iconst_m1",
		null,			//    "iconst_0",
		null,			//    "iconst_1",
		null,			//    "iconst_2",
		null,			//    "iconst_3",
		null,			//    "iconst_4",
		null,			//    "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",
		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",
		"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",
		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",
		"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",
		null		,		//    "xxxunusedxxx",
		"NEW",				//    "new",
		"NEWARRAY",		//    "newarray",
		"ANEWARRAY",		//    "anewarray",
		"ARRAYLENGTH",		//    "arraylength",
		"ATHROW",			//    "athrow",
		"CHECKCAST",		//    "checkcast",
		"INSTANCEOF",		//    "instanceof",
		"MONITORENTER",		//    "monitorenter",
		"MONITOREXIT",		//    "monitorexit",
		null,				//    "wide",
		"MULTIANEWARRAY",		//    "multianewarray",
		"IFNULL",			//    "ifnull",
		"IFNONNULL",		//    "ifnonnull",
		"GOTO_W",			//    "goto_w",
		"JSR_W"				//    "jsr_w"
	};
	
	
	
}
