List of usage examples for org.objectweb.asm Opcodes LCONST_0
int LCONST_0
To view the source code for org.objectweb.asm Opcodes LCONST_0.
Click Source Link
From source file:com.codename1.tools.translator.bytecodes.BasicInstruction.java
License:Open Source License
@Override public void appendInstruction(StringBuilder b, List<Instruction> instructions) { switch (opcode) { case Opcodes.NOP: break;// w ww . java 2 s.c o m case Opcodes.ACONST_NULL: b.append(" PUSH_POINTER(JAVA_NULL); /* ACONST_NULL */\n"); break; case Opcodes.ICONST_M1: b.append(" PUSH_INT(-1); /* ICONST_M1 */\n"); break; case Opcodes.ICONST_0: b.append(" PUSH_INT(0); /* ICONST_0 */\n"); break; case Opcodes.ICONST_1: b.append(" PUSH_INT(1); /* ICONST_1 */\n"); break; case Opcodes.ICONST_2: b.append(" PUSH_INT(2); /* ICONST_2 */\n"); break; case Opcodes.ICONST_3: b.append(" PUSH_INT(3); /* ICONST_3 */\n"); break; case Opcodes.ICONST_4: b.append(" PUSH_INT(4); /* ICONST_4 */\n"); break; case Opcodes.ICONST_5: b.append(" PUSH_INT(5); /* ICONST_5 */\n"); break; case Opcodes.LCONST_0: b.append(" PUSH_LONG(0); /* LCONST_0 */\n"); break; case Opcodes.LCONST_1: b.append(" PUSH_LONG(1); /* LCONST_1 */\n"); break; case Opcodes.FCONST_0: b.append(" PUSH_FLOAT(0); /* FCONST_0 */\n"); break; case Opcodes.FCONST_1: b.append(" PUSH_FLOAT(1); /* FCONST_1 */\n"); break; case Opcodes.FCONST_2: b.append(" PUSH_FLOAT(2); /* FCONST_2 */\n"); break; case Opcodes.DCONST_0: b.append(" PUSH_DOUBLE(0); /* DCONST_0 */\n"); break; case Opcodes.DCONST_1: b.append(" PUSH_DOUBLE(1); /* DCONST_1 */\n"); break; case Opcodes.BALOAD: b.append(" { CHECK_ARRAY_ACCESS(2, SP[-1].data.i); /* BALOAD */ \n" + " SP--; SP[-1].type = CN1_TYPE_INT; \n" + " SP[-1].data.i = ((JAVA_ARRAY_BYTE*) (*(JAVA_ARRAY)SP[-1].data.o).data)[(*SP).data.i]; \n" + " }\n"); break; case Opcodes.CALOAD: b.append(" CHECK_ARRAY_ACCESS(2, SP[-1].data.i); /* CALOAD */\n" + " SP--; SP[-1].type = CN1_TYPE_INT; \n" + " SP[-1].data.i = ((JAVA_ARRAY_CHAR*) (*(JAVA_ARRAY)SP[-1].data.o).data)[(*SP).data.i];\n"); break; case Opcodes.IALOAD: b.append(" CHECK_ARRAY_ACCESS(2, SP[-1].data.i); /* IALOAD */\n" + " SP--; SP[-1].type = CN1_TYPE_INT; \n" + " SP[-1].data.i = ((JAVA_ARRAY_INT*) (*(JAVA_ARRAY)SP[-1].data.o).data)[(*SP).data.i];\n"); break; case Opcodes.SALOAD: b.append(" CHECK_ARRAY_ACCESS(2, SP[-1].data.i); \n" + " SP--; SP[-1].type = CN1_TYPE_INT; \n" + " SP[-1].data.i = ((JAVA_ARRAY_SHORT*) (*(JAVA_ARRAY)SP[-1].data.o).data)[(*SP).data.i]; /* SALOAD */\n"); break; case Opcodes.LALOAD: b.append(" CHECK_ARRAY_ACCESS(2, SP[-1].data.i); /* LALOAD */\n" + " SP--; SP[-1].type = CN1_TYPE_LONG; \n" + " SP[-1].data.l = LONG_ARRAY_LOOKUP((JAVA_ARRAY)SP[-1].data.o, (*SP).data.i);\n"); break; case Opcodes.FALOAD: b.append(" CHECK_ARRAY_ACCESS(2, SP[-1].data.i); /* FALOAD */\n" + " SP--; SP[-1].type = CN1_TYPE_FLOAT; \n" + " SP[-1].data.f = FLOAT_ARRAY_LOOKUP((JAVA_ARRAY)SP[-1].data.o, (*SP).data.i);\n"); break; case Opcodes.DALOAD: b.append(" CHECK_ARRAY_ACCESS(2, SP[-1].data.i); /* DALOAD */\n" + " SP--; SP[-1].type = CN1_TYPE_DOUBLE; \n" + " SP[-1].data.d = DOUBLE_ARRAY_LOOKUP((JAVA_ARRAY)SP[-1].data.o, (*SP).data.i);\n"); break; case Opcodes.AALOAD: b.append(" CHECK_ARRAY_ACCESS(2, SP[-1].data.i); /* AALOAD */\n" + " SP--; SP[-1].type = CN1_TYPE_INVALID; \n" + " SP[-1].data.o = ((JAVA_ARRAY_OBJECT*) (*(JAVA_ARRAY)SP[-1].data.o).data)[(*SP).data.i]; \n" + " SP[-1].type = CN1_TYPE_OBJECT; \n"); break; case Opcodes.BASTORE: b.append(" CHECK_ARRAY_ACCESS(3, SP[-2].data.i); /* BASTORE */\n" + " ((JAVA_ARRAY_BYTE*) (*(JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3;\n"); break; case Opcodes.CASTORE: b.append(" CHECK_ARRAY_ACCESS(3, SP[-2].data.i); /* CASTORE */\n" + " ((JAVA_ARRAY_CHAR*) (*(JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3;\n\n"); break; case Opcodes.SASTORE: b.append(" CHECK_ARRAY_ACCESS(3, SP[-2].data.i); /* SASTORE */\n" + " ((JAVA_ARRAY_SHORT*) (*(JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3;\n"); break; case Opcodes.IASTORE: b.append(" CHECK_ARRAY_ACCESS(3, SP[-2].data.i); /* IASTORE */\n" + " ((JAVA_ARRAY_INT*) (*(JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3;\n"); break; case Opcodes.LASTORE: b.append(" CHECK_ARRAY_ACCESS(3, SP[-2].data.i); /* LASTORE */\n" + " LONG_ARRAY_LOOKUP((JAVA_ARRAY)SP[-3].data.o, SP[-2].data.i) = SP[-1].data.l; SP -= 3;\n"); break; case Opcodes.FASTORE: b.append(" CHECK_ARRAY_ACCESS(3, SP[-2].data.i); /* FASTORE */\n" + " FLOAT_ARRAY_LOOKUP((JAVA_ARRAY)SP[-3].data.o, SP[-2].data.i) = SP[-1].data.f; SP -= 3;\n"); break; case Opcodes.DASTORE: b.append(" CHECK_ARRAY_ACCESS(3, SP[-2].data.i); /* DASTORE */\n" + " DOUBLE_ARRAY_LOOKUP((JAVA_ARRAY)SP[-3].data.o, SP[-2].data.i) = SP[-1].data.d; SP -= 3;\n"); break; case Opcodes.AASTORE: b.append(" CHECK_ARRAY_ACCESS(3, SP[-2].data.i); { /* BC_AASTORE */\n" + " JAVA_OBJECT aastoreTmp = SP[-3].data.o; \n" + " ((JAVA_ARRAY_OBJECT*) (*(JAVA_ARRAY)aastoreTmp).data)[SP[-2].data.i] = SP[-1].data.o; \n" + " SP -= 3; }\n"); break; case Opcodes.POP: b.append(" SP--; /* POP */\n"); break; case Opcodes.POP2: b.append(" popMany(threadStateData, 2, &SP); /* POP2 */\n"); break; /*case Opcodes.DUP: b.append(" PUSH_INT(PEEK_INT(1));\n"); break; case Opcodes.DUP_X1: b.append(" DUP_X1();\n"); break; case Opcodes.DUP_X2: b.append(" DUP_X2();\n"); break;*/ case Opcodes.DUP: b.append(" BC_DUP(); /* DUP */\n"); break; case Opcodes.DUP2: b.append(" BC_DUP2(); /* DUP2 */\n"); break; case Opcodes.DUP_X1: b.append(" BC_DUP2_X1(); /* DUP_X1 */\n"); break; case Opcodes.DUP2_X1: b.append(" BC_DUP2_X1(); /* DUP2_X1 */\n"); break; case Opcodes.DUP_X2: b.append(" BC_DUP2_X2(); /* DUP_X2 */\n"); break; case Opcodes.DUP2_X2: b.append(" BC_DUP2_X2(); /* DUP2_X2 */\n"); break; case Opcodes.SWAP: b.append(" swapStack(SP); /* SWAP */\n"); break; case Opcodes.IADD: b.append(" SP--; SP[-1].data.i = SP[-1].data.i + (*SP).data.i; /* IADD */\n"); break; case Opcodes.LADD: b.append(" SP--; SP[-1].data.l = SP[-1].data.l + (*SP).data.l; /* LADD */\n"); break; case Opcodes.FADD: b.append(" SP--; SP[-1].data.f = SP[-1].data.f + (*SP).data.f; /* FADD */\n"); break; case Opcodes.DADD: b.append(" SP--; SP[-1].data.d = SP[-1].data.d + (*SP).data.d; /* DADD */\n"); break; case Opcodes.ISUB: b.append(" SP--; SP[-1].data.i = (SP[-1].data.i - (*SP).data.i); /* ISUB */\n"); break; case Opcodes.LSUB: b.append(" SP--; SP[-1].data.l = (SP[-1].data.l - (*SP).data.l); /* LSUB */\n"); break; case Opcodes.FSUB: b.append(" SP--; SP[-1].data.f = (SP[-1].data.f - (*SP).data.f); /* FSUB */\n"); break; case Opcodes.DSUB: b.append(" SP--; SP[-1].data.d = (SP[-1].data.d - (*SP).data.d); /* DSUB */\n"); break; case Opcodes.IMUL: b.append(" SP--; SP[-1].data.i = SP[-1].data.i * (*SP).data.i; /* IMUL */\n"); break; case Opcodes.LMUL: b.append(" SP--; SP[-1].data.l = SP[-1].data.l * (*SP).data.l; /* LMUL */\n"); break; case Opcodes.FMUL: b.append(" SP--; SP[-1].data.f = SP[-1].data.f * (*SP).data.f; /* FMUL */\n"); break; case Opcodes.DMUL: b.append(" SP--; SP[-1].data.d = SP[-1].data.d * (*SP).data.d; /* DMUL */\n"); break; case Opcodes.IDIV: b.append(" SP--; SP[-1].data.i = SP[-1].data.i / (*SP).data.i; /* IDIV */\n"); break; case Opcodes.LDIV: b.append(" SP--; SP[-1].data.l = SP[-1].data.l / (*SP).data.l; /* LDIV */\n"); break; case Opcodes.FDIV: b.append(" SP--; SP[-1].data.f = SP[-1].data.f / (*SP).data.f; /* FDIV */\n"); break; case Opcodes.DDIV: b.append(" SP--; SP[-1].data.d = SP[-1].data.d / (*SP).data.d; /* DDIV */\n"); break; case Opcodes.IREM: b.append(" SP--; SP[-1].data.i = SP[-1].data.i % (*SP).data.i; /* IREM */\n"); break; case Opcodes.LREM: b.append(" SP--; SP[-1].data.l = SP[-1].data.l % (*SP).data.l; /* LREM */\n"); break; case Opcodes.FREM: b.append(" SP--; SP[-1].data.f = fmod(SP[-1].data.f, (*SP).data.f); /* FREM */\n"); break; case Opcodes.DREM: b.append(" SP--; SP[-1].data.d = fmod(SP[-1].data.d, (*SP).data.d); /* DREM */\n"); break; case Opcodes.INEG: b.append(" SP[-1].data.i *= -1; /* INEG */\n"); break; case Opcodes.LNEG: b.append(" SP[-1].data.l *= -1; /* LNEG */\n"); break; case Opcodes.FNEG: b.append(" SP[-1].data.f *= -1; /* FNEG */\n"); break; case Opcodes.DNEG: b.append(" SP[-1].data.d *= -1; /* DNEG */\n"); break; case Opcodes.ISHL: b.append(" SP--; SP[-1].data.i = (SP[-1].data.i << (0x1f & (*SP).data.i)); /* ISHL */\n"); break; case Opcodes.LSHL: b.append(" SP--; SP[-1].data.l = (SP[-1].data.l << (0x3f & (*SP).data.i)); /* LSHL */\n"); break; case Opcodes.ISHR: b.append(" SP--; SP[-1].data.i = (SP[-1].data.i >> (0x1f & (*SP).data.i)); /* ISHR */\n"); break; case Opcodes.LSHR: b.append(" SP--; SP[-1].data.l = (SP[-1].data.l >> (0x3f & (*SP).data.l)); /* LSHR */\n"); break; case Opcodes.IUSHR: b.append( " SP--; SP[-1].data.i = (((unsigned int)SP[-1].data.i) >> (0x1f & ((unsigned int)(*SP).data.i))); /* IUSHR */\n"); break; case Opcodes.LUSHR: b.append( " SP--; SP[-1].data.l = (((unsigned long long)SP[-1].data.l) >> (0x3f & ((unsigned long long)(*SP).data.i))); /* LUSHR */\n"); break; case Opcodes.IAND: b.append(" SP--; SP[-1].data.i = SP[-1].data.i & (*SP).data.i; /* IAND */\n"); break; case Opcodes.LAND: b.append(" SP--; SP[-1].data.l = SP[-1].data.l & (*SP).data.l; /* LAND */\n"); break; case Opcodes.IOR: b.append(" SP--; SP[-1].data.i = SP[-1].data.i | (*SP).data.i; /* IOR */\n"); break; case Opcodes.LOR: b.append(" SP--; SP[-1].data.l = SP[-1].data.l | (*SP).data.l; /* LOR */\n"); break; case Opcodes.IXOR: b.append(" SP--; SP[-1].data.i = SP[-1].data.i ^ (*SP).data.i; /* IXOR */\n"); break; case Opcodes.LXOR: b.append(" SP--; SP[-1].data.l = SP[-1].data.l ^ (*SP).data.l; /* LXOR */\n"); break; case Opcodes.I2L: b.append(" SP[-1].data.l = SP[-1].data.i; /* I2L */\n"); break; case Opcodes.I2F: b.append(" SP[-1].data.f = (JAVA_FLOAT)SP[-1].data.i; /* I2F */\n"); break; case Opcodes.I2D: b.append(" SP[-1].data.d = SP[-1].data.i; /* I2D */;\n"); break; case Opcodes.L2I: b.append(" SP[-1].data.i = (JAVA_INT)SP[-1].data.l; /* L2I */\n"); break; case Opcodes.L2F: b.append(" SP[-1].data.f = (JAVA_FLOAT)SP[-1].data.l; /* L2F */\n"); break; case Opcodes.L2D: b.append(" SP[-1].data.d = (JAVA_DOUBLE)SP[-1].data.l; /* L2D */\n"); break; case Opcodes.F2I: b.append(" SP[-1].data.i = (JAVA_INT)SP[-1].data.f; /* F2I */\n"); break; case Opcodes.F2L: b.append(" SP[-1].data.l = (JAVA_LONG)SP[-1].data.f; /* F2L */\n"); break; case Opcodes.F2D: b.append(" SP[-1].data.d = SP[-1].data.f; /* F2D */\n"); break; case Opcodes.D2I: b.append(" SP[-1].data.i = (JAVA_INT)SP[-1].data.d; /* D2I */\n"); break; case Opcodes.D2L: b.append(" SP[-1].data.l = (JAVA_LONG)SP[-1].data.d; /* D2L */\n"); break; case Opcodes.D2F: b.append(" SP[-1].data.f = (JAVA_FLOAT)SP[-1].data.d; /* D2F */\n"); break; case Opcodes.I2B: b.append(" SP[-1].data.i = ((SP[-1].data.i << 24) >> 24); /* I2B */\n"); break; case Opcodes.I2C: b.append(" SP[-1].data.i = (SP[-1].data.i & 0xffff); /* I2C */\n"); break; case Opcodes.I2S: b.append(" SP[-1].data.i = ((SP[-1].data.i << 16) >> 16); /* I2S */\n"); break; case Opcodes.LCMP: b.append(" BC_LCMP();\n"); break; case Opcodes.FCMPG: case Opcodes.FCMPL: b.append(" BC_FCMPL();\n"); break; case Opcodes.DCMPL: case Opcodes.DCMPG: b.append(" BC_DCMPL();\n"); break; case Opcodes.IRETURN: appendSynchronized(b); if (TryCatch.isTryCatchInMethod()) { b.append( " releaseForReturnInException(threadStateData, cn1LocalsBeginInThread, methodBlockOffset); return SP[-1].data.i;\n"); // b.append(maxLocals); // b.append(", stack, locals, methodBlockOffset); \n return SP[-1].data.i;\n"); } else { b.append(" releaseForReturn(threadStateData, cn1LocalsBeginInThread); return SP[-1].data.i;\n"); // b.append(maxLocals); // b.append(", stack, locals); \n return SP[-1].data.i;\n"); } break; case Opcodes.LRETURN: appendSynchronized(b); if (TryCatch.isTryCatchInMethod()) { b.append( " releaseForReturnInException(threadStateData, cn1LocalsBeginInThread, methodBlockOffset); \n return POP_LONG();\n"); } else { b.append( " releaseForReturn(threadStateData, cn1LocalsBeginInThread); \n return POP_LONG();\n"); } break; case Opcodes.FRETURN: appendSynchronized(b); if (TryCatch.isTryCatchInMethod()) { b.append( " releaseForReturnInException(threadStateData, cn1LocalsBeginInThread, methodBlockOffset); \n return POP_FLOAT();\n"); } else { b.append( " releaseForReturn(threadStateData, cn1LocalsBeginInThread); \n return POP_FLOAT();\n"); } break; case Opcodes.DRETURN: appendSynchronized(b); if (TryCatch.isTryCatchInMethod()) { b.append( " releaseForReturnInException(threadStateData, cn1LocalsBeginInThread, methodBlockOffset); \n return POP_DOUBLE();\n"); } else { b.append( " releaseForReturn(threadStateData, cn1LocalsBeginInThread); \n return POP_DOUBLE();\n"); } break; case Opcodes.ARETURN: appendSynchronized(b); if (TryCatch.isTryCatchInMethod()) { b.append( " releaseForReturnInException(threadStateData, cn1LocalsBeginInThread, methodBlockOffset); \n return POP_OBJ();\n"); } else { b.append( " releaseForReturn(threadStateData, cn1LocalsBeginInThread); \n return POP_OBJ();\n"); } break; case Opcodes.RETURN: appendSynchronized(b); if (!hasInstructions) { b.append(" return;\n"); break; } if (TryCatch.isTryCatchInMethod()) { b.append( " releaseForReturnInException(threadStateData, cn1LocalsBeginInThread, methodBlockOffset); \n return;\n"); } else { b.append(" releaseForReturn(threadStateData, cn1LocalsBeginInThread); \n return;\n"); } break; case Opcodes.ARRAYLENGTH: b.append(" { /* ARRAYLENGTH */\n" + " if(SP[-1].data.o == JAVA_NULL) { \n" + " throwException(threadStateData, __NEW_INSTANCE_java_lang_NullPointerException(threadStateData)); \n" + " }; \n" + " SP[-1].type = CN1_TYPE_INT; \n" + " SP[-1].data.i = (*((JAVA_ARRAY)SP[-1].data.o)).length; \n" + " }\n"); break; case Opcodes.ATHROW: //b.append(" NSLog(@\"Exception thrown %s %d %s %s\\n\", __FILE__, __LINE__, __PRETTY_FUNCTION__, __FUNCTION__);\n"); b.append(" throwException(threadStateData, POP_OBJ());\n"); break; case Opcodes.MONITORENTER: b.append(" monitorEnter(threadStateData, POP_OBJ());\n"); break; case Opcodes.MONITOREXIT: b.append(" monitorExit(threadStateData, POP_OBJ());\n"); break; // int instructions case Opcodes.SIPUSH: case Opcodes.BIPUSH: b.append(" PUSH_INT("); b.append(value); b.append(");\n"); break; case Opcodes.NEWARRAY: switch (value) { case 4: // boolean b.append( " SP--; PUSH_OBJ(allocArray(threadStateData, (*SP).data.i, &class_array1__JAVA_BOOLEAN, sizeof(JAVA_ARRAY_BOOLEAN), 1));\n"); break; case 5: // char b.append( " SP--; PUSH_OBJ(allocArray(threadStateData, (*SP).data.i, &class_array1__JAVA_CHAR, sizeof(JAVA_ARRAY_CHAR), 1));\n"); break; case 6: // float b.append( " SP--; PUSH_OBJ(allocArray(threadStateData, (*SP).data.i, &class_array1__JAVA_FLOAT, sizeof(JAVA_ARRAY_FLOAT), 1));\n"); break; case 7: // double b.append( " SP--; PUSH_OBJ(allocArray(threadStateData, (*SP).data.i, &class_array1__JAVA_DOUBLE, sizeof(JAVA_ARRAY_DOUBLE), 1));\n"); break; case 8: // byte b.append( " SP--; PUSH_OBJ(allocArray(threadStateData, (*SP).data.i, &class_array1__JAVA_BYTE, sizeof(JAVA_ARRAY_BYTE), 1));\n"); break; case 9: // short b.append( " SP--; PUSH_OBJ(allocArray(threadStateData, (*SP).data.i, &class_array1__JAVA_SHORT, sizeof(JAVA_ARRAY_SHORT), 1));\n"); break; case 10: // int b.append( " SP--; PUSH_OBJ(allocArray(threadStateData, (*SP).data.i, &class_array1__JAVA_INT, sizeof(JAVA_ARRAY_INT), 1));\n"); break; case 11: // long b.append( " SP--; PUSH_OBJ(allocArray(threadStateData, (*SP).data.i, &class_array1__JAVA_LONG, sizeof(JAVA_ARRAY_LONG), 1));\n"); break; } break; } }
From source file:com.codename1.tools.translator.bytecodes.BasicInstruction.java
License:Open Source License
@Override public boolean assignTo(String varName, StringBuilder sb) { StringBuilder b = new StringBuilder(); //StringBuilder b2 = new StringBuilder(); //if (typeVarName != null) { // b2.append(typeVarName).append(" = "); // /*from w ww . j a v a 2 s.c o m*/ //} if (varName != null) { b.append(varName).append(" = "); } switch (opcode) { case Opcodes.ACONST_NULL: b.append("JAVA_NULL /* ACONST_NULL */"); //b2.append("CN1_TYPE_OBJECT"); break; case Opcodes.ICONST_M1: b.append("-1 /* ICONST_M1 */"); //b2.append("CN1_TYPE_INT"); break; case Opcodes.ICONST_0: b.append("0 /* ICONST_0 */"); //b2.append("CN1_TYPE_INT"); break; case Opcodes.ICONST_1: b.append("1 /* ICONST_1 */"); //b2.append("CN1_TYPE_INT"); break; case Opcodes.ICONST_2: b.append("2 /* ICONST_2 */"); //b2.append("CN1_TYPE_INT"); break; case Opcodes.ICONST_3: b.append("3 /* ICONST_3 */"); //b2.append("CN1_TYPE_INT"); break; case Opcodes.ICONST_4: b.append("4/* ICONST_4 */"); //b2.append("CN1_TYPE_INT"); break; case Opcodes.ICONST_5: b.append("5 /* ICONST_5 */"); ///b2.append("CN1_TYPE_INT"); break; case Opcodes.LCONST_0: b.append("0 /* LCONST_0 */"); //b2.append("CN1_TYPE_LONG"); break; case Opcodes.LCONST_1: b.append("1 /* LCONST_1 */"); //b2.append("CN1_TYPE_LONG"); break; case Opcodes.FCONST_0: b.append("0 /* FCONST_0 */"); //b2.append("CN1_TYPE_FLOAT"); break; case Opcodes.FCONST_1: b.append("1 /* FCONST_1 */"); //b2.append("CN1_TYPE_FLOAT"); break; case Opcodes.FCONST_2: b.append("2 /* FCONST_2 */"); //b2.append("CN1_TYPE_FLOAT"); break; case Opcodes.DCONST_0: b.append("0 /* DCONST_0 */"); //b2.append("CN1_TYPE_DOUBLE"); break; case Opcodes.DCONST_1: b.append("1 /* DCONST_1 */"); //b2.append("CN1_TYPE_DOUBLE"); break; // int instructions case Opcodes.SIPUSH: case Opcodes.BIPUSH: b.append(value); b.append("/* SIPUSH */"); //b2.append("CN1_TYPE_INT"); break; default: return false; } if (varName != null) { sb.append(" "); b.append("; \n"); } //if (typeVarName != null) { // sb.append(b2).append("; "); //} sb.append(b); return true; }
From source file:com.codename1.tools.translator.Util.java
License:Open Source License
public static char[] getStackInputTypes(Instruction instr) { char[] out = instr.getStackInputTypes(); if (out != null) { return out; }//ww w . jav a 2s . c o m switch (instr.getOpcode()) { case Opcodes.NOP: case Opcodes.ACONST_NULL: case Opcodes.ICONST_M1: case Opcodes.ICONST_0: case Opcodes.ICONST_2: case Opcodes.ICONST_3: case Opcodes.ICONST_4: case Opcodes.ICONST_5: case Opcodes.LCONST_0: case Opcodes.LCONST_1: case Opcodes.FCONST_0: case Opcodes.FCONST_1: case Opcodes.FCONST_2: case Opcodes.DCONST_0: case Opcodes.DCONST_1: case Opcodes.SIPUSH: case Opcodes.BIPUSH: return new char[0]; case Opcodes.BALOAD: case Opcodes.CALOAD: case Opcodes.IALOAD: case Opcodes.SALOAD: case Opcodes.LALOAD: case Opcodes.FALOAD: case Opcodes.DALOAD: case Opcodes.AALOAD: return new char[] { 'i', 'o' }; case Opcodes.BASTORE: case Opcodes.CASTORE: case Opcodes.SASTORE: case Opcodes.IASTORE: return new char[] { 'i', 'i', 'o' }; case Opcodes.LASTORE: return new char[] { 'l', 'i', 'o' }; case Opcodes.FASTORE: return new char[] { 'f', 'i', 'o' }; case Opcodes.DASTORE: return new char[] { 'd', 'i', 'o' }; case Opcodes.AASTORE: return new char[] { 'o', 'i', 'o' }; case Opcodes.POP: return new char[] { '*' }; case Opcodes.POP2: return new char[] { '*', '*' }; case Opcodes.DUP: return new char[] { '0' }; case Opcodes.DUP2: case Opcodes.DUP_X2: case Opcodes.DUP2_X2: return null; // DUP2 depends on the types on the stack so we don't statically know the input types case Opcodes.DUP_X1: case Opcodes.DUP2_X1: return new char[] { '0', '1' }; case Opcodes.SWAP: return new char[] { '0', '1' }; case Opcodes.IADD: case Opcodes.ISUB: case Opcodes.IMUL: case Opcodes.IDIV: case Opcodes.IREM: case Opcodes.ISHL: case Opcodes.ISHR: case Opcodes.IUSHR: case Opcodes.IAND: case Opcodes.IOR: case Opcodes.IXOR: return new char[] { 'i', 'i' }; case Opcodes.LADD: case Opcodes.LSUB: case Opcodes.LMUL: case Opcodes.LDIV: case Opcodes.LREM: case Opcodes.LSHL: case Opcodes.LSHR: case Opcodes.LAND: case Opcodes.LOR: case Opcodes.LXOR: case Opcodes.LCMP: return new char[] { 'l', 'l' }; case Opcodes.FADD: case Opcodes.FSUB: case Opcodes.FMUL: case Opcodes.FDIV: case Opcodes.FREM: case Opcodes.FCMPG: case Opcodes.FCMPL: return new char[] { 'f', 'f' }; case Opcodes.DADD: case Opcodes.DSUB: case Opcodes.DMUL: case Opcodes.DDIV: case Opcodes.DREM: case Opcodes.DCMPL: case Opcodes.DCMPG: return new char[] { 'd', 'd' }; case Opcodes.INEG: case Opcodes.I2L: case Opcodes.I2F: case Opcodes.I2D: case Opcodes.I2B: case Opcodes.I2C: case Opcodes.I2S: case Opcodes.NEWARRAY: return new char[] { 'i' }; case Opcodes.LNEG: case Opcodes.L2I: case Opcodes.L2F: case Opcodes.L2D: return new char[] { 'l' }; case Opcodes.FNEG: case Opcodes.F2I: case Opcodes.F2L: case Opcodes.F2D: return new char[] { 'f' }; case Opcodes.DNEG: case Opcodes.D2I: case Opcodes.D2L: case Opcodes.D2F: return new char[] { 'd' }; case Opcodes.LUSHR: return new char[] { 'i', 'l' }; case Opcodes.ARRAYLENGTH: case Opcodes.MONITORENTER: case Opcodes.MONITOREXIT: case Opcodes.ATHROW: return new char[] { 'o' }; default: return null; } }
From source file:com.codename1.tools.translator.Util.java
License:Open Source License
public static char[] getStackOutputTypes(Instruction instr) { char[] out = instr.getStackOutputTypes(); if (out != null) { return out; }//from w w w .j ava 2 s.c o m switch (instr.getOpcode()) { case Opcodes.NOP: case Opcodes.BASTORE: case Opcodes.CASTORE: case Opcodes.SASTORE: case Opcodes.IASTORE: case Opcodes.LASTORE: case Opcodes.FASTORE: case Opcodes.DASTORE: case Opcodes.AASTORE: case Opcodes.POP: case Opcodes.POP2: case Opcodes.MONITORENTER: case Opcodes.MONITOREXIT: case Opcodes.ATHROW: return new char[0]; case Opcodes.ACONST_NULL: case Opcodes.AALOAD: case Opcodes.NEWARRAY: return new char[] { 'o' }; case Opcodes.ICONST_M1: case Opcodes.ICONST_0: case Opcodes.ICONST_1: case Opcodes.ICONST_2: case Opcodes.ICONST_3: case Opcodes.ICONST_4: case Opcodes.ICONST_5: case Opcodes.BALOAD: case Opcodes.CALOAD: case Opcodes.IALOAD: case Opcodes.SALOAD: case Opcodes.IADD: case Opcodes.ISUB: case Opcodes.IMUL: case Opcodes.IDIV: case Opcodes.IREM: case Opcodes.INEG: case Opcodes.ISHL: case Opcodes.ISHR: case Opcodes.IUSHR: case Opcodes.IAND: case Opcodes.IOR: case Opcodes.IXOR: case Opcodes.F2I: case Opcodes.D2I: case Opcodes.L2I: case Opcodes.I2C: case Opcodes.I2S: case Opcodes.LCMP: case Opcodes.FCMPG: case Opcodes.FCMPL: case Opcodes.DCMPL: case Opcodes.DCMPG: case Opcodes.ARRAYLENGTH: case Opcodes.SIPUSH: case Opcodes.BIPUSH: return new char[] { 'i' }; case Opcodes.LCONST_0: case Opcodes.LCONST_1: case Opcodes.LALOAD: case Opcodes.LADD: case Opcodes.LSUB: case Opcodes.LMUL: case Opcodes.LDIV: case Opcodes.LREM: case Opcodes.LNEG: case Opcodes.LSHL: case Opcodes.LSHR: case Opcodes.LUSHR: case Opcodes.LAND: case Opcodes.LOR: case Opcodes.LXOR: case Opcodes.I2L: case Opcodes.F2L: case Opcodes.D2L: return new char[] { 'l' }; case Opcodes.FCONST_0: case Opcodes.FCONST_1: case Opcodes.FCONST_2: case Opcodes.FALOAD: case Opcodes.FADD: case Opcodes.FSUB: case Opcodes.FMUL: case Opcodes.FDIV: case Opcodes.FREM: case Opcodes.FNEG: case Opcodes.I2F: case Opcodes.D2F: case Opcodes.L2F: return new char[] { 'f' }; case Opcodes.DCONST_0: case Opcodes.DCONST_1: case Opcodes.DALOAD: case Opcodes.DADD: case Opcodes.DSUB: case Opcodes.DMUL: case Opcodes.DDIV: case Opcodes.DREM: case Opcodes.DNEG: case Opcodes.I2D: case Opcodes.F2D: case Opcodes.L2D: return new char[] { 'd' }; case Opcodes.DUP: return new char[] { '0', '0' }; case Opcodes.DUP2: case Opcodes.DUP_X2: case Opcodes.DUP2_X2: return null; case Opcodes.DUP_X1: case Opcodes.DUP2_X1: return new char[] { '0', '1', '0' }; case Opcodes.SWAP: return new char[] { '1', '0' }; default: return null; } }
From source file:com.github.anba.es6draft.compiler.assembler.InstructionAssembler.java
License:Open Source License
public void lconst(long value) { if (value == 0) { methodVisitor.visitInsn(Opcodes.LCONST_0); stack.lconst();//from ww w. j a v a 2 s . c o m } else if (value == 1) { methodVisitor.visitInsn(Opcodes.LCONST_1); stack.lconst(); } else { constantPool.lconst(this, Long.valueOf(value)); } }
From source file:com.github.fge.grappa.transform.CodeBlock.java
License:Apache License
public CodeBlock lconst_0() { instructionList.add(new InsnNode(Opcodes.LCONST_0)); return this; }
From source file:com.google.devtools.build.android.desugar.BytecodeTypeInference.java
License:Open Source License
@Override public void visitInsn(int opcode) { switch (opcode) { case Opcodes.NOP: case Opcodes.INEG: case Opcodes.LNEG: case Opcodes.FNEG: case Opcodes.DNEG: case Opcodes.I2B: case Opcodes.I2C: case Opcodes.I2S: case Opcodes.RETURN: break;/* w ww. ja v a 2 s. co m*/ case Opcodes.ACONST_NULL: push(InferredType.NULL); break; case Opcodes.ICONST_M1: case Opcodes.ICONST_0: case Opcodes.ICONST_1: case Opcodes.ICONST_2: case Opcodes.ICONST_3: case Opcodes.ICONST_4: case Opcodes.ICONST_5: push(InferredType.INT); break; case Opcodes.LCONST_0: case Opcodes.LCONST_1: push(InferredType.LONG); push(InferredType.TOP); break; case Opcodes.FCONST_0: case Opcodes.FCONST_1: case Opcodes.FCONST_2: push(InferredType.FLOAT); break; case Opcodes.DCONST_0: case Opcodes.DCONST_1: push(InferredType.DOUBLE); push(InferredType.TOP); break; case Opcodes.IALOAD: case Opcodes.BALOAD: case Opcodes.CALOAD: case Opcodes.SALOAD: pop(2); push(InferredType.INT); break; case Opcodes.LALOAD: case Opcodes.D2L: pop(2); push(InferredType.LONG); push(InferredType.TOP); break; case Opcodes.DALOAD: case Opcodes.L2D: pop(2); push(InferredType.DOUBLE); push(InferredType.TOP); break; case Opcodes.AALOAD: InferredType arrayType = pop(2); InferredType elementType = arrayType.getElementTypeIfArrayOrThrow(); push(elementType); break; case Opcodes.IASTORE: case Opcodes.BASTORE: case Opcodes.CASTORE: case Opcodes.SASTORE: case Opcodes.FASTORE: case Opcodes.AASTORE: pop(3); break; case Opcodes.LASTORE: case Opcodes.DASTORE: pop(4); break; case Opcodes.POP: case Opcodes.IRETURN: case Opcodes.FRETURN: case Opcodes.ARETURN: case Opcodes.ATHROW: case Opcodes.MONITORENTER: case Opcodes.MONITOREXIT: pop(); break; case Opcodes.POP2: case Opcodes.LRETURN: case Opcodes.DRETURN: pop(2); break; case Opcodes.DUP: push(top()); break; case Opcodes.DUP_X1: { InferredType top = pop(); InferredType next = pop(); push(top); push(next); push(top); break; } case Opcodes.DUP_X2: { InferredType top = pop(); InferredType next = pop(); InferredType bottom = pop(); push(top); push(bottom); push(next); push(top); break; } case Opcodes.DUP2: { InferredType top = pop(); InferredType next = pop(); push(next); push(top); push(next); push(top); break; } case Opcodes.DUP2_X1: { InferredType top = pop(); InferredType next = pop(); InferredType bottom = pop(); push(next); push(top); push(bottom); push(next); push(top); break; } case Opcodes.DUP2_X2: { InferredType t1 = pop(); InferredType t2 = pop(); InferredType t3 = pop(); InferredType t4 = pop(); push(t2); push(t1); push(t4); push(t3); push(t2); push(t1); break; } case Opcodes.SWAP: { InferredType top = pop(); InferredType next = pop(); push(top); push(next); break; } case Opcodes.IADD: case Opcodes.ISUB: case Opcodes.IMUL: case Opcodes.IDIV: case Opcodes.IREM: case Opcodes.ISHL: case Opcodes.ISHR: case Opcodes.IUSHR: case Opcodes.IAND: case Opcodes.IOR: case Opcodes.IXOR: case Opcodes.L2I: case Opcodes.D2I: case Opcodes.FCMPL: case Opcodes.FCMPG: pop(2); push(InferredType.INT); break; case Opcodes.LADD: case Opcodes.LSUB: case Opcodes.LMUL: case Opcodes.LDIV: case Opcodes.LREM: case Opcodes.LAND: case Opcodes.LOR: case Opcodes.LXOR: pop(4); push(InferredType.LONG); push(InferredType.TOP); break; case Opcodes.LSHL: case Opcodes.LSHR: case Opcodes.LUSHR: pop(3); push(InferredType.LONG); push(InferredType.TOP); break; case Opcodes.I2L: case Opcodes.F2L: pop(); push(InferredType.LONG); push(InferredType.TOP); break; case Opcodes.I2F: pop(); push(InferredType.FLOAT); break; case Opcodes.LCMP: case Opcodes.DCMPG: case Opcodes.DCMPL: pop(4); push(InferredType.INT); break; case Opcodes.I2D: case Opcodes.F2D: pop(); push(InferredType.DOUBLE); push(InferredType.TOP); break; case Opcodes.F2I: case Opcodes.ARRAYLENGTH: pop(); push(InferredType.INT); break; case Opcodes.FALOAD: case Opcodes.FADD: case Opcodes.FSUB: case Opcodes.FMUL: case Opcodes.FDIV: case Opcodes.FREM: case Opcodes.L2F: case Opcodes.D2F: pop(2); push(InferredType.FLOAT); break; case Opcodes.DADD: case Opcodes.DSUB: case Opcodes.DMUL: case Opcodes.DDIV: case Opcodes.DREM: pop(4); push(InferredType.DOUBLE); push(InferredType.TOP); break; default: throw new RuntimeException("Unhandled opcode " + opcode); } super.visitInsn(opcode); }
From source file:com.google.devtools.build.wireless.testing.java.injector.WhiteBoxMethodAdapter.java
License:Apache License
/** * Injects methods call by logging invocation time and parameters. * //from w w w.jav a 2 s. c om * @see org.objectweb.asm.MethodAdapter#visitCode() */ @Override public void visitCode() { mv.visitInsn(Opcodes.ICONST_0); stackServant.store("I", accessedFieldOwnerIndexInStack); mv.visitInsn(Opcodes.DCONST_0); stackServant.store("D", accessedFieldValueIndexInStack); if (matchOwnerClass && matchMethod) { mv.visitInsn(Opcodes.LCONST_0); stackServant.store("J", timeIndexInStack); logger.info("\t[WhiteBox][Method call]: " + methodName + " " + description); printServant.startPrinting(); printServant.printString("[Call]\t"); // The init method has some problem with 'this' so it is considered static if (stackServant.isStatic() || methodName.equals("<init>")) { printServant.printString(ownerClass); } else { stackServant.loadThis(); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, ownerClass, "toString", "()L" + ClassNames.JAVA_LANG_STRING + ";"); printServant.print("L" + ClassNames.JAVA_LANG_STRING + ";"); } printServant.printString("." + methodName + " Arguments: "); for (int i = 0; i < stackServant.getArgumentSize(); i++) { stackServant.loadArgumentAt(i); printServant.print(stackServant.getArgumentTypeAt(i)); printServant.printString("; "); } printServant.printString(" Invoked: "); timeServant.loadCurrentTimeMillis(); printServant.println("J"); // time timeServant.startCountingTime(timeIndexInStack); // saving and printing printServant.stopPrinting(); } mv.visitCode(); }
From source file:com.google.test.metric.asm.MethodVisitorBuilder.java
License:Apache License
public void visitInsn(final int opcode) { switch (opcode) { case Opcodes.ACONST_NULL: recorder.add(new Runnable() { public void run() { block.addOp(new Load(lineNumber, new Constant(null, JavaType.OBJECT))); }// w w w . ja v a 2 s. co m }); break; case Opcodes.ICONST_M1: case Opcodes.ICONST_0: case Opcodes.ICONST_1: case Opcodes.ICONST_2: case Opcodes.ICONST_3: case Opcodes.ICONST_4: case Opcodes.ICONST_5: loadConstant(opcode - Opcodes.ICONST_M1 - 1, JavaType.INT); break; case Opcodes.LCONST_0: case Opcodes.LCONST_1: loadConstant(opcode - Opcodes.LCONST_0, JavaType.LONG); break; case Opcodes.FCONST_0: case Opcodes.FCONST_1: case Opcodes.FCONST_2: loadConstant(opcode - Opcodes.FCONST_0, JavaType.FLOAT); break; case Opcodes.DCONST_0: case Opcodes.DCONST_1: loadConstant(opcode - Opcodes.DCONST_0, JavaType.DOUBLE); break; case Opcodes.IALOAD: recordArrayLoad(JavaType.INT); break; case Opcodes.LALOAD: recordArrayLoad(JavaType.LONG); break; case Opcodes.FALOAD: recordArrayLoad(JavaType.FLOAT); break; case Opcodes.DALOAD: recordArrayLoad(JavaType.DOUBLE); break; case Opcodes.AALOAD: recordArrayLoad(JavaType.OBJECT); break; case Opcodes.BALOAD: recordArrayLoad(JavaType.BYTE); break; case Opcodes.CALOAD: recordArrayLoad(JavaType.CHAR); break; case Opcodes.SALOAD: recordArrayLoad(JavaType.SHORT); break; case Opcodes.IASTORE: recordArrayStore(JavaType.INT); break; case Opcodes.LASTORE: recordArrayStore(JavaType.LONG); break; case Opcodes.FASTORE: recordArrayStore(JavaType.FLOAT); break; case Opcodes.DASTORE: recordArrayStore(JavaType.DOUBLE); break; case Opcodes.AASTORE: recordArrayStore(JavaType.OBJECT); break; case Opcodes.BASTORE: recordArrayStore(JavaType.BYTE); break; case Opcodes.CASTORE: recordArrayStore(JavaType.CHAR); break; case Opcodes.SASTORE: recordArrayStore(JavaType.SHORT); break; case Opcodes.POP: case Opcodes.POP2: recorder.add(new Runnable() { public void run() { block.addOp(new Pop(lineNumber, opcode - Opcodes.POP + 1)); } }); break; case Opcodes.DUP: case Opcodes.DUP_X1: case Opcodes.DUP_X2: recorder.add(new Runnable() { public void run() { int offset = opcode - Opcodes.DUP; block.addOp(new Duplicate(lineNumber, offset)); } }); break; case Opcodes.DUP2: case Opcodes.DUP2_X1: case Opcodes.DUP2_X2: recorder.add(new Runnable() { public void run() { block.addOp(new Duplicate2(lineNumber, opcode - Opcodes.DUP2)); } }); break; case Opcodes.SWAP: recorder.add(new Runnable() { public void run() { block.addOp(new Swap(lineNumber)); } }); break; case Opcodes.IRETURN: _return(JavaType.INT); break; case Opcodes.FRETURN: _return(JavaType.FLOAT); break; case Opcodes.ARETURN: _return(JavaType.OBJECT); break; case Opcodes.LRETURN: _return(JavaType.LONG); break; case Opcodes.DRETURN: _return(JavaType.DOUBLE); break; case Opcodes.ATHROW: recorder.add(new Runnable() { public void run() { block.addOp(new Throw(lineNumber)); } }); break; case Opcodes.RETURN: _return(JavaType.VOID); break; case Opcodes.LCMP: operation("cmp", JavaType.LONG, JavaType.LONG, JavaType.INT); break; case Opcodes.FCMPL: operation("cmpl", JavaType.FLOAT, JavaType.FLOAT, JavaType.INT); break; case Opcodes.FCMPG: operation("cmpg", JavaType.FLOAT, JavaType.FLOAT, JavaType.INT); break; case Opcodes.DCMPL: operation("cmpl", JavaType.DOUBLE, JavaType.DOUBLE, JavaType.INT); break; case Opcodes.DCMPG: operation("cmpg", JavaType.DOUBLE, JavaType.DOUBLE, JavaType.INT); break; case Opcodes.LSHL: operation("shl", JavaType.LONG, JavaType.INT, JavaType.LONG); break; case Opcodes.LSHR: operation("shr", JavaType.LONG, JavaType.INT, JavaType.LONG); break; case Opcodes.LUSHR: operation("ushr", JavaType.LONG, JavaType.INT, JavaType.LONG); break; case Opcodes.LADD: operation("add", JavaType.LONG, JavaType.LONG, JavaType.LONG); break; case Opcodes.LSUB: operation("sub", JavaType.LONG, JavaType.LONG, JavaType.LONG); break; case Opcodes.LDIV: operation("div", JavaType.LONG, JavaType.LONG, JavaType.LONG); break; case Opcodes.LREM: operation("rem", JavaType.LONG, JavaType.LONG, JavaType.LONG); break; case Opcodes.LAND: operation("and", JavaType.LONG, JavaType.LONG, JavaType.LONG); break; case Opcodes.LOR: operation("or", JavaType.LONG, JavaType.LONG, JavaType.LONG); break; case Opcodes.LXOR: operation("xor", JavaType.LONG, JavaType.LONG, JavaType.LONG); break; case Opcodes.LMUL: operation("mul", JavaType.LONG, JavaType.LONG, JavaType.LONG); break; case Opcodes.FADD: operation("add", JavaType.FLOAT, JavaType.FLOAT, JavaType.FLOAT); break; case Opcodes.FSUB: operation("sub", JavaType.FLOAT, JavaType.FLOAT, JavaType.FLOAT); break; case Opcodes.FMUL: operation("mul", JavaType.FLOAT, JavaType.FLOAT, JavaType.FLOAT); break; case Opcodes.FREM: operation("rem", JavaType.FLOAT, JavaType.FLOAT, JavaType.FLOAT); break; case Opcodes.FDIV: operation("div", JavaType.FLOAT, JavaType.FLOAT, JavaType.FLOAT); break; case Opcodes.ISHL: operation("shl", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.ISHR: operation("shr", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.IUSHR: operation("ushr", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.IADD: operation("add", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.ISUB: operation("sub", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.IMUL: operation("mul", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.IDIV: operation("div", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.IREM: operation("rem", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.IAND: operation("and", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.IOR: operation("or", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.IXOR: operation("xor", JavaType.INT, JavaType.INT, JavaType.INT); break; case Opcodes.DSUB: operation("sub", JavaType.DOUBLE, JavaType.DOUBLE, JavaType.DOUBLE); break; case Opcodes.DADD: operation("add", JavaType.DOUBLE, JavaType.DOUBLE, JavaType.DOUBLE); break; case Opcodes.DMUL: operation("mul", JavaType.DOUBLE, JavaType.DOUBLE, JavaType.DOUBLE); break; case Opcodes.DDIV: operation("div", JavaType.DOUBLE, JavaType.DOUBLE, JavaType.DOUBLE); break; case Opcodes.DREM: operation("rem", JavaType.DOUBLE, JavaType.DOUBLE, JavaType.DOUBLE); break; case Opcodes.L2I: convert(JavaType.LONG, JavaType.INT); break; case Opcodes.L2F: convert(JavaType.LONG, JavaType.FLOAT); break; case Opcodes.L2D: convert(JavaType.LONG, JavaType.DOUBLE); break; case Opcodes.LNEG: operation("neg", JavaType.LONG, null, JavaType.LONG); break; case Opcodes.F2I: convert(JavaType.FLOAT, JavaType.INT); break; case Opcodes.F2L: convert(JavaType.FLOAT, JavaType.LONG); break; case Opcodes.FNEG: operation("neg", JavaType.FLOAT, null, JavaType.FLOAT); break; case Opcodes.F2D: convert(JavaType.FLOAT, JavaType.DOUBLE); break; case Opcodes.D2I: convert(JavaType.DOUBLE, JavaType.INT); break; case Opcodes.D2L: convert(JavaType.DOUBLE, JavaType.LONG); break; case Opcodes.D2F: convert(JavaType.DOUBLE, JavaType.FLOAT); break; case Opcodes.DNEG: operation("neg", JavaType.DOUBLE, null, JavaType.DOUBLE); break; case Opcodes.I2L: convert(JavaType.INT, JavaType.LONG); break; case Opcodes.I2F: convert(JavaType.INT, JavaType.FLOAT); break; case Opcodes.I2D: convert(JavaType.INT, JavaType.DOUBLE); break; case Opcodes.I2B: convert(JavaType.INT, JavaType.BYTE); break; case Opcodes.I2C: convert(JavaType.INT, JavaType.CHAR); break; case Opcodes.I2S: convert(JavaType.INT, JavaType.SHORT); break; case Opcodes.INEG: operation("neg", JavaType.INT, null, JavaType.INT); break; case Opcodes.ARRAYLENGTH: operation("arraylength", JavaType.OBJECT.toArray(), null, JavaType.INT); break; case Opcodes.MONITORENTER: recorder.add(new Runnable() { public void run() { block.addOp(new MonitorEnter(lineNumber)); } }); break; case Opcodes.MONITOREXIT: recorder.add(new Runnable() { public void run() { block.addOp(new MonitorExit(lineNumber)); } }); break; case Opcodes.NOP: recorder.add(new Runnable() { public void run() { block.addOp(new Transform(lineNumber, "NOP", null, null, null)); } }); } }
From source file:com.liferay.portal.nio.intraband.proxy.IntrabandProxyUtilTest.java
License:Open Source License
private void _doTestCreateProxyMethodNode(Method method, int index, String skeletonId, String stubInternalName) { MethodNode proxyMethodNode = IntrabandProxyUtil.createProxyMethodNode(method, index, skeletonId, Type.getType(stubInternalName)); _assertMethodNodeSignature(proxyMethodNode, method.getModifiers() & ~Modifier.ABSTRACT, method.getName(), Type.getMethodDescriptor(method), method.getExceptionTypes()); InsnList insnList = proxyMethodNode.instructions; Iterator<AbstractInsnNode> iterator = insnList.iterator(); // NEW com/liferay/portal/kernel/io/Serializer _assertTypeInsnNode(iterator.next(), Opcodes.NEW, Serializer.class); // DUP//from ww w. j a va2 s. c o m _assertInsnNode(iterator.next(), Opcodes.DUP); // INVOKESPECIAL com/liferay/portal/kernel/io/Serializer <init> ()V _assertMethodInsnNode(iterator.next(), Opcodes.INVOKESPECIAL, Type.getInternalName(Serializer.class), "<init>", Type.VOID_TYPE); // ASTORE argumentsSize Type methodType = Type.getType(method); int argumentsAndReturnSizes = methodType.getArgumentsAndReturnSizes(); int argumentsSize = argumentsAndReturnSizes >> 2; _assertVarInsnNode(iterator.next(), Opcodes.ASTORE, argumentsSize); // ALOAD argumentsSize _assertVarInsnNode(iterator.next(), Opcodes.ALOAD, argumentsSize); // LDC skeletonId _assertLdcInsnNode(iterator.next(), Opcodes.LDC, skeletonId); // INVOKEVIRTUAL com/liferay/portal/kernel/io/Serializer writeString // (Ljava/lang/String;)V _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Serializer.class), "writeString", Type.VOID_TYPE, Type.getType(String.class)); // ALOAD argumentsSize _assertVarInsnNode(iterator.next(), Opcodes.ALOAD, argumentsSize); // ALOAD 0 _assertVarInsnNode(iterator.next(), Opcodes.ALOAD, 0); // GETFIELD stubInternalName _id Ljava/lang/String; _assertFieldInsnNode(iterator.next(), Opcodes.GETFIELD, stubInternalName, "_id", String.class); // INVOKEVIRTUAL com/liferay/portal/kernel/io/Serializer writeString // (Ljava/lang/String;)V _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Serializer.class), "writeString", Type.VOID_TYPE, Type.getType(String.class)); // ALOAD argumentsSize _assertVarInsnNode(iterator.next(), Opcodes.ALOAD, argumentsSize); if (index <= 5) { // ICONST_index _assertInsnNode(iterator.next(), Opcodes.ICONST_0 + index); } else { // BIPUSH index _assertIntInsnNode(iterator.next(), Opcodes.BIPUSH, index); } // INVOKEVIRTUAL com/liferay/portal/kernel/io/Serializer writeInt (I)V _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Serializer.class), "writeInt", Type.VOID_TYPE, Type.INT_TYPE); Class<?>[] parameterTypes = method.getParameterTypes(); int offset = 1; for (int i = 0; i < parameterTypes.length; i++) { Class<?> parameterClass = parameterTypes[i]; // ALOAD argumentsSize _assertVarInsnNode(iterator.next(), Opcodes.ALOAD, argumentsSize); // xLOAD i Type parameterType = Type.getType(parameterClass); _assertVarInsnNode(iterator.next(), parameterType.getOpcode(Opcodes.ILOAD), offset); offset += parameterType.getSize(); if (parameterClass.isPrimitive() || (parameterClass == String.class)) { String name = TextFormatter.format(parameterClass.getSimpleName(), TextFormatter.G); _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Serializer.class), "write".concat(name), Type.VOID_TYPE, parameterType); } else { _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Serializer.class), "writeObject", Type.VOID_TYPE, Type.getType(Serializable.class)); } } // ALOAD 0 _assertVarInsnNode(iterator.next(), Opcodes.ALOAD, 0); // ALOAD argumentsSize _assertVarInsnNode(iterator.next(), Opcodes.ALOAD, argumentsSize); Class<?> returnClass = method.getReturnType(); Type returnType = Type.getType(returnClass); if (returnClass == void.class) { // INVOKESPECIAL stubInternalName _send // (Lcom/liferay/portal/kernel/io/Serializer;)V _assertMethodInsnNode(iterator.next(), Opcodes.INVOKESPECIAL, stubInternalName, "_send", Type.VOID_TYPE, Type.getType(Serializer.class)); _assertInsnNode(iterator.next(), Opcodes.RETURN); } else { // INVOKESPECIAL stubInternalName _syncSend // (Lcom/liferay/portal/kernel/io/Serializer;)Ljava/io/Serializable; _assertMethodInsnNode(iterator.next(), Opcodes.INVOKESPECIAL, stubInternalName, "_syncSend", Type.getType(Serializable.class), Type.getType(Serializer.class)); if (returnClass.isPrimitive()) { // ASTORE argumentsSize + 1 _assertVarInsnNode(iterator.next(), Opcodes.ASTORE, argumentsSize + 1); // ALOAD argumentsSize + 1 _assertVarInsnNode(iterator.next(), Opcodes.ALOAD, argumentsSize + 1); // IFNULL nullCheckLabel LabelNode nullCheckLabelNode = _assertJumpInsnNode(iterator.next(), Opcodes.IFNULL); // ALOAD argumentsSize + 1 _assertVarInsnNode(iterator.next(), Opcodes.ALOAD, argumentsSize + 1); // CHECKCAST returnType _assertTypeInsnNode(iterator.next(), Opcodes.CHECKCAST, _autoboxingMap.get(returnClass)); if (returnClass == boolean.class) { // INVOKEVIRTUAL java/lang/Boolean booleanValue ()Z _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Boolean.class), "booleanValue", Type.BOOLEAN_TYPE); } else if (returnClass == byte.class) { // INVOKEVIRTUAL java/lang/Number intValue ()I _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Number.class), "intValue", Type.INT_TYPE); } else if (returnClass == char.class) { // INVOKEVIRTUAL java/lang/Character charValue ()C _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Character.class), "charValue", Type.CHAR_TYPE); } else if (returnClass == double.class) { // INVOKEVIRTUAL java/lang/Number doubleValue ()D _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Number.class), "doubleValue", Type.DOUBLE_TYPE); } else if (returnClass == float.class) { // INVOKEVIRTUAL java/lang/Number floatValue ()F _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Number.class), "floatValue", Type.FLOAT_TYPE); } else if (returnClass == int.class) { // INVOKEVIRTUAL java/lang/Number intValue ()I _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Number.class), "intValue", Type.INT_TYPE); } else if (returnClass == long.class) { // INVOKEVIRTUAL java/lang/Number longValue ()J _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Number.class), "longValue", Type.LONG_TYPE); } else if (returnClass == short.class) { // INVOKEVIRTUAL java/lang/Number intValue ()I _assertMethodInsnNode(iterator.next(), Opcodes.INVOKEVIRTUAL, Type.getInternalName(Number.class), "intValue", Type.INT_TYPE); } // xRETURN _assertInsnNode(iterator.next(), returnType.getOpcode(Opcodes.IRETURN)); // nullCheckLabel Assert.assertSame(nullCheckLabelNode, iterator.next()); // xRETURN null/0 if (!returnClass.isPrimitive()) { _assertInsnNode(iterator.next(), Opcodes.ACONST_NULL); _assertInsnNode(iterator.next(), Opcodes.ARETURN); } else if (returnClass == void.class) { _assertInsnNode(iterator.next(), Opcodes.RETURN); } else if (returnClass == float.class) { _assertInsnNode(iterator.next(), Opcodes.FCONST_0); _assertInsnNode(iterator.next(), Opcodes.FRETURN); } else if (returnClass == double.class) { _assertInsnNode(iterator.next(), Opcodes.DCONST_0); _assertInsnNode(iterator.next(), Opcodes.DRETURN); } else if (returnClass == long.class) { _assertInsnNode(iterator.next(), Opcodes.LCONST_0); _assertInsnNode(iterator.next(), Opcodes.LRETURN); } else { _assertInsnNode(iterator.next(), Opcodes.ICONST_0); _assertInsnNode(iterator.next(), Opcodes.IRETURN); } } else { if (returnClass != Object.class) { // CHECKCAST _assertTypeInsnNode(iterator.next(), Opcodes.CHECKCAST, returnClass); } // ARETURN _assertInsnNode(iterator.next(), Opcodes.ARETURN); } } Assert.assertFalse(iterator.hasNext()); }