class Opal::Nodes::CaseNode
def case_parts
def case_parts children[1..-1] end
def case_stmt
def case_stmt compiler.case_stmt end
def compile
def compile compiler.in_case do compile_code wrap '(function() {', '})()' if needs_closure? end end
def compile_code
def compile_code handled_else = false if condition case_stmt[:cond] = true add_local '$case' push "$case = ", expr(condition), ";" end case_parts.each_with_index do |wen, idx| if wen line case wen.type when :when wen = compiler.returns(wen) if needs_closure? push "else " unless idx == 0 push stmt(wen) else # s(:else) handled_else = true wen = compiler.returns(wen) if needs_closure? push "else {", stmt(wen), "}" end end end # if we are having a closure, we must return a usable value if needs_closure? and !handled_else line push "else { return nil }" end end
def needs_closure?
def needs_closure? !stmt? end