class Savi::AST::Choice

Overview

A Choice node indicates a branching flow control, with a list of possible condition Terms and corresponding body Terms. During execution, each condition Term is evaluated in order until the first one that returns True, at which point the corresponding body Term is evaluated and its result becomes the result value of the Choice block, and later other branches will not be executed at all. This is roughly an if/else-if/... block.

This is an internal AST type which has no corresponding source code syntax, because such a construct is only created inside macro expansions.

However, the most obvious examples of use are in the if and case macros.

Defined in:

savi/ast.cr

Constructors

Instance Method Summary

Instance methods inherited from class Savi::AST::Node

accept(ctx : Compiler::Context, visitor : Visitor)
accept(ctx : Compiler::Context, visitor : CopyOnMutateVisitor)
accept
, annotations : Array(Annotation) | Nil annotations, annotations=(annotations : Array(Annotation) | Nil) annotations=, children_accept(ctx : Compiler::Context, visitor : Visitor)
children_accept(ctx : Compiler::Context, visitor : CopyOnMutateVisitor)
children_accept
, from(other : Node) from, pos pos, pos? : Savi::Source::Pos? pos?, span_pos(source) span_pos, with_pos(pos : Source::Pos) with_pos

Constructor Detail

def self.new(list : Array(Tuple(Term, Term))) #

[View source]

Instance Method Detail

def children_accept(ctx : Compiler::Context, visitor : Visitor) #

[View source]
def children_accept(ctx : Compiler::Context, visitor : CopyOnMutateVisitor) #

[View source]

[View source]
def list=(list : Array(Tuple(Savi::AST::Node, Savi::AST::Node))) #

[View source]
def name #

[View source]
def span_pos(source) #

[View source]
def to_a : Array(A) #

[View source]