Class: Opal::Nodes::CaseNode
- Inherits:
-
Base
show all
- Defined in:
- opal/lib/opal/nodes/case.rb
Constant Summary
Constants included
from Helpers
Helpers::RESERVED
Instance Attribute Summary
Attributes inherited from Base
#compiler, #type
Instance Method Summary
collapse
Methods inherited from Base
#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, #js_falsy, #js_truthy, #js_truthy_optimize, #line, #lvar_to_js, #mid_to_jsid, #property, #reserved?, #variable
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
|
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 handled_else = true
wen = compiler.returns(wen) if needs_closure?
push "else {", stmt(wen), "}"
end
end
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
|