Search in sources :

Example 1 with ElseIfTokenNode

use of com.google.auto.value.processor.escapevelocity.TokenNode.ElseIfTokenNode in project auto by google.

the class Reparser method parseIfOrElseIf.

private Node parseIfOrElseIf(IfOrElseIfTokenNode ifOrElseIf) {
    Node truePart = parseTo(ELSE_ELSE_IF_END_SET, ifOrElseIf);
    Node falsePart;
    Node token = currentNode();
    // Skip #else or #elseif (cond) or #end.
    nextNode();
    if (token instanceof EndTokenNode) {
        falsePart = emptyNode(token.lineNumber);
    } else if (token instanceof ElseTokenNode) {
        falsePart = parseTo(END_SET, ifOrElseIf);
        // Skip #end
        nextNode();
    } else if (token instanceof ElseIfTokenNode) {
        // We've seen #if (condition1) ... #elseif (condition2). currentToken is the first token
        // after (condition2). We pretend that we've just seen #if (condition2) and parse out
        // the remainder (which might have further #elseif and final #else). Then we pretend that
        // we actually saw #if (condition1) ... #else #if (condition2) ...remainder ... #end #end.
        falsePart = parseIfOrElseIf((ElseIfTokenNode) token);
    } else {
        throw new AssertionError(currentNode());
    }
    return new IfNode(ifOrElseIf.lineNumber, ifOrElseIf.condition, truePart, falsePart);
}
Also used : EndTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.EndTokenNode) ElseTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.ElseTokenNode) ForEachNode(com.google.auto.value.processor.escapevelocity.DirectiveNode.ForEachNode) IfNode(com.google.auto.value.processor.escapevelocity.DirectiveNode.IfNode) MacroCallNode(com.google.auto.value.processor.escapevelocity.DirectiveNode.MacroCallNode) ForEachTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.ForEachTokenNode) ElseIfTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.ElseIfTokenNode) SetNode(com.google.auto.value.processor.escapevelocity.DirectiveNode.SetNode) Node.emptyNode(com.google.auto.value.processor.escapevelocity.Node.emptyNode) EndTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.EndTokenNode) EofNode(com.google.auto.value.processor.escapevelocity.TokenNode.EofNode) CommentTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.CommentTokenNode) IfTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.IfTokenNode) ElseTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.ElseTokenNode) IfOrElseIfTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.IfOrElseIfTokenNode) MacroDefinitionTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.MacroDefinitionTokenNode) ElseIfTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.ElseIfTokenNode) IfOrElseIfTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.IfOrElseIfTokenNode) IfNode(com.google.auto.value.processor.escapevelocity.DirectiveNode.IfNode)

Example 2 with ElseIfTokenNode

use of com.google.auto.value.processor.escapevelocity.TokenNode.ElseIfTokenNode in project auto by google.

the class Parser method parseIfOrElseIf.

/**
   * Parses the condition following {@code #if} or {@code #elseif}.
   * <pre>{@code
   * <if-token> -> #if ( <condition> )
   * <elseif-token> -> #elseif ( <condition> )
   * }</pre>
   *
   * @param directive either {@code "if"} or {@code "elseif"}.
   */
private Node parseIfOrElseIf(String directive) throws IOException {
    expect('(');
    ExpressionNode condition = parseExpression();
    expect(')');
    return directive.equals("if") ? new IfTokenNode(condition) : new ElseIfTokenNode(condition);
}
Also used : NotExpressionNode(com.google.auto.value.processor.escapevelocity.ExpressionNode.NotExpressionNode) BinaryExpressionNode(com.google.auto.value.processor.escapevelocity.ExpressionNode.BinaryExpressionNode) IfTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.IfTokenNode) ElseIfTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.ElseIfTokenNode) ElseIfTokenNode(com.google.auto.value.processor.escapevelocity.TokenNode.ElseIfTokenNode)

Aggregations

ElseIfTokenNode (com.google.auto.value.processor.escapevelocity.TokenNode.ElseIfTokenNode)2 IfTokenNode (com.google.auto.value.processor.escapevelocity.TokenNode.IfTokenNode)2 ForEachNode (com.google.auto.value.processor.escapevelocity.DirectiveNode.ForEachNode)1 IfNode (com.google.auto.value.processor.escapevelocity.DirectiveNode.IfNode)1 MacroCallNode (com.google.auto.value.processor.escapevelocity.DirectiveNode.MacroCallNode)1 SetNode (com.google.auto.value.processor.escapevelocity.DirectiveNode.SetNode)1 BinaryExpressionNode (com.google.auto.value.processor.escapevelocity.ExpressionNode.BinaryExpressionNode)1 NotExpressionNode (com.google.auto.value.processor.escapevelocity.ExpressionNode.NotExpressionNode)1 Node.emptyNode (com.google.auto.value.processor.escapevelocity.Node.emptyNode)1 CommentTokenNode (com.google.auto.value.processor.escapevelocity.TokenNode.CommentTokenNode)1 ElseTokenNode (com.google.auto.value.processor.escapevelocity.TokenNode.ElseTokenNode)1 EndTokenNode (com.google.auto.value.processor.escapevelocity.TokenNode.EndTokenNode)1 EofNode (com.google.auto.value.processor.escapevelocity.TokenNode.EofNode)1 ForEachTokenNode (com.google.auto.value.processor.escapevelocity.TokenNode.ForEachTokenNode)1 IfOrElseIfTokenNode (com.google.auto.value.processor.escapevelocity.TokenNode.IfOrElseIfTokenNode)1 MacroDefinitionTokenNode (com.google.auto.value.processor.escapevelocity.TokenNode.MacroDefinitionTokenNode)1