List of usage examples for org.objectweb.asm MethodVisitor visitLocalVariable
public void visitLocalVariable(final String name, final String descriptor, final String signature, final Label start, final Label end, final int index)
From source file:org.spongepowered.test.decompile.OperatorTests.java
License:Open Source License
@Test public void testShl() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(III)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//from w ww . ja v a 2 s .c o m Label end = new Label(); mv.visitIntInsn(ILOAD, 1); mv.visitIntInsn(ILOAD, 2); mv.visitInsn(ISHL); mv.visitIntInsn(ISTORE, 0); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("i", "I", null, start, end, 0); mv.visitLocalVariable("a", "I", null, start, end, 1); mv.visitLocalVariable("b", "I", null, start, end, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "i = a << b;"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.OperatorTests.java
License:Open Source License
@Test public void testFloatCompare() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZFF)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*ww w. ja v a 2s. co m*/ Label end = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitIntInsn(FLOAD, 1); mv.visitIntInsn(FLOAD, 2); mv.visitInsn(FCMPG); mv.visitJumpInsn(IFGT, l1); mv.visitInsn(ICONST_1); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l1); mv.visitInsn(ICONST_0); mv.visitLabel(l2); mv.visitIntInsn(ISTORE, 0); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("i", "Z", null, start, end, 0); mv.visitLocalVariable("a", "F", null, start, end, 1); mv.visitLocalVariable("b", "F", null, start, end, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "i = a <= b;"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.TernaryTests.java
License:Open Source License
@Test public void testSimple() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZI)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*from www. j ava2 s .c o m*/ Label end = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitIntInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, l1); mv.visitIntInsn(BIPUSH, 6); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l1); mv.visitInsn(ICONST_3); mv.visitLabel(l2); mv.visitIntInsn(ISTORE, 1); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, end, 0); mv.visitLocalVariable("i", "I", null, start, end, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "i = a ? 6 : 3;"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.TernaryTests.java
License:Open Source License
@Test public void testToField() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZI)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*from w w w .j a va2s . co m*/ Label end = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitIntInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, l1); mv.visitIntInsn(BIPUSH, 6); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l1); mv.visitInsn(ICONST_3); mv.visitLabel(l2); mv.visitFieldInsn(PUTSTATIC, THIS_TYPE.getInternalName(), "afield", "I"); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, end, 0); mv.visitLocalVariable("i", "I", null, start, end, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "org.spongepowered.test.decompile.TernaryTests.afield = a ? 6 : 3;"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.TernaryTests.java
License:Open Source License
@Test public void testNested() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZIZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//from www .jav a 2 s . c om Label end = new Label(); Label l1 = new Label(); Label l2 = new Label(); Label l3 = new Label(); mv.visitIntInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, l1); mv.visitIntInsn(ILOAD, 2); mv.visitJumpInsn(IFEQ, l3); mv.visitInsn(ICONST_4); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l3); mv.visitInsn(ICONST_5); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l1); mv.visitInsn(ICONST_3); mv.visitLabel(l2); mv.visitIntInsn(ISTORE, 1); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, end, 0); mv.visitLocalVariable("i", "I", null, start, end, 1); mv.visitLocalVariable("b", "Z", null, start, end, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "i = a ? b ? 4 : 5 : 3;"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.TernaryTests.java
License:Open Source License
@Test public void testNested2() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZIZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//from w w w . jav a 2s .co m Label end = new Label(); Label l1 = new Label(); Label l2 = new Label(); Label l3 = new Label(); mv.visitIntInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, l1); mv.visitInsn(ICONST_3); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l1); mv.visitIntInsn(ILOAD, 2); mv.visitJumpInsn(IFEQ, l3); mv.visitInsn(ICONST_4); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l3); mv.visitInsn(ICONST_5); mv.visitLabel(l2); mv.visitIntInsn(ISTORE, 1); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, end, 0); mv.visitLocalVariable("i", "I", null, start, end, 1); mv.visitLocalVariable("b", "Z", null, start, end, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "i = a ? 3 : b ? 4 : 5;"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.TernaryTests.java
License:Open Source License
@Test public void testReturned() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZI)I"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*w w w .j ava 2 s. c om*/ Label end = new Label(); Label l1 = new Label(); mv.visitIntInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, l1); mv.visitIntInsn(BIPUSH, 6); mv.visitJumpInsn(GOTO, end); mv.visitLabel(l1); mv.visitInsn(ICONST_3); mv.visitLabel(end); mv.visitInsn(IRETURN); mv.visitLocalVariable("a", "Z", null, start, end, 0); mv.visitLocalVariable("i", "I", null, start, end, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "return a ? 6 : 3;"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.TryCatchTests.java
License:Open Source License
@Test public void testTryCatch() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "()V"); MethodVisitor mv = builder.getGenerator(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); Label l4 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/NullPointerException"); mv.visitLabel(l0);/*from ww w. j a va 2 s. c o m*/ mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(l1); mv.visitJumpInsn(GOTO, l4); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/NullPointerException", "printStackTrace", "()V", false); mv.visitLabel(l4); mv.visitInsn(RETURN); Label l5 = new Label(); mv.visitLabel(l5); mv.visitLocalVariable("e", "Ljava/lang/NullPointerException;", null, l2, l5, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "try {\n" + " org.spongepowered.test.decompile.TryCatchTests.body();\n" + "} catch (NullPointerException e) {\n" + " e.printStackTrace();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.TryCatchTests.java
License:Open Source License
@Test public void testTryMultiCatch() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "()V"); MethodVisitor mv = builder.getGenerator(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); Label l3 = new Label(); Label l4 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/NullPointerException"); mv.visitTryCatchBlock(l0, l1, l3, "java/lang/OutOfMemoryError"); mv.visitLabel(l0);//from w w w.j av a 2s .c o m mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(l1); mv.visitJumpInsn(GOTO, l4); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/NullPointerException", "printStackTrace", "()V", false); mv.visitJumpInsn(GOTO, l4); mv.visitLabel(l3); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/OutOfMemoryError", "printStackTrace", "()V", false); mv.visitLabel(l4); mv.visitInsn(RETURN); Label l5 = new Label(); mv.visitLabel(l5); mv.visitLocalVariable("e", "Ljava/lang/NullPointerException;", null, l2, l3, 2); mv.visitLocalVariable("e", "Ljava/lang/OutOfMemoryError;", null, l3, l4, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "try {\n" + " org.spongepowered.test.decompile.TryCatchTests.body();\n" + "} catch (NullPointerException e) {\n" + " e.printStackTrace();\n" + "} catch (OutOfMemoryError e) {\n" + " e.printStackTrace();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.TryCatchTests.java
License:Open Source License
@Test public void testTryPipeCatch() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "()V"); MethodVisitor mv = builder.getGenerator(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); Label l4 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/NullPointerException"); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/OutOfMemoryError"); mv.visitLabel(l0);/* ww w . j a v a 2 s.co m*/ mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(l1); mv.visitJumpInsn(GOTO, l4); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/NullPointerException", "printStackTrace", "()V", false); mv.visitLabel(l4); mv.visitInsn(RETURN); Label l5 = new Label(); mv.visitLabel(l5); mv.visitLocalVariable("e", "Ljava/lang/NullPointerException;", null, l2, l4, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "try {\n" + " org.spongepowered.test.decompile.TryCatchTests.body();\n" + "} catch (NullPointerException | OutOfMemoryError e) {\n" + " e.printStackTrace();\n" + "}"; Assert.assertEquals(good, insn); }