Class: Opal::Nodes::IFlipFlop
Direct Known Subclasses
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#compile ⇒ Object
We create a function that we put in the top scope, that stores the state of our flip-flop.
-
#excl ⇒ Object
Is this an exclusive flip flop? If no, run both branches.
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_resbody, #in_resbody?, #in_rescue, #in_while?, #initialize, #process, #push, #recv, #recv?, #s, #scope, #source_location, #stmt, #stmt?, #top_scope, truthy_optimize?, #unshift, #while_loop, #with_temp, #wrap
Methods included from Helpers
#conditional_send, #current_indent, #empty_line, #indent, #js_truthy, #js_truthy_optimize, #line, #mid_to_jsid, #property, #valid_name?
Constructor Details
This class inherits a constructor from Opal::Nodes::Base
Instance Method Details
#compile ⇒ Object
We create a function that we put in the top scope, that stores the state of our flip-flop. We pass to it functions that are ran with the current binding.
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'opal/lib/opal/nodes/if.rb', line 175 def compile helper :truthy fun_name = top_scope.new_temp ff = "#{fun_name}.$$ff" push "(typeof #{fun_name} === 'undefined' ? (#{fun_name} = function(from, to){" push " if (typeof #{ff} === 'undefined') #{ff} = false;" push " var retval = #{ff};" push " if (!#{ff}) {" push " #{ff} = retval = $truthy(from());" push " }" push " #{excl}if (#{ff}) {" push " if ($truthy(to())) #{ff} = false;" push " }" push " return retval;" push "}) : #{fun_name})(" push " function() { ", stmt(compiler.returns(from)), " }," push " function() { ", stmt(compiler.returns(to)), " }" push ")" end |
#excl ⇒ Object
Is this an exclusive flip flop? If no, run both branches
169 170 171 |
# File 'opal/lib/opal/nodes/if.rb', line 169 def excl "" end |