1affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===- DiagnosticEngine.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//===----------------------------------------------------------------------===//
9affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/LD/DiagnosticEngine.h>
10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/LD/DiagnosticPrinter.h>
11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/LD/DiagnosticLineInfo.h>
12affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/MC/MCLDInfo.h>
13affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
14affc150dc44fab1911775a49636d0ce85333b634Zonr Changusing namespace mcld;
15affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
1667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===----------------------------------------------------------------------===//
17affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// DiagnosticEngine
1867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===----------------------------------------------------------------------===//
1967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei LiaoDiagnosticEngine::DiagnosticEngine()
2067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  : m_pLDInfo(NULL), m_pLineInfo(NULL), m_pPrinter(NULL),
2167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    m_pInfoMap(NULL), m_OwnPrinter(false) {
22affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
23affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
24affc150dc44fab1911775a49636d0ce85333b634Zonr ChangDiagnosticEngine::~DiagnosticEngine()
25affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
26affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  if (m_OwnPrinter && m_pPrinter != NULL)
27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    delete m_pPrinter;
28affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
3067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaovoid DiagnosticEngine::reset(const MCLDInfo& pLDInfo)
3167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao{
3267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLDInfo = &pLDInfo;
3367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pInfoMap = new DiagnosticInfos(*m_pLDInfo);
3467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_State.reset();
3567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao}
3667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
3767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaovoid DiagnosticEngine::setLineInfo(DiagnosticLineInfo& pLineInfo)
3867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao{
3967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLineInfo = &pLineInfo;
4067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao}
4167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
42affc150dc44fab1911775a49636d0ce85333b634Zonr Changvoid DiagnosticEngine::setPrinter(DiagnosticPrinter& pPrinter,
43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                                  bool pShouldOwnPrinter)
44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
4567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  if (m_OwnPrinter && NULL != m_pPrinter)
46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    delete m_pPrinter;
47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  m_pPrinter = &pPrinter;
48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  m_OwnPrinter = pShouldOwnPrinter;
49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// emit - process current diagnostic.
52affc150dc44fab1911775a49636d0ce85333b634Zonr Changbool DiagnosticEngine::emit()
53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
5467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  bool emitted = m_pInfoMap->process(*this);
55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  m_State.reset();
56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  return emitted;
57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
59