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