Class: Opal::Nodes::CaseNode
Constant Summary
Constants included from Helpers
Helpers::BASIC_IDENTIFIER_RULES, Helpers::ES3_RESERVED_WORD_EXCLUSIVE, Helpers::ES51_RESERVED_WORD, Helpers::IMMUTABLE_PROPS, Helpers::PROTO_SPECIAL_METHODS, Helpers::PROTO_SPECIAL_PROPS
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
Methods inherited from Base
#add_gvar, #add_ivar, #add_local, #add_temp, children, #children, #compile_to_fragments, #error, #expr, #expr?, #expr_or_nil, #fragment, handle, handlers, #helper, #in_while?, #initialize, #process, #push, #recv, #recv?, #s, #scope, #stmt, #stmt?, #unshift, #while_loop, #with_temp, #wrap
Methods included from Helpers
#current_indent, #empty_line, #indent, #ivar, #js_falsy, #js_truthy, #js_truthy_optimize, #line, #lvar_to_js, #mid_to_jsid, #property, #valid_ivar_name?, #valid_name?, #variable
Constructor Details
This class inherits a constructor from Opal::Nodes::Base
Instance Method Details
#case_parts ⇒ Object
| 46 47 48 | # File 'opal/lib/opal/nodes/case.rb', line 46 def case_parts children[1..-1] end | 
#case_stmt ⇒ Object
| 50 51 52 | # File 'opal/lib/opal/nodes/case.rb', line 50 def case_stmt compiler.case_stmt end | 
#compile ⇒ Object
| 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | # File 'opal/lib/opal/nodes/case.rb', line 10 def compile handled_else = false compiler.in_case do if condition case_stmt[:cond] = true add_local '$case' push "$case = ", expr(condition), ";" end case_parts.each_with_index do |wen, idx| if wen and wen.type == :when compiler.returns(wen) if needs_closure? push "else " unless idx == 0 push stmt(wen) elsif wen # 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? and !handled_else push "else { return nil }" end wrap '(function() {', '})()' if needs_closure? end end | 
#needs_closure? ⇒ Boolean
| 42 43 44 | # File 'opal/lib/opal/nodes/case.rb', line 42 def needs_closure? !stmt? end |