DelayedDiagnostic.cpp revision 234353
126206Swpaul//===--- DelayedDiagnostic.cpp - Delayed declarator diagnostics -*- C++ -*-===// 226206Swpaul// 326206Swpaul// The LLVM Compiler Infrastructure 426206Swpaul// 526206Swpaul// This file is distributed under the University of Illinois Open Source 626206Swpaul// License. See LICENSE.TXT for details. 726206Swpaul// 826206Swpaul//===----------------------------------------------------------------------===// 926206Swpaul// 1026206Swpaul// This file defines the DelayedDiagnostic class implementation, which 1126206Swpaul// is used to record diagnostics that are being conditionally produced 1226206Swpaul// during declarator parsing. 1326206Swpaul// 1426206Swpaul// This file also defines AccessedEntity. 1526206Swpaul// 1626206Swpaul//===----------------------------------------------------------------------===// 1726206Swpaul#include "clang/Sema/DelayedDiagnostic.h" 1826206Swpaul#include <string.h> 1926206Swpaulusing namespace clang; 2026206Swpaulusing namespace sema; 2126206Swpaul 2226206SwpaulDelayedDiagnostic DelayedDiagnostic::makeDeprecation(SourceLocation Loc, 2326206Swpaul const NamedDecl *D, 2426206Swpaul const ObjCInterfaceDecl *UnknownObjCClass, 2526206Swpaul StringRef Msg) { 2626206Swpaul DelayedDiagnostic DD; 2726206Swpaul DD.Kind = Deprecation; 2826206Swpaul DD.Triggered = false; 2926206Swpaul DD.Loc = Loc; 3026206Swpaul DD.DeprecationData.Decl = D; 3126206Swpaul DD.DeprecationData.UnknownObjCClass = UnknownObjCClass; 3226206Swpaul char *MessageData = 0; 3326206Swpaul if (Msg.size()) { 3426206Swpaul MessageData = new char [Msg.size()]; 3526206Swpaul memcpy(MessageData, Msg.data(), Msg.size()); 3626206Swpaul } 3726206Swpaul 38114629Sobrien DD.DeprecationData.Message = MessageData; 39114629Sobrien DD.DeprecationData.MessageLen = Msg.size(); 4026206Swpaul return DD; 4126206Swpaul} 4226206Swpaul 4326206Swpaulvoid DelayedDiagnostic::Destroy() { 4426206Swpaul switch (Kind) { 4526206Swpaul case Access: 4626206Swpaul getAccessData().~AccessedEntity(); 4726206Swpaul break; 4826206Swpaul 4926206Swpaul case Deprecation: 5026206Swpaul delete [] DeprecationData.Message; 5126206Swpaul break; 5226206Swpaul 5326206Swpaul case ForbiddenType: 5426206Swpaul break; 5526206Swpaul } 5626206Swpaul} 5726206Swpaul