Home | History | Annotate | Download | only in LD
      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 
     13 namespace mcld {
     14 
     15 MsgHandler::MsgHandler(DiagnosticEngine& pEngine)
     16     : m_Engine(pEngine), m_NumArgs(0) {
     17 }
     18 
     19 MsgHandler::~MsgHandler() {
     20   emit();
     21 }
     22 
     23 bool MsgHandler::emit() {
     24   flushCounts();
     25   return m_Engine.emit();
     26 }
     27 
     28 void 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 
     35 void 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 
     42 void 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