//===- DiagnosticEngine.cpp -----------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include <mcld/LD/DiagnosticEngine.h> #include <mcld/LD/DiagnosticPrinter.h> #include <mcld/LD/DiagnosticLineInfo.h> #include <mcld/MC/MCLDInfo.h> using namespace mcld; //===----------------------------------------------------------------------===// // DiagnosticEngine //===----------------------------------------------------------------------===// DiagnosticEngine::DiagnosticEngine() : m_pLDInfo(NULL), m_pLineInfo(NULL), m_pPrinter(NULL), m_pInfoMap(NULL), m_OwnPrinter(false) { } DiagnosticEngine::~DiagnosticEngine() { if (m_OwnPrinter && m_pPrinter != NULL) delete m_pPrinter; } void DiagnosticEngine::reset(const MCLDInfo& pLDInfo) { m_pLDInfo = &pLDInfo; m_pInfoMap = new DiagnosticInfos(*m_pLDInfo); m_State.reset(); } void DiagnosticEngine::setLineInfo(DiagnosticLineInfo& pLineInfo) { m_pLineInfo = &pLineInfo; } void DiagnosticEngine::setPrinter(DiagnosticPrinter& pPrinter, bool pShouldOwnPrinter) { if (m_OwnPrinter && NULL != m_pPrinter) delete m_pPrinter; m_pPrinter = &pPrinter; m_OwnPrinter = pShouldOwnPrinter; } // emit - process current diagnostic. bool DiagnosticEngine::emit() { bool emitted = m_pInfoMap->process(*this); m_State.reset(); return emitted; }