class Opal::Nodes::WhileNode
Public Instance Methods
compile()
click to toggle source
# File lib/opal/nodes/while.rb, line 12 def compile test_code = js_truthy(test) @redo_var = scope.new_temp if uses_redo? compiler.in_while do while_loop[:closure] = true if wrap_in_closure? while_loop[:redo_var] = @redo_var in_closure(Closure::LOOP | Closure::JS_LOOP | (wrap_in_closure? ? Closure::JS_FUNCTION : 0)) do in_closure(Closure::LOOP_INSIDE | Closure::JS_LOOP_INSIDE) do line(indent { stmt(body) }) end if uses_redo? compile_with_redo(test_code) else compile_without_redo(test_code) end end end scope.queue_temp(@redo_var) if uses_redo? if wrap_in_closure? if scope.await_encountered wrap '(await (async function() {', '; return nil; })())' else wrap '(function() {', '; return nil; })()' end end end
Private Instance Methods
compile_while(test_code, redo_code = nil)
click to toggle source
# File lib/opal/nodes/while.rb, line 55 def compile_while(test_code, redo_code = nil) unshift redo_code if redo_code unshift while_open, test_code, while_close unshift redo_code if redo_code line '}' end
compile_with_redo(test_code)
click to toggle source
# File lib/opal/nodes/while.rb, line 47 def compile_with_redo(test_code) compile_while(test_code, "#{@redo_var} = false;") end
compile_without_redo(test_code)
click to toggle source
# File lib/opal/nodes/while.rb, line 51 def compile_without_redo(test_code) compile_while(test_code) end
uses_redo?()
click to toggle source
# File lib/opal/nodes/while.rb, line 74 def uses_redo? @sexp.meta[:has_redo] end
while_close()
click to toggle source
# File lib/opal/nodes/while.rb, line 70 def while_close ') {' end
while_open()
click to toggle source
# File lib/opal/nodes/while.rb, line 62 def while_open if uses_redo? redo_part = "#{@redo_var} || " end "while (#{redo_part}" end
wrap_in_closure?()
click to toggle source
# File lib/opal/nodes/while.rb, line 78 def wrap_in_closure? expr? || recv? end