1affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===- MsgHandler.cpp -----------------------------------------------------===// 2affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 3affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// The MCLinker Project 4affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 5affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// This file is distributed under the University of Illinois Open Source 6affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// License. See LICENSE.TXT for details. 7affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 8affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/MsgHandler.h" 10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/DiagnosticEngine.h" 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 14affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 15affc150dc44fab1911775a49636d0ce85333b634Zonr ChangMsgHandler::MsgHandler(DiagnosticEngine& pEngine) 1637b74a387bb3993387029859c2d9d051c41c724eStephen Hines : m_Engine(pEngine), m_NumArgs(0) { 17affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 18affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 1937b74a387bb3993387029859c2d9d051c41c724eStephen HinesMsgHandler::~MsgHandler() { 20affc150dc44fab1911775a49636d0ce85333b634Zonr Chang emit(); 21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 22affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 2337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool MsgHandler::emit() { 24affc150dc44fab1911775a49636d0ce85333b634Zonr Chang flushCounts(); 25affc150dc44fab1911775a49636d0ce85333b634Zonr Chang return m_Engine.emit(); 26affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 2837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid MsgHandler::addString(llvm::StringRef pStr) const { 29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang assert(m_NumArgs < DiagnosticEngine::MaxArguments && 30affc150dc44fab1911775a49636d0ce85333b634Zonr Chang "Too many arguments to diagnostic!"); 31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Engine.state().ArgumentKinds[m_NumArgs] = DiagnosticEngine::ak_std_string; 32affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Engine.state().ArgumentStrs[m_NumArgs++] = pStr.data(); 33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 3537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid MsgHandler::addString(const std::string& pStr) const { 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang assert(m_NumArgs < DiagnosticEngine::MaxArguments && 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang "Too many arguments to diagnostic!"); 38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Engine.state().ArgumentKinds[m_NumArgs] = DiagnosticEngine::ak_std_string; 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Engine.state().ArgumentStrs[m_NumArgs++] = pStr; 40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 4237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid MsgHandler::addTaggedVal(intptr_t pValue, 4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines DiagnosticEngine::ArgumentKind pKind) const { 44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang assert(m_NumArgs < DiagnosticEngine::MaxArguments && 45affc150dc44fab1911775a49636d0ce85333b634Zonr Chang "Too many arguments to diagnostic!"); 46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Engine.state().ArgumentKinds[m_NumArgs] = pKind; 47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Engine.state().ArgumentVals[m_NumArgs++] = pValue; 48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 51