package me.august.lumen.compile.parser.ast.expr; import me.august.lumen.compile.codegen.BuildContext; import org.objectweb.asm.MethodVisitor; public interface OwnedExpr extends Expression { default Expression getOwner() { return null; } default Expression getTail() { Expression expr = getOwner(); if (expr == null) return this; while (expr instanceof OwnedExpr && ((OwnedExpr) expr).getOwner() != null) { expr = ((OwnedExpr) expr).getTail(); } return expr; } @Override default void generate(MethodVisitor visitor, BuildContext context) { if (getOwner() != null) getOwner().generate(visitor, context); } }