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 11#include "mcld/LD/DiagnosticEngine.h" 12 13namespace mcld { 14 15MsgHandler::MsgHandler(DiagnosticEngine& pEngine) 16 : m_Engine(pEngine), m_NumArgs(0) { 17} 18 19MsgHandler::~MsgHandler() { 20 emit(); 21} 22 23bool MsgHandler::emit() { 24 flushCounts(); 25 return m_Engine.emit(); 26} 27 28void MsgHandler::addString(llvm::StringRef pStr) const { 29 assert(m_NumArgs < DiagnosticEngine::MaxArguments && 30 "Too many arguments to diagnostic!"); 31 m_Engine.state().ArgumentKinds[m_NumArgs] = DiagnosticEngine::ak_std_string; 32 m_Engine.state().ArgumentStrs[m_NumArgs++] = pStr.data(); 33} 34 35void MsgHandler::addString(const std::string& pStr) const { 36 assert(m_NumArgs < DiagnosticEngine::MaxArguments && 37 "Too many arguments to diagnostic!"); 38 m_Engine.state().ArgumentKinds[m_NumArgs] = DiagnosticEngine::ak_std_string; 39 m_Engine.state().ArgumentStrs[m_NumArgs++] = pStr; 40} 41 42void MsgHandler::addTaggedVal(intptr_t pValue, 43 DiagnosticEngine::ArgumentKind pKind) const { 44 assert(m_NumArgs < DiagnosticEngine::MaxArguments && 45 "Too many arguments to diagnostic!"); 46 m_Engine.state().ArgumentKinds[m_NumArgs] = pKind; 47 m_Engine.state().ArgumentVals[m_NumArgs++] = pValue; 48} 49 50} // namespace mcld 51