Class: Opal::Nodes::DefinedNode
- Inherits:
-
Base
- Object
- Base
- Opal::Nodes::DefinedNode
show all
- Defined in:
- opal/lib/opal/nodes/defined.rb
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
#compiler, #type
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?, truthy_optimize?, #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
Instance Method Details
#compile ⇒ Object
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'opal/lib/opal/nodes/defined.rb', line 10
def compile
type = value.type
case type
when :self, :nil, :false, :true
push type.to_s.inspect
when :lasgn, :iasgn, :gasgn, :cvdecl, :masgn, :op_asgn_or, :op_asgn_and
push "'assignment'"
when :paren, :not
push expr(s(:defined, value[1]))
when :lvar
push "'local-variable'"
else
if respond_to? "compile_#{type}"
__send__ "compile_#{type}"
else
push "'expression'"
end
end
end
|
#compile_call ⇒ Object
31
32
33
34
35
36
37
38
39
|
# File 'opal/lib/opal/nodes/defined.rb', line 31
def compile_call
mid = mid_to_jsid value[2].to_s
recv = value[1] ? expr(value[1]) : 'self'
with_temp do |tmp|
push "(((#{tmp} = ", recv, "#{mid}) && !#{tmp}.$$stub) || ", recv
push "['$respond_to_missing?']('#{value[2].to_s}') ? 'method' : nil)"
end
end
|
#compile_colon2 ⇒ Object
73
74
75
76
77
78
79
80
|
# File 'opal/lib/opal/nodes/defined.rb', line 73
def compile_colon2
push "(function(){ try { return (("
push expr(value)
push ") != null ? 'constant' : nil); } catch (err) { if (err.$$class"
push " === Opal.NameError) { return nil; } else { throw(err); }}; })()"
end
|
#compile_colon3 ⇒ Object
82
83
84
|
# File 'opal/lib/opal/nodes/defined.rb', line 82
def compile_colon3
push "(Opal.Object.$$scope.#{value[1]} == null ? nil : 'constant')"
end
|
#compile_const ⇒ Object
69
70
71
|
# File 'opal/lib/opal/nodes/defined.rb', line 69
def compile_const
push "($scope.#{value[1]} != null)"
end
|
#compile_cvar ⇒ Object
86
87
88
|
# File 'opal/lib/opal/nodes/defined.rb', line 86
def compile_cvar
push "(Opal.cvars['#{value[1]}'] != null ? 'class variable' : nil)"
end
|
#compile_gvar ⇒ Object
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# File 'opal/lib/opal/nodes/defined.rb', line 90
def compile_gvar
name = value[1].to_s[1..-1]
if %w[~ !].include? name
push "'global-variable'"
elsif %w[` ' + &].include? name
with_temp do |tmp|
push "((#{tmp} = $gvars['~'], #{tmp} != null && #{tmp} !== nil) ? "
push "'global-variable' : nil)"
end
else
push "($gvars[#{name.inspect}] != null ? 'global-variable' : nil)"
end
end
|
#compile_ivar ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'opal/lib/opal/nodes/defined.rb', line 41
def compile_ivar
with_temp do |tmp|
name = value[1].to_s[1..-1]
push "((#{tmp} = self['#{name}'], #{tmp} != null && #{tmp} !== nil) ? "
push "'instance-variable' : nil)"
end
end
|
#compile_nth_ref ⇒ Object
105
106
107
108
109
110
|
# File 'opal/lib/opal/nodes/defined.rb', line 105
def compile_nth_ref
with_temp do |tmp|
push "((#{tmp} = $gvars['~'], #{tmp} != null && #{tmp} != nil) ? "
push "'global-variable' : nil)"
end
end
|
#compile_super ⇒ Object
54
55
56
|
# File 'opal/lib/opal/nodes/defined.rb', line 54
def compile_super
push expr(s(:defined_super, value))
end
|
#compile_xstr ⇒ Object
Also known as:
compile_dxstr
63
64
65
66
|
# File 'opal/lib/opal/nodes/defined.rb', line 63
def compile_xstr
push expr(value)
wrap '(typeof(', ') !== "undefined")'
end
|
#compile_yield ⇒ Object
58
59
60
61
|
# File 'opal/lib/opal/nodes/defined.rb', line 58
def compile_yield
push compiler.handle_block_given_call(@sexp)
wrap '((', ') != null ? "yield" : nil)'
end
|