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