class TypeProf::Core::AST::StatementsNode
Attributes
stmts[R]
Public Class Methods
new(raw_node, lenv, use_result)
click to toggle source
Calls superclass method
TypeProf::Core::AST::Node::new
# File typeprof-0.30.1/lib/typeprof/core/ast/misc.rb, line 4 def initialize(raw_node, lenv, use_result) super(raw_node, lenv) stmts = raw_node.body @stmts = stmts.map.with_index do |n, i| if n AST.create_node(n, lenv, i == stmts.length - 1 ? use_result : false) else last = code_range.last DummyNilNode.new(TypeProf::CodeRange.new(last, last), lenv) end end end
Public Instance Methods
diff(prev_node)
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/misc.rb, line 35 def diff(prev_node) if prev_node.is_a?(StatementsNode) i = 0 while i < @stmts.size @stmts[i].diff(prev_node.stmts[i]) if !@stmts[i].prev_node j1 = @stmts.size - 1 j2 = prev_node.stmts.size - 1 while j1 >= i && j2 >= i @stmts[j1].diff(prev_node.stmts[j2]) if !@stmts[j1].prev_node return end j1 -= 1 j2 -= 1 end return end i += 1 end @prev_node = prev_node if i == prev_node.stmts.size end end
install0(genv)
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/misc.rb, line 21 def install0(genv) ret = nil @stmts.each do |stmt| ret = stmt ? stmt.install(genv) : nil end if ret ret2 = Vertex.new(self) @changes.add_edge(genv, ret, ret2) ret2 else Source.new(genv.nil_type) end end
subnodes(= { stmts: })
click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/misc.rb, line 19 def subnodes = { stmts: } def install0(genv) ret = nil @stmts.each do |stmt| ret = stmt ? stmt.install(genv) : nil end if ret ret2 = Vertex.new(self) @changes.add_edge(genv, ret, ret2) ret2 else Source.new(genv.nil_type) end end def diff(prev_node) if prev_node.is_a?(StatementsNode) i = 0 while i < @stmts.size @stmts[i].diff(prev_node.stmts[i]) if !@stmts[i].prev_node j1 = @stmts.size - 1 j2 = prev_node.stmts.size - 1 while j1 >= i && j2 >= i @stmts[j1].diff(prev_node.stmts[j2]) if !@stmts[j1].prev_node return end j1 -= 1 j2 -= 1 end return end i += 1 end @prev_node = prev_node if i == prev_node.stmts.size end end end