package me.august.lumen.compile.parser.ast.expr; import me.august.lumen.compile.codegen.BuildContext; import me.august.lumen.compile.parser.ast.Typed; import me.august.lumen.compile.resolve.type.UnresolvedType; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; // NOTE: unlike most other expressions, this expression type // has the *same* precedence as RelExpr. They have been separated // for ease of use. public class InstanceofExpr extends Typed implements Expression { private Expression value; public InstanceofExpr(Expression value, UnresolvedType unresolvedType) { super(unresolvedType); this.value = value; } @Override public void generate(MethodVisitor visitor, BuildContext context) { value.generate(visitor, context); visitor.visitTypeInsn(Opcodes.INSTANCEOF, getResolvedType().getInternalName()); } @Override public Type expressionType() { return Type.BOOLEAN_TYPE; } @Override public Expression[] getChildren() { return new Expression[]{value}; } }