// Path: app/src/main/java/com/annimon/hotarufx/lib/Value.java
// public interface Value extends Comparable<Value> {
// 
//     Object raw();
// 
//     default boolean asBoolean() {
//         return asInt() != 0;
//     }
// 
//     default int asInt() {
//         return asNumber().intValue();
//     }
// 
//     default double asDouble() {
//         return asNumber().doubleValue();
//     }
// 
//     Number asNumber();
// 
//     String asString();
// 
//     int type();
// }
// 
// Path: app/src/main/java/com/annimon/hotarufx/parser/visitors/ResultVisitor.java
// public interface ResultVisitor<R, T> {
// 
//     R visit(AccessNode node, T t);
//     R visit(ArrayNode node, T t);
//     R visit(AssignNode node, T t);
//     R visit(BlockNode node, T t);
//     R visit(FunctionNode node, T t);
//     R visit(MapNode node, T t);
//     R visit(PropertyNode node, T t);
//     R visit(UnaryNode node, T t);
//     R visit(UnitNode node, T t);
//     R visit(ValueNode node, T t);
//     R visit(VariableNode node, T t);
// 
//     Value get(AccessNode node, T t);
//     Value set(AccessNode node, Value value, T t);
//     Value get(VariableNode node, T t);
//     Value set(VariableNode node, Value value, T t);
// }


import com.annimon.hotarufx.lib.Value;
import com.annimon.hotarufx.parser.visitors.ResultVisitor;
import java.util.List;
package com.annimon.hotarufx.parser.ast;


public class AccessNode extends ASTNode implements Accessible {

    public final Node root;
    public final List<Node> indices;

    public AccessNode(Node root, List<Node> indices) {
        this.root = root;
        this.indices = indices;
    }

    public AccessNode(String variable, List<Node> indices) {
        this(new VariableNode(variable), indices);
    }

    public Node getRoot() {
        return root;
    }

    @Override
    public <R, T> R accept(ResultVisitor<R, T> visitor, T input) {
        return visitor.visit(this, input);
    }

    @Override
    public <T> Value get(ResultVisitor<Value, T> visitor, T input) {
        return visitor.get(this, input);
    }

    @Override
// Path: app/src/main/java/com/annimon/hotarufx/lib/Value.java
// public interface Value extends Comparable<Value> {
// 
//     Object raw();
// 
//     default boolean asBoolean() {
//         return asInt() != 0;
//     }
// 
//     default int asInt() {
//         return asNumber().intValue();
//     }
// 
//     default double asDouble() {
//         return asNumber().doubleValue();
//     }
// 
//     Number asNumber();
// 
//     String asString();
// 
//     int type();
// }
// 
// Path: app/src/main/java/com/annimon/hotarufx/parser/visitors/ResultVisitor.java
// public interface ResultVisitor<R, T> {
// 
//     R visit(AccessNode node, T t);
//     R visit(ArrayNode node, T t);
//     R visit(AssignNode node, T t);
//     R visit(BlockNode node, T t);
//     R visit(FunctionNode node, T t);
//     R visit(MapNode node, T t);
//     R visit(PropertyNode node, T t);
//     R visit(UnaryNode node, T t);
//     R visit(UnitNode node, T t);
//     R visit(ValueNode node, T t);
//     R visit(VariableNode node, T t);
// 
//     Value get(AccessNode node, T t);
//     Value set(AccessNode node, Value value, T t);
//     Value get(VariableNode node, T t);
//     Value set(VariableNode node, Value value, T t);
// }


// Path: app/src/main/java/com/annimon/hotarufx/parser/ast/AccessNode.java
import com.annimon.hotarufx.lib.Value;
import com.annimon.hotarufx.parser.visitors.ResultVisitor;
import java.util.List;

package com.annimon.hotarufx.parser.ast;


public class AccessNode extends ASTNode implements Accessible {

    public final Node root;
    public final List<Node> indices;

    public AccessNode(Node root, List<Node> indices) {
        this.root = root;
        this.indices = indices;
    }

    public AccessNode(String variable, List<Node> indices) {
        this(new VariableNode(variable), indices);
    }

    public Node getRoot() {
        return root;
    }

    @Override
    public <R, T> R accept(ResultVisitor<R, T> visitor, T input) {
        return visitor.visit(this, input);
    }

    @Override
    public <T> Value get(ResultVisitor<Value, T> visitor, T input) {
        return visitor.get(this, input);
    }

    @Override
    public <T> Value set(ResultVisitor<Value, T> visitor, Value value, T input) {