Class: Opal::Nodes::ZsuperNode
- Defined in:
- opal/lib/opal/nodes/super.rb
Overview
super with explicit args
Constant Summary
Constants inherited from CallNode
CallNode::OPERATORS , CallNode::SPECIALS
Instance Attribute Summary
Attributes inherited from CallNode
#arglist , #iter , #meth , #recvr
Attributes inherited from Base
Instance Method Summary collapse
- #block_name ⇒ Object
- #compile ⇒ Object
- #compile_arguments ⇒ Object
-
#initialize ⇒ ZsuperNode
constructor
A new instance of ZsuperNode.
Methods inherited from BaseSuperNode
Methods inherited from CallNode
Methods inherited from Base
#add_gvar , #add_ivar , #add_local , #add_temp , #children , children , #class_variable_owner , #class_variable_owner_nesting_level , #comments , #compile_to_fragments , #error , #expr , #expr? , #expr_or_nil , #fragment , handle , handlers , #has_rescue_else? , #helper , #in_ensure , #in_ensure? , #in_while? , #process , #push , #recv , #recv? , #s , #scope , #stmt , #stmt? , truthy_optimize? , #unshift , #while_loop , #with_temp , #wrap
Methods included from Helpers
#conditional_send , #current_indent , #empty_line , #indent , #js_falsy , #js_truthy , #js_truthy_optimize , #line , #mid_to_jsid , #property , #valid_name?
Constructor Details
#initialize ⇒ ZsuperNode
Returns a new instance of ZsuperNode
132 133 134 135 136 137 138 139 140 141 142
# File 'opal/lib/opal/nodes/super.rb', line 132 def initialize(*) super # preserve a block if we have one already but otherwise, assume a block is coming from higher # up the chain unless iter.type == :iter # Need to support passing block up even if it's not referenced in this method at all scope.uses_block! @iter = s(:js_tmp, '$iter') end end
Instance Method Details
#block_name ⇒ Object
#compile ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
# File 'opal/lib/opal/nodes/super.rb', line 144 def compile if def_scope def_scope.uses_zuper = true implicit_args = [s(:js_tmp, '$zuper')] # If the method we're in has a block and we're using a default super call with no args, we need to grab the block # If an iter (block via braces) is provided, that takes precedence if block_name && !iter block_pass = s(:block_pass, s(:lvar, block_name)) implicit_args << block_pass end @arglist = s(:arglist, *implicit_args) end compile_using_send end
#compile_arguments ⇒ Object
161 162 163 164 165 166 167 168 169
# File 'opal/lib/opal/nodes/super.rb', line 161 def compile_arguments push ', ' if arglist.children.empty? push '[]' else push expr(arglist) end end