class TypedRb::Model::TmCaseWhen
Attributes
case_statement[R]
default_statement[R]
when_statements[R]
Public Class Methods
new(node, case_statement, when_statements, default_statement)
click to toggle source
Calls superclass method
TypedRb::Model::Expr::new
# File lib/typed/model/tm_case_when.rb, line 7 def initialize(node, case_statement, when_statements, default_statement) super(node, nil) @case_statement = case_statement @when_statements = when_statements @default_statement = default_statement end
Public Instance Methods
check_type(context)
click to toggle source
# File lib/typed/model/tm_case_when.rb, line 14 def check_type(context) conditions = build_conditionals(case_statement, when_statements) conditions = conditions.reduce([]) do |acc, (node, condition, then_statement)| next_condition = TmIfElse.new(node, condition, then_statement, nil) prev_condition = acc.last prev_condition.else_expr = next_condition unless prev_condition.nil? acc << next_condition end conditions.last.else_expr = default_statement if default_statement conditions.first.check_type(context) end
Protected Instance Methods
build_conditionals(case_statement, when_statements)
click to toggle source
# File lib/typed/model/tm_case_when.rb, line 28 def build_conditionals(case_statement, when_statements) when_statements.map do |when_statement| node, conditional, then_statement = when_statement condition = TmSend.new(case_statement, :===, [conditional], node) [node, condition, then_statement] end end