//===- FileLineColLocBreakpointManager.cpp - MLIR Optimizer Driver --------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "mlir/Debug/BreakpointManagers/FileLineColLocBreakpointManager.h"

using namespace mlir;
using namespace mlir::tracing;

FailureOr<std::tuple<StringRef, int64_t, int64_t>>
FileLineColLocBreakpoint::parseFromString(StringRef str,
                                          function_ref<void(Twine)> diag) {
  // Watch at debug locations arguments are expected to be in the form:
  // `fileName:line:col`, `fileName:line`, or `fileName`.

  if (str.empty()) {
    if (diag)
      diag("error: initializing FileLineColLocBreakpoint with empty file name");
    return failure();
  }

  // This logic is complex because on Windows `:` is a comment valid path
  // character: `C:\...`.
  auto [fileLine, colStr] = str.rsplit(':');
  auto [file, lineStr] = fileLine.rsplit(':');
  // Extract the line and column value
  int64_t line = -1, col = -1;
  if (lineStr.empty()) {
    // No candidate for line number, try to use the column string as line
    // instead.
    file = fileLine;
    if (!colStr.empty() && colStr.getAsInteger(0, line))
      file = str;
  } else {
    if (lineStr.getAsInteger(0, line)) {
      // Failed to parse a line number, try to use the column string as line
      // instead. If this failed as well, the entire string is the file name.
      file = fileLine;
      if (colStr.getAsInteger(0, line))
        file = str;
    } else {
      // We successfully parsed a line number, try to parse the column number.
      // This shouldn't fail, or the entire string is the file name.
      if (colStr.getAsInteger(0, col)) {
        file = str;
        line = -1;
      }
    }
  }
  return std::tuple<StringRef, int64_t, int64_t>{file, line, col};
}
