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 if needs_closure? if scope.await_encountered wrap '(await (async function() {', '})())' else wrap '(function() {', '})()' end end 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| next unless 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 # if we are having a closure, we must return a usable value if needs_closure? && !handled_else line push 'else { return nil }' end end
def needs_closure?
def needs_closure? !stmt? end