   // In pass 3 we also "find" unique virtual lines immediately before the first and immediately
   // after the last lines of the files.
   for (index, item) in na.enumerated() {
-    if case .symbol(let entry) = item, entry.occursInBoth {
-      guard entry.olno.count > 0 else { continue }
+    if case let .symbol(entry) = item, entry.occursInBoth, !entry.olno.isEmpty {
 
       let oldIndex = entry.olno.removeFirst()
       na[index] = .index(oldIndex)


  for (index, item) in na.enumerated() {
    switch item {
    case .symbol(_):
      steps.append(.insert(index))
      runningOffset += 1
    case .index(let oldIndex):
      // The object has changed, so it should be updated.
      if old[oldIndex] != new[index] {
        steps.append(.update(index))

  // points to OA[j] and NA[i + 1] and OA[j + 1] contain identical symbol table entry pointers, then
  // OA[j + 1] is set to line i + 1 and NA[i + 1] is set to line j + 1.
  var i = 1
  while i < na.count - 1 {
    if case let .index(j) = na[i], j + 1 < oa.count,
        case let .symbol(newEntry) = na[i + 1],
        case let .symbol(oldEntry) = oa[j + 1], newEntry === oldEntry {
        na[i + 1] = .index(j + 1)
        oa[j + 1] = .index(i + 1)
      }

    i += 1
  }

