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