package me.august.lumen.compile.parser.ast.stmt; import me.august.lumen.compile.analyze.ASTVisitor; import me.august.lumen.compile.analyze.VisitorConsumer; import me.august.lumen.compile.codegen.BuildContext; import me.august.lumen.compile.parser.ast.CodeBlock; import org.objectweb.asm.MethodVisitor; import java.util.ArrayList; import java.util.List; public class Body implements CodeBlock, VisitorConsumer { private List<CodeBlock> children; public Body() { this(new ArrayList<>()); } public Body(List<CodeBlock> children) { this.children = children; } public Body(CodeBlock child) { // initialize `children` this(); children.add(child); } public void addCode(CodeBlock code) { children.add(code); } public List<CodeBlock> getChildren() { return children; } public void setChildren(List<CodeBlock> children) { this.children = children; } @Override public void generate(MethodVisitor visitor, BuildContext context) { for (CodeBlock code : children) { code.generate(visitor, context); } } @Override public void accept(ASTVisitor visitor) { visitor.visitBody(this); for (CodeBlock code : children) { if (code instanceof VisitorConsumer) ((VisitorConsumer) code).accept(visitor); } visitor.visitBodyEnd(this); } @Override public String toString() { return "Body{" + "children=" + children + '}'; } }