Class: Opal::Nodes::WhileNode
Direct Known Subclasses
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #compile ⇒ Object
- #uses_redo? ⇒ Boolean
- #while_close ⇒ Object
- #while_open ⇒ Object
- #wrap_in_closure? ⇒ Boolean
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? , #initialize , #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
This class inherits a constructor from Opal::Nodes::Base
Instance Method Details
#compile ⇒ Object
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
# File 'opal/lib/opal/nodes/while.rb', line 12 def compile with_temp do |redo_var| test_code = js_truthy(test) compiler.in_while do while_loop[:closure] = true if wrap_in_closure? while_loop[:redo_var] = redo_var body_code = stmt(body) if uses_redo? push "#{redo_var} = false; #{while_open}#{redo_var} || " push test_code push while_close else push while_open, test_code, while_close end push "#{redo_var} = false;" if uses_redo? line body_code end line '}' end wrap '(function() {', '; return nil; })()' if wrap_in_closure? end
#uses_redo? ⇒ Boolean
Returns:
- (Boolean)
47 48 49
# File 'opal/lib/opal/nodes/while.rb', line 47 def uses_redo? while_loop[:use_redo] end
#while_close ⇒ Object
43 44 45
# File 'opal/lib/opal/nodes/while.rb', line 43 def while_close ') {' end
#while_open ⇒ Object
39 40 41
# File 'opal/lib/opal/nodes/while.rb', line 39 def while_open 'while (' end
#wrap_in_closure? ⇒ Boolean
Returns:
- (Boolean)
51 52 53
# File 'opal/lib/opal/nodes/while.rb', line 51 def wrap_in_closure? expr? || recv? end