//===- 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; }