List of usage examples for org.objectweb.asm Label Label
public Label()
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); } }; }