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.IfTests.java
License:Open Source License
@Test public void testMultipleOr() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*ww w. jav a 2 s . c o m*/ Label ret = new Label(); Label body = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFNE, body); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFNE, body); mv.visitVarInsn(ILOAD, 2); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, ret, 0); mv.visitLocalVariable("b", "Z", null, start, ret, 1); mv.visitLocalVariable("c", "Z", null, start, ret, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a || b || c) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testOrAnd() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//from ww w . ja v a2 s . c om Label ret = new Label(); Label body = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFNE, body); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, ret); mv.visitVarInsn(ILOAD, 2); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, ret, 0); mv.visitLocalVariable("b", "Z", null, start, ret, 1); mv.visitLocalVariable("c", "Z", null, start, ret, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a || b && c) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testAndOr() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);// w ww . j av a 2s . c om Label ret = new Label(); Label body = new Label(); Label l1 = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, l1); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFNE, body); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 2); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, ret, 0); mv.visitLocalVariable("b", "Z", null, start, ret, 1); mv.visitLocalVariable("c", "Z", null, start, ret, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a && b || c) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testPOS() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//ww w .ja va 2 s .c om Label ret = new Label(); Label body = new Label(); Label l1 = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 2); mv.visitJumpInsn(IFNE, body); mv.visitVarInsn(ILOAD, 3); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, ret, 0); mv.visitLocalVariable("b", "Z", null, start, ret, 1); mv.visitLocalVariable("c", "Z", null, start, ret, 2); mv.visitLocalVariable("d", "Z", null, start, ret, 3); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if ((a || b) && (c || d)) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testSOP() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//from w ww .ja va2 s .c o m Label ret = new Label(); Label body = new Label(); Label l1 = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, l1); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFNE, body); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 2); mv.visitJumpInsn(IFEQ, ret); mv.visitVarInsn(ILOAD, 3); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, ret, 0); mv.visitLocalVariable("b", "Z", null, start, ret, 1); mv.visitLocalVariable("c", "Z", null, start, ret, 2); mv.visitLocalVariable("d", "Z", null, start, ret, 3); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a && b || c && d) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testCommonFactor() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZZZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*from w ww . j a v a 2 s. c om*/ Label ret = new Label(); Label body = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, l2); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 2); mv.visitJumpInsn(IFNE, body); mv.visitLabel(l2); mv.visitVarInsn(ILOAD, 3); mv.visitJumpInsn(IFEQ, ret); mv.visitVarInsn(ILOAD, 4); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, ret, 0); mv.visitLocalVariable("b", "Z", null, start, ret, 1); mv.visitLocalVariable("c", "Z", null, start, ret, 2); mv.visitLocalVariable("d", "Z", null, start, ret, 3); mv.visitLocalVariable("e", "Z", null, start, ret, 4); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if ((a || b) && c || d && e) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testElse() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(Z)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//from w w w. j a v a 2 s.c om Label end = new Label(); Label else_ = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, else_); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitJumpInsn(GOTO, end); mv.visitLabel(else_); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, end, 0); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "} else {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testNestedIf() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);// w w w. j a v a 2s.c o m Label end = new Label(); Label else_ = new Label(); Label inner_else = new Label(); Label inner_end = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, else_); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, inner_else); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitJumpInsn(GOTO, inner_end); mv.visitLabel(inner_else); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(inner_end); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitJumpInsn(GOTO, end); mv.visitLabel(else_); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, end, 0); mv.visitLocalVariable("b", "Z", null, start, end, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a) {\n" + " if (b) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + " } else {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + " }\n\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "} else {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testNestedIf2() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);// w ww . jav a 2s. c o m Label end = new Label(); Label else_ = new Label(); Label inner_else = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, else_); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, inner_else); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(inner_else); mv.visitJumpInsn(GOTO, end); mv.visitLabel(else_); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, end, 0); mv.visitLocalVariable("b", "Z", null, start, end, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a) {\n" + " if (b) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + " }\n" + "} else {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testNestedIf2Optimized() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//w ww .j av a 2 s .co m Label end = new Label(); Label else_ = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, else_); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, end); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitJumpInsn(GOTO, end); mv.visitLabel(else_); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(end); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, end, 0); mv.visitLocalVariable("b", "Z", null, start, end, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a) {\n" + " if (b) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + " }\n" + "} else {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }