Example usage for org.objectweb.asm Label Label

List of usage examples for org.objectweb.asm Label Label

Introduction

In this page you can find the example usage for org.objectweb.asm Label Label.

Prototype

public Label() 

Source Link

Document

Constructs a new label.

Usage

From source file:com.yahoo.yqlplus.engine.internal.bytecode.CodeEmitterTest.java

@Test
public void requireWidenAdd() throws Exception {
    UnitGenerator unit = new UnitGenerator("foo", source);
    unit.addInterface(Callable.class);
    MethodGenerator gen = unit.createMethod("call");
    gen.setReturnType(AnyTypeWidget.getInstance());
    final BytecodeExpression leftExpr = source.constant(1);
    final BytecodeExpression rightExpr = source.constant(1L);

    gen.add(new BytecodeSequence() {
        @Override//  w w w  . j  av a  2 s. co m
        public void generate(CodeEmitter code) {
            Label hasNull = new Label();
            CodeEmitter.Unification unify = code.unifiedEmit(leftExpr, rightExpr, hasNull);
            code.getMethodVisitor().visitInsn(Opcodes.LADD);
            code.box(BaseTypeAdapter.INT64);
            code.getMethodVisitor().visitInsn(Opcodes.ARETURN);
            if (unify.nullPossible) {
                code.getMethodVisitor().visitLabel(hasNull);
                code.getMethodVisitor().visitInsn(Opcodes.ACONST_NULL);
                code.getMethodVisitor().visitInsn(Opcodes.ARETURN);
            }
        }
    });

    source.build();
    Class<? extends Callable> clazz = (Class<? extends Callable>) source.getGeneratedClass(unit);
    Callable c = clazz.newInstance();
    Assert.assertEquals(2L, c.call());
}

From source file:com.yahoo.yqlplus.engine.internal.bytecode.CodeEmitterTest.java

@Test
public void requireFloatAdd() throws Exception {
    UnitGenerator unit = new UnitGenerator("foo", source);
    unit.addInterface(Callable.class);
    MethodGenerator gen = unit.createMethod("call");
    gen.setReturnType(AnyTypeWidget.getInstance());
    final BytecodeExpression leftExpr = source.constant(1);
    final BytecodeExpression rightExpr = source.constant(1.0f);

    gen.add(new BytecodeSequence() {
        @Override//  w  w w  . ja  v a  2  s.  c o  m
        public void generate(CodeEmitter code) {
            Label hasNull = new Label();
            CodeEmitter.Unification unify = code.unifiedEmit(leftExpr, rightExpr, hasNull);
            code.getMethodVisitor().visitInsn(Opcodes.DADD);
            code.box(BaseTypeAdapter.FLOAT64);
            code.getMethodVisitor().visitInsn(Opcodes.ARETURN);
            if (unify.nullPossible) {
                code.getMethodVisitor().visitLabel(hasNull);
                code.getMethodVisitor().visitInsn(Opcodes.ACONST_NULL);
                code.getMethodVisitor().visitInsn(Opcodes.ARETURN);
            }
        }
    });

    source.build();
    Class<? extends Callable> clazz = (Class<? extends Callable>) source.getGeneratedClass(unit);
    Callable c = clazz.newInstance();
    Assert.assertEquals(2.0, c.call());
}

From source file:com.yahoo.yqlplus.engine.internal.bytecode.CodeEmitterTest.java

@Test
public void requireBoxedAdd() throws Exception {
    UnitGenerator unit = new UnitGenerator("foo", source);
    unit.addInterface(Callable.class);
    MethodGenerator gen = unit.createMethod("call");
    gen.setReturnType(AnyTypeWidget.getInstance());
    final BytecodeExpression leftExpr = source.constant(BaseTypeAdapter.INT32.boxed(), 1);
    final BytecodeExpression rightExpr = source.constant(1.0f);

    gen.add(new BytecodeSequence() {
        @Override//w w w .  j a va 2s .c  om
        public void generate(CodeEmitter code) {
            Label hasNull = new Label();
            CodeEmitter.Unification unify = code.unifiedEmit(leftExpr, rightExpr, hasNull);
            code.getMethodVisitor().visitInsn(Opcodes.DADD);
            code.box(BaseTypeAdapter.FLOAT64);
            code.getMethodVisitor().visitInsn(Opcodes.ARETURN);
            if (unify.nullPossible) {
                code.getMethodVisitor().visitLabel(hasNull);
                code.getMethodVisitor().visitInsn(Opcodes.ACONST_NULL);
                code.getMethodVisitor().visitInsn(Opcodes.ARETURN);
            }
        }
    });

    source.build();
    Class<? extends Callable> clazz = (Class<? extends Callable>) source.getGeneratedClass(unit);
    Callable c = clazz.newInstance();
    Assert.assertEquals(2.0, c.call());
}

From source file:com.yahoo.yqlplus.engine.internal.bytecode.CodeEmitterTest.java

@Test
public void requireBoxedNull() throws Exception {
    UnitGenerator unit = new UnitGenerator("foo", source);
    unit.addInterface(Callable.class);
    MethodGenerator gen = unit.createMethod("call");
    gen.setReturnType(AnyTypeWidget.getInstance());
    final BytecodeExpression rightExpr = source.constant(1.0f);

    gen.add(new BytecodeSequence() {
        @Override/* w  ww.ja  v a  2s  . com*/
        public void generate(CodeEmitter code) {
            Label hasNull = new Label();
            CodeEmitter.Unification unify = code.unifiedEmit(new NullExpr(BaseTypeAdapter.INT32.boxed()),
                    rightExpr, hasNull);
            code.getMethodVisitor().visitInsn(Opcodes.DADD);
            code.box(BaseTypeAdapter.FLOAT64);
            code.getMethodVisitor().visitInsn(Opcodes.ARETURN);
            if (unify.nullPossible) {
                code.getMethodVisitor().visitLabel(hasNull);
                code.getMethodVisitor().visitInsn(Opcodes.ACONST_NULL);
                code.getMethodVisitor().visitInsn(Opcodes.ARETURN);
            }
        }
    });

    source.build();
    Class<? extends Callable> clazz = (Class<? extends Callable>) source.getGeneratedClass(unit);
    Callable c = clazz.newInstance();
    Assert.assertNull(c.call());
}

From source file:com.yahoo.yqlplus.engine.internal.bytecode.types.gambit.BlockAdapter.java

@Override
public void jump(BytecodeExpression test, final BytecodeExpression result) {
    final BytecodeExpression testExpr = test;
    final TypeWidget type = testExpr.getType();
    body.add(new BytecodeSequence() {
        @Override/*from w w w.j  a  v  a2 s  .  co  m*/
        public void generate(CodeEmitter code) {
            code.exec(testExpr);
            Label isTrue = new Label();
            Label isFalse = new Label();
            type.getComparisionAdapter().coerceBoolean(code, isTrue, isFalse, isFalse);
            MethodVisitor mv = code.getMethodVisitor();
            mv.visitLabel(isTrue);
            code.exec(result);
            mv.visitJumpInsn(Opcodes.GOTO, body.getEnd());
            mv.visitLabel(isFalse);
        }
    });
}

From source file:com.yahoo.yqlplus.engine.internal.bytecode.types.gambit.BytecodeCatchBuilder.java

@Override
public BytecodeSequence build() {
    return new BytecodeSequence() {
        @Override/*from  www.  ja va  2  s  .c  om*/
        public void generate(CodeEmitter code) {
            MethodVisitor mv = code.getMethodVisitor();
            for (CatchClause catchClause : catchClauses) {
                if (catchClause.exceptionInternalNames.isEmpty()) {
                    mv.visitTryCatchBlock(body.getStart(), body.getEnd(), catchClause.getStart(), null);
                } else {
                    for (String name : catchClause.exceptionInternalNames) {
                        mv.visitTryCatchBlock(body.getStart(), body.getEnd(), catchClause.getStart(), name);
                    }
                }
            }
            Label done = new Label();
            body.generate(code);
            mv.visitJumpInsn(Opcodes.GOTO, done);
            for (CatchClause catchClause : catchClauses.subList(0, catchClauses.size() - 1)) {
                catchClause.generate(code);
                mv.visitJumpInsn(Opcodes.GOTO, done);
            }
            catchClauses.get(catchClauses.size() - 1).generate(code);
            mv.visitLabel(done);
        }
    };
}

From source file:com.yahoo.yqlplus.engine.internal.bytecode.types.gambit.CaseAdapter.java

@Override
public void when(final BytecodeExpression test, final BytecodeExpression value) {
    final TypeWidget type = test.getType();
    resultTypes.add(value.getType());//from w  w  w .j  a v  a  2s . co m
    body.add(new BytecodeSequence() {
        @Override
        public void generate(CodeEmitter code) {
            code.exec(test);
            Label isTrue = new Label();
            Label isFalse = new Label();
            type.getComparisionAdapter().coerceBoolean(code, isTrue, isFalse, isFalse);
            MethodVisitor mv = code.getMethodVisitor();
            mv.visitLabel(isTrue);
            code.exec(value);
            code.cast(unifiedOutputType, value.getType());
            mv.visitJumpInsn(Opcodes.GOTO, end);
            mv.visitLabel(isFalse);
        }
    });
}

From source file:com.yahoo.yqlplus.engine.internal.bytecode.types.gambit.ExpressionHandler.java

@Override
public BytecodeExpression and(Location loc, final List<BytecodeExpression> inputs) {
    return new BaseTypeExpression(BaseTypeAdapter.BOOLEAN) {
        @Override/*from  w  ww .  j a va 2 s .  c  o m*/
        public void generate(CodeEmitter code) {
            MethodVisitor mv = code.getMethodVisitor();
            Label done = new Label();
            Label isFalse = new Label();
            for (BytecodeExpression input : inputs) {
                Label isTrue = new Label();
                code.exec(input);
                input.getType().getComparisionAdapter().coerceBoolean(code, isTrue, isFalse, isFalse);
                mv.visitLabel(isTrue);
            }
            code.emitBooleanConstant(true);
            mv.visitJumpInsn(Opcodes.GOTO, done);
            mv.visitLabel(isFalse);
            code.emitBooleanConstant(false);
            mv.visitLabel(done);
        }
    };
}

From source file:com.yahoo.yqlplus.engine.internal.bytecode.types.gambit.ExpressionHandler.java

@Override
public BytecodeExpression or(Location loc, final List<BytecodeExpression> inputs) {
    return new BaseTypeExpression(BaseTypeAdapter.BOOLEAN) {
        @Override/*from   w ww  .ja v a2s  . c o  m*/
        public void generate(CodeEmitter code) {
            MethodVisitor mv = code.getMethodVisitor();
            Label done = new Label();
            Label isTrue = new Label();
            for (BytecodeExpression input : inputs) {
                Label isFalse = new Label();
                code.exec(input);
                input.getType().getComparisionAdapter().coerceBoolean(code, isTrue, isFalse, isFalse);
                mv.visitLabel(isFalse);
            }
            code.emitBooleanConstant(false);
            mv.visitJumpInsn(Opcodes.GOTO, done);
            mv.visitLabel(isTrue);
            code.emitBooleanConstant(true);
            mv.visitLabel(done);
        }
    };
}

From source file:com.yahoo.yqlplus.engine.internal.bytecode.types.gambit.ExpressionHandler.java

@Override
public BytecodeExpression not(Location loc, final BytecodeExpression input) {
    return new BaseTypeExpression(BaseTypeAdapter.BOOLEAN) {
        @Override/*  w ww .j av  a2 s .co  m*/
        public void generate(CodeEmitter code) {
            MethodVisitor mv = code.getMethodVisitor();
            Label done = new Label();
            Label isTrue = new Label();
            Label isFalse = new Label();
            code.exec(input);
            input.getType().getComparisionAdapter().coerceBoolean(code, isTrue, isFalse, isFalse);
            mv.visitLabel(isFalse);
            code.emitBooleanConstant(true);
            mv.visitJumpInsn(Opcodes.GOTO, done);
            mv.visitLabel(isTrue);
            code.emitBooleanConstant(false);
            mv.visitLabel(done);
        }
    };
}