Class TreeVisitor

java.lang.Object
icyllis.arc3d.compiler.tree.TreeVisitor
Direct Known Subclasses:
SymbolUsage

public abstract class TreeVisitor extends Object
Utility class to visit every element, statement, and expression in a program IR. This is intended for simple analysis and accumulation, where custom visitation behavior is only needed for a limited set of expression kinds.

Subclasses should override visitExpression/visitStatement/visitElement as needed and intercept elements of interest. They can then invoke the base class's function to visit all sub expressions. They can also choose not to call the base function to arrest recursion, or implement custom recursion.

The visit functions return a bool that determines how the default implementation recursions. Once any visit call returns true, the default behavior stops recursion and propagates true up the stack.

  • Constructor Details Link icon

    • TreeVisitor Link icon

      public TreeVisitor()
  • Method Details Link icon

    • visitFunctionPrototype Link icon

      public boolean visitFunctionPrototype(FunctionPrototype prototype)
    • visitFunctionDefinition Link icon

      public boolean visitFunctionDefinition(FunctionDefinition definition)
    • visitGlobalVariableDecl Link icon

      public boolean visitGlobalVariableDecl(GlobalVariableDecl variableDecl)
    • visitInterfaceBlock Link icon

      public boolean visitInterfaceBlock(InterfaceBlock interfaceBlock)
    • visitStructDefinition Link icon

      public boolean visitStructDefinition(StructDefinition structDefinition)
    • visitTopLevelElement Link icon

      @OverrideOnly protected boolean visitTopLevelElement(TopLevelElement e)
      Fallback method for any element kind that has not been overridden.
    • visitFunctionReference Link icon

      public boolean visitFunctionReference(FunctionReference expr)
    • visitVariableReference Link icon

      public boolean visitVariableReference(VariableReference expr)
    • visitTypeReference Link icon

      public boolean visitTypeReference(TypeReference expr)
    • visitLiteral Link icon

      public boolean visitLiteral(Literal expr)
    • visitFieldAccess Link icon

      public boolean visitFieldAccess(FieldAccess expr)
    • visitIndex Link icon

      public boolean visitIndex(IndexExpression expr)
    • visitPostfix Link icon

      public boolean visitPostfix(PostfixExpression expr)
    • visitPrefix Link icon

      public boolean visitPrefix(PrefixExpression expr)
    • visitBinary Link icon

      public boolean visitBinary(BinaryExpression expr)
    • visitConditional Link icon

      public boolean visitConditional(ConditionalExpression expr)
    • visitSwizzle Link icon

      public boolean visitSwizzle(Swizzle expr)
    • visitFunctionCall Link icon

      public boolean visitFunctionCall(FunctionCall expr)
    • visitConstructorCall Link icon

      public boolean visitConstructorCall(ConstructorCall expr)
    • visitExpression Link icon

      @OverrideOnly protected boolean visitExpression(Expression expr)
      Fallback method for any expression kind that has not been overridden.
    • visitBlock Link icon

      public boolean visitBlock(BlockStatement stmt)
    • visitBreak Link icon

      public boolean visitBreak(BreakStatement stmt)
    • visitContinue Link icon

      public boolean visitContinue(ContinueStatement stmt)
    • visitDiscard Link icon

      public boolean visitDiscard(DiscardStatement stmt)
    • visitEmpty Link icon

      public boolean visitEmpty(EmptyStatement stmt)
    • visitExpression Link icon

      public boolean visitExpression(ExpressionStatement stmt)
    • visitForLoop Link icon

      public boolean visitForLoop(ForLoop stmt)
    • visitIf Link icon

      public boolean visitIf(IfStatement stmt)
    • visitReturn Link icon

      public boolean visitReturn(ReturnStatement stmt)
    • visitSwitch Link icon

      public boolean visitSwitch(SwitchStatement stmt)
    • visitSwitchCase Link icon

      public boolean visitSwitchCase(SwitchCase stmt)
    • visitVariableDecl Link icon

      public boolean visitVariableDecl(VariableDecl variableDecl)
    • visitStatement Link icon

      @OverrideOnly protected boolean visitStatement(Statement stmt)
      Fallback method for any statement kind that has not been overridden.