   // 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 pointers, then
  // NA[i - 1] is replaced by j - 1 and OA[j - 1] is replaced by i - 1.
  i = na.count - 1
  while i > 0 {
    if case let .index(j) = na[i], j - 1 >= 0,
        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
  }

