Class: Opal::Nodes::IfNode
- Inherits:
-
Base
show all
- Defined in:
- opal/lib/opal/nodes/if.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
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
41
42
43
44
45
|
# File 'opal/lib/opal/nodes/if.rb', line 10
def compile
truthy, falsy = self.truthy, self.falsy
push "if ("
if falsy and !truthy
truthy = falsy
falsy = nil
push js_falsy(test)
else
push js_truthy(test)
end
push ") {"
indent { line stmt(truthy) } if truthy
if falsy
if falsy.type == :if
line "} else ", stmt(falsy)
else
indent do
line "} else {"
line stmt(falsy)
end
line "}"
end
else
push "}"
end
wrap "(function() {", "; return nil; })()" if needs_wrapper?
end
|
51
52
53
|
# File 'opal/lib/opal/nodes/if.rb', line 51
def falsy
needs_wrapper? ? compiler.returns(false_body || s(:nil)) : false_body
end
|
#needs_wrapper? ⇒ Boolean
55
56
57
|
# File 'opal/lib/opal/nodes/if.rb', line 55
def needs_wrapper?
expr? or recv?
end
|
47
48
49
|
# File 'opal/lib/opal/nodes/if.rb', line 47
def truthy
needs_wrapper? ? compiler.returns(true_body || s(:nil)) : true_body
end
|