demote_inbound_markers (IntervalSkipList::Node)

    # File lib/treetop/runtime/interval_skip_list/node.rb, line 92
        def demote_inbound_markers(path)
          demoted = []
          new_demoted = []

          top_level.downto(0) do |i|
            incoming_markers = path[i].forward_markers[i].dup
            incoming_markers.each do |marker|
              unless forward_node_with_marker_at_or_above_level?(marker, i)
                path[i].forward_markers[i].delete(marker)
                new_demoted.push(marker)
              end
            end

            demoted.each do |marker|
              path[i + 1].place_marker_on_inbound_path(marker, i, path[i])

              if forward[i].markers.include?(marker)
                path[i].forward_markers[i].push(marker)
              else
                new_demoted.push(marker)
              end
            end

            demoted = new_demoted
            new_demoted = []
          end
        end