Sha256: d2b6d4f0ab681234df7cb39ce1e4bebbf72fcc7a55547e6cf88a74a29c1569b0
Contents?: true
Size: 1.34 KB
Versions: 4
Compression:
Stored size: 1.34 KB
Contents
require_relative './case/case_conditional' require_relative './case/case_when' require_relative './case/case_then' require_relative './case/case_switch_variable' require_relative './case/case_else' module Dentaku module AST class Case < Node def initialize(*nodes) @switch = nodes.shift unless @switch.is_a?(AST::CaseSwitchVariable) raise 'Case missing switch variable' end @conditions = nodes @else = @conditions.pop if @conditions.last.is_a?(AST::CaseElse) @conditions.each do |condition| unless condition.is_a?(AST::CaseConditional) raise "#{condition} is not a CaseConditional" end end end def value(context={}) switch_value = @switch.value(context) @conditions.each do |condition| if condition.when.value(context) == switch_value return condition.then.value(context) end end if @else return @else.value(context) else raise "No block matched the switch value '#{switch_value}'" end end def dependencies(context={}) # TODO: should short-circuit @switch.dependencies(context) + @conditions.flat_map do |condition| condition.dependencies(context) end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
dentaku-2.0.9 | lib/dentaku/ast/case.rb |
dentaku-2.0.8 | lib/dentaku/ast/case.rb |
dentaku-2.0.7 | lib/dentaku/ast/case.rb |
dentaku-2.0.6 | lib/dentaku/ast/case.rb |