예제 #1
0
// [R]
void CompileSession::RecordErrorInfo(const ErrorInfo& templ) {
  DEBUG_FORMAT("%s", templ);

  static bool fContinue = false;
  if (!fContinue && ::IsDebuggerPresent()) {
    __debugbreak();
    fContinue = true;
  }

  if (error_set_.Contains(&templ)) {
    return;
  }

  auto& error_info = templ.Clone();

  error_set_.Add(&error_info);

  auto ref = errors_.GetLast();
  while (ref) {
    if (error_info.source_info() > ref->source_info()) {
      break;
    }
    ref = ref->GetPrev();
  }
  if (ref) {
    errors_.InsertAfter(&error_info, ref);
  } else {
    errors_.Prepend(&error_info);
  }
}
예제 #2
0
void CompileSession::RecordWarningInfo(const ErrorInfo& error_info) {
  warnings_.Append(&error_info.Clone());
}
예제 #3
0
void CompileSession::AddErrorInfo(const ErrorInfo& error_info) {
  RecordErrorInfo(error_info.Clone());
}