List of usage examples for org.objectweb.asm Opcodes GOTO
int GOTO
To view the source code for org.objectweb.asm Opcodes GOTO.
Click Source Link
From source file:com.yahoo.yqlplus.engine.internal.bytecode.ClassAdapterGenerator.java
private void generatePutProperty(TypeWidget targetType, final PropertyAdapter propertyAdapter) { MethodGenerator method = createStaticMethod("putProperty"); final BytecodeExpression targetExpr = method.addArgument("target", targetType).read(); final BytecodeExpression propertyName = method.addArgument("property", BaseTypeAdapter.STRING).read(); final BytecodeExpression valueExpr = method.addArgument("value", AnyTypeWidget.getInstance()).read(); method.add(new BytecodeSequence() { @Override/*from www. j av a 2 s . c om*/ public void generate(CodeEmitter code) { Map<String, Label> labelMap = Maps.newLinkedHashMap(); Label done = new Label(); for (PropertyAdapter.Property property : propertyAdapter.getProperties()) { labelMap.put(property.name, new Label()); } propertyName.generate(code); code.emitStringSwitch(labelMap, done, true); MethodVisitor mv = code.getMethodVisitor(); for (PropertyAdapter.Property property : propertyAdapter.getProperties()) { mv.visitLabel(labelMap.get(property.name)); AssignableValue av = propertyAdapter.property(targetExpr, property.name); try { code.exec(av.write(new BytecodeCastExpression(property.type, valueExpr))); } catch (UnsupportedOperationException ignored) { // can't write what isn't writable } mv.visitJumpInsn(Opcodes.GOTO, done); } mv.visitLabel(done); mv.visitInsn(Opcodes.RETURN); } }); }
From source file:com.yahoo.yqlplus.engine.internal.bytecode.types.ArrayTypeWidget.java
@Override public ComparisonAdapter getComparisionAdapter() { return new ComparisonAdapter() { @Override//ww w . j a v a2 s .c o m public void coerceBoolean(CodeEmitter scope, Label isTrue, Label isFalse, Label isNull) { // null or true if (isNullable()) { scope.getMethodVisitor().visitJumpInsn(Opcodes.IFNULL, isNull); } else { scope.pop(ArrayTypeWidget.this); } scope.getMethodVisitor().visitJumpInsn(Opcodes.GOTO, isTrue); } }; }
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/* w ww .j av a 2 s. com*/ 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 w ww . j a v a2 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 av a2 s .c om 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/*ww w . ja va2s . co 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/* w w w.j av a 2s . c om*/ 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 w w .j a va2 s. c om*/ 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); } }; }
From source file:com.yahoo.yqlplus.engine.internal.bytecode.types.gambit.ExpressionHandler.java
@Override public BytecodeExpression bool(Location loc, final BytecodeExpression input) { return new BaseTypeExpression(BaseTypeAdapter.BOOLEAN) { @Override/*from www . j av a 2s.c o m*/ public void generate(CodeEmitter code) { if (input.getType() == BaseTypeAdapter.BOOLEAN) { code.exec(input); } else { 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(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 isNull(Location location, final BytecodeExpression input) { return new BaseTypeExpression(BaseTypeAdapter.BOOLEAN) { @Override// ww w .j av a 2 s .c om public void generate(CodeEmitter code) { MethodVisitor mv = code.getMethodVisitor(); code.exec(input); // it's surprising to not evaluate even if we know input isn't nullable if (input.getType().isPrimitive()) { code.pop(input.getType()); code.emitBooleanConstant(false); } else { Label done = new Label(); Label isNull = new Label(); mv.visitJumpInsn(Opcodes.IFNULL, isNull); code.emitBooleanConstant(false); mv.visitJumpInsn(Opcodes.GOTO, done); mv.visitLabel(isNull); code.emitBooleanConstant(true); mv.visitLabel(done); } } }; }