# File lib/ruote/dboard/mutation.rb, line 146 def walk(fexp, tree) ftree = Ruote.compact_tree(@ps.current_tree(fexp)) if ftree[0] != tree[0] || ftree[1] != tree[1] # # if there is anything different between the current tree and the # desired tree, let's force a re-apply register(MutationPoint.new(fexp.fei, tree, :re_apply)) elsif ftree[2] == tree[2] # # else, if the tree children are the same, exit, there is nothing to do return else register(MutationPoint.new(fexp.fei, tree, :update)) # # NOTE: maybe a switch for this mutation not to be added would # be necessary... if fexp.is_concurrent? # # concurrent expressions follow a different heuristic walk_concurrence(fexp, ftree, tree) else # # all other expressions are considered sequence-like walk_sequence(fexp, ftree, tree) end end end