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 |