| //===- MsgHandler.cpp -----------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #include <mcld/LD/MsgHandler.h> |
| #include <mcld/LD/DiagnosticEngine.h> |
| |
| using namespace mcld; |
| |
| MsgHandler::MsgHandler(DiagnosticEngine& pEngine) |
| : m_Engine(pEngine), m_NumArgs(0) { |
| } |
| |
| MsgHandler::~MsgHandler() |
| { |
| emit(); |
| } |
| |
| bool MsgHandler::emit() |
| { |
| flushCounts(); |
| return m_Engine.emit(); |
| } |
| |
| void MsgHandler::addString(llvm::StringRef pStr) const |
| { |
| assert(m_NumArgs < DiagnosticEngine::MaxArguments && |
| "Too many arguments to diagnostic!"); |
| m_Engine.state().ArgumentKinds[m_NumArgs] = DiagnosticEngine::ak_std_string; |
| m_Engine.state().ArgumentStrs[m_NumArgs++] = pStr.data(); |
| } |
| |
| void MsgHandler::addString(const std::string& pStr) const |
| { |
| assert(m_NumArgs < DiagnosticEngine::MaxArguments && |
| "Too many arguments to diagnostic!"); |
| m_Engine.state().ArgumentKinds[m_NumArgs] = DiagnosticEngine::ak_std_string; |
| m_Engine.state().ArgumentStrs[m_NumArgs++] = pStr; |
| } |
| |
| void MsgHandler::addTaggedVal(intptr_t pValue, DiagnosticEngine::ArgumentKind pKind) const |
| { |
| assert(m_NumArgs < DiagnosticEngine::MaxArguments && |
| "Too many arguments to diagnostic!"); |
| m_Engine.state().ArgumentKinds[m_NumArgs] = pKind; |
| m_Engine.state().ArgumentVals[m_NumArgs++] = pValue; |
| } |
| |