misplacementRecovery method

void misplacementRecovery(
  1. SecondaryRepairInfo repair,
  2. List<int> stack,
  3. int stack_top,
  4. int last_index,
  5. bool stack_flag,
)

Implementation

void misplacementRecovery(SecondaryRepairInfo repair, List<int> stack,
    int stack_top, int last_index, bool stack_flag) {
  var previous_loc = buffer[2], stack_deletions = 0;

  for (var top = stack_top - 1; top >= 0; top--) {
    if (locationStack[top] < previous_loc) stack_deletions++;
    previous_loc = locationStack[top];

    var parse_distance =
            parseCheck(stack, top, tokStream.getKind(buffer[2]), 3),
        j = (parse_distance == MAX_DISTANCE ? last_index : parse_distance);
    if ((parse_distance > MIN_DISTANCE) &&
        (j - stack_deletions) > (repair.distance - repair.numDeletions)) {
      repair.stackPosition = top;
      repair.distance = j;
      repair.numDeletions = stack_deletions;
      repair.recoveryOnNextStack = stack_flag;
    }
  }

  return;
}