package me.august.lumen.compile.analyze.var;
import me.august.lumen.compile.parser.ast.expr.Expression;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import java.util.function.Consumer;
public class ArrayLengthReference implements VariableReference {
Expression expr;
public ArrayLengthReference(Expression expr) {
this.expr = expr;
}
@Override
public Type getType() {
return Type.INT_TYPE;
}
@Override
public void generateGetCode(MethodVisitor m) {
expr.generate(m, null);
m.visitInsn(Opcodes.ARRAYLENGTH);
}
@Override
public void generateSetCode(MethodVisitor m, Consumer<MethodVisitor> insn) {
throw new RuntimeException("Array length cannot be set");
}
}