1//===- MsgHandler.cpp -----------------------------------------------------===//
2//
3//                     The MCLinker Project
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9#include <mcld/LD/MsgHandler.h>
10#include <mcld/LD/DiagnosticEngine.h>
11
12using namespace mcld;
13
14MsgHandler::MsgHandler(DiagnosticEngine& pEngine)
15 : m_Engine(pEngine), m_NumArgs(0) {
16}
17
18MsgHandler::~MsgHandler()
19{
20  emit();
21}
22
23bool MsgHandler::emit()
24{
25  flushCounts();
26  return m_Engine.emit();
27}
28
29void MsgHandler::addString(llvm::StringRef pStr) const
30{
31  assert(m_NumArgs < DiagnosticEngine::MaxArguments &&
32         "Too many arguments to diagnostic!");
33  m_Engine.state().ArgumentKinds[m_NumArgs] = DiagnosticEngine::ak_std_string;
34  m_Engine.state().ArgumentStrs[m_NumArgs++] = pStr.data();
35}
36
37void MsgHandler::addString(const std::string& pStr) const
38{
39  assert(m_NumArgs < DiagnosticEngine::MaxArguments &&
40         "Too many arguments to diagnostic!");
41  m_Engine.state().ArgumentKinds[m_NumArgs] = DiagnosticEngine::ak_std_string;
42  m_Engine.state().ArgumentStrs[m_NumArgs++] = pStr;
43}
44
45void MsgHandler::addTaggedVal(intptr_t pValue, DiagnosticEngine::ArgumentKind pKind) const
46{
47  assert(m_NumArgs < DiagnosticEngine::MaxArguments &&
48         "Too many arguments to diagnostic!");
49  m_Engine.state().ArgumentKinds[m_NumArgs] = pKind;
50  m_Engine.state().ArgumentVals[m_NumArgs++] = pValue;
51}
52
53