class NScript::IfNode
Public Class Methods
new(condition, body, else_body=nil, tags={})
click to toggle source
# File lib/nscript/parser/nodes.rb, line 854 def initialize(condition, body, else_body=nil, tags={}) @condition = condition @body = body && body.unwrap @else_body = else_body && else_body.unwrap @tags = tags @multiple = true if @condition.is_a?(Array) @condition = OpNode.new("!", ParentheticalNode.new(@condition)) if @tags[:invert] end
Public Instance Methods
<<(else_body)
click to toggle source
# File lib/nscript/parser/nodes.rb, line 863 def <<(else_body) eb = else_body.unwrap @else_body ? @else_body << eb : @else_body = eb self end
add_comment(comment)
click to toggle source
# File lib/nscript/parser/nodes.rb, line 869 def add_comment(comment) @comment = comment self end
add_else(exprs)
click to toggle source
# File lib/nscript/parser/nodes.rb, line 886 def add_else(exprs) chain? ? @else_body.add_else(exprs) : @else_body = (exprs && exprs.unwrap) self end
chain?()
click to toggle source
# File lib/nscript/parser/nodes.rb, line 891 def chain? @chain ||= @else_body && @else_body.is_a?(IfNode) end
compile_condition(o)
click to toggle source
# File lib/nscript/parser/nodes.rb, line 899 def compile_condition(o) [@condition].flatten.map {|c| c.compile(o) }.join(' || ') end
compile_node(o)
click to toggle source
# File lib/nscript/parser/nodes.rb, line 903 def compile_node(o) write(statement? ? compile_statement(o) : compile_ternary(o)) end
compile_statement(o)
click to toggle source
# File lib/nscript/parser/nodes.rb, line 907 def compile_statement(o) child = o.delete(:chain_child) cond_o = o.dup cond_o.delete(:return) o[:indent] = idt(1) o[:top] = true if_dent = child ? '' : idt com_dent = child ? idt : '' prefix = @comment ? @comment.compile(cond_o) + "\n#{com_dent}" : '' body = Expressions.wrap(@body).compile(o) if_part = "#{prefix}#{if_dent}if (#{compile_condition(cond_o)}) {\n#{body}\n#{idt}}" return if_part unless @else_body else_part = chain? ? " else #{@else_body.compile(o.merge(:indent => idt, :chain_child => true))}" : " else {\n#{Expressions.wrap(@else_body).compile(o)}\n#{idt}}" if_part + else_part end
compile_ternary(o)
click to toggle source
# File lib/nscript/parser/nodes.rb, line 925 def compile_ternary(o) if_part = "#{@condition.compile(o)} ? #{@body.compile(o)}" else_part = @else_body ? "#{@else_body.compile(o)}" : 'null' "#{if_part} : #{else_part}" end
force_statement()
click to toggle source
# File lib/nscript/parser/nodes.rb, line 874 def force_statement @tags[:statement] = true self end
rewrite_condition(expression)
click to toggle source
# File lib/nscript/parser/nodes.rb, line 879 def rewrite_condition(expression) @condition = @multiple ? @condition.map {|c| OpNode.new("is", expression, c) } : OpNode.new("is", expression, @condition) @else_body.rewrite_condition(expression) if chain? self end
statement?()
click to toggle source
# File lib/nscript/parser/nodes.rb, line 895 def statement? @is_statement ||= !!(@comment || @tags[:statement] || @body.statement? || (@else_body && @else_body.statement?)) end