libclang: introduce cxstring::createNull()


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174173 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index 9eacd97..6b90cef 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -2935,7 +2935,7 @@
 extern "C" {
 CXString clang_getFileName(CXFile SFile) {
   if (!SFile)
-    return createCXString((const char*)NULL);
+    return cxstring::createNull();
 
   FileEntry *FEnt = static_cast<FileEntry *>(SFile);
   return createCXString(FEnt->getName());
@@ -5875,7 +5875,7 @@
 
 CXString clang_Cursor_getRawCommentText(CXCursor C) {
   if (!clang_isDeclaration(C.kind))
-    return createCXString((const char *) NULL);
+    return cxstring::createNull();
 
   const Decl *D = getCursorDecl(C);
   ASTContext &Context = getCursorContext(C);
@@ -5890,7 +5890,7 @@
 
 CXString clang_Cursor_getBriefCommentText(CXCursor C) {
   if (!clang_isDeclaration(C.kind))
-    return createCXString((const char *) NULL);
+    return cxstring::createNull();
 
   const Decl *D = getCursorDecl(C);
   const ASTContext &Context = getCursorContext(C);
@@ -5904,7 +5904,7 @@
     return createCXString(BriefText, false);
   }
 
-  return createCXString((const char *) NULL);
+  return cxstring::createNull();
 }
 
 CXComment clang_Cursor_getParsedComment(CXCursor C) {
diff --git a/tools/libclang/CIndexCodeCompletion.cpp b/tools/libclang/CIndexCodeCompletion.cpp
index 1ffd023..07c04ac 100644
--- a/tools/libclang/CIndexCodeCompletion.cpp
+++ b/tools/libclang/CIndexCodeCompletion.cpp
@@ -112,7 +112,7 @@
                                       unsigned chunk_number) {
   CodeCompletionString *CCStr = (CodeCompletionString *)completion_string;
   if (!CCStr || chunk_number >= CCStr->size())
-    return createCXString((const char*)0);
+    return cxstring::createNull();
 
   switch ((*CCStr)[chunk_number].Kind) {
   case CodeCompletionString::CK_TypedText:
@@ -211,7 +211,7 @@
                                        unsigned annotation_number) {
   CodeCompletionString *CCStr = (CodeCompletionString *)completion_string;
   return CCStr ? createCXString(CCStr->getAnnotation(annotation_number))
-               : createCXString((const char *) 0);
+               : cxstring::createNull();
 }
 
 CXString
@@ -222,7 +222,7 @@
   
   CodeCompletionString *CCStr = (CodeCompletionString *)completion_string;
   if (!CCStr)
-    return createCXString((const char *)0);
+    return cxstring::createNull();
   
   return createCXString(CCStr->getParentContextName(), /*DupString=*/false);
 }
@@ -232,7 +232,7 @@
   CodeCompletionString *CCStr = (CodeCompletionString *)completion_string;
 
   if (!CCStr)
-    return createCXString((const char *) NULL);
+    return cxstring::createNull();
 
   return createCXString(CCStr->getBriefComment(), /*DupString=*/false);
 }
diff --git a/tools/libclang/CXComment.cpp b/tools/libclang/CXComment.cpp
index 57bab18..0a90c65 100644
--- a/tools/libclang/CXComment.cpp
+++ b/tools/libclang/CXComment.cpp
@@ -124,7 +124,7 @@
 CXString clang_TextComment_getText(CXComment CXC) {
   const TextComment *TC = getASTNodeAs<TextComment>(CXC);
   if (!TC)
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(TC->getText(), /*DupString=*/ false);
 }
@@ -132,7 +132,7 @@
 CXString clang_InlineCommandComment_getCommandName(CXComment CXC) {
   const InlineCommandComment *ICC = getASTNodeAs<InlineCommandComment>(CXC);
   if (!ICC)
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   const CommandTraits &Traits = getCommandTraits(CXC);
   return createCXString(ICC->getCommandName(Traits), /*DupString=*/ false);
@@ -172,7 +172,7 @@
                                                unsigned ArgIdx) {
   const InlineCommandComment *ICC = getASTNodeAs<InlineCommandComment>(CXC);
   if (!ICC || ArgIdx >= ICC->getNumArgs())
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(ICC->getArgText(ArgIdx), /*DupString=*/ false);
 }
@@ -180,7 +180,7 @@
 CXString clang_HTMLTagComment_getTagName(CXComment CXC) {
   const HTMLTagComment *HTC = getASTNodeAs<HTMLTagComment>(CXC);
   if (!HTC)
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(HTC->getTagName(), /*DupString=*/ false);
 }
@@ -204,7 +204,7 @@
 CXString clang_HTMLStartTag_getAttrName(CXComment CXC, unsigned AttrIdx) {
   const HTMLStartTagComment *HST = getASTNodeAs<HTMLStartTagComment>(CXC);
   if (!HST || AttrIdx >= HST->getNumAttrs())
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(HST->getAttr(AttrIdx).Name, /*DupString=*/ false);
 }
@@ -212,7 +212,7 @@
 CXString clang_HTMLStartTag_getAttrValue(CXComment CXC, unsigned AttrIdx) {
   const HTMLStartTagComment *HST = getASTNodeAs<HTMLStartTagComment>(CXC);
   if (!HST || AttrIdx >= HST->getNumAttrs())
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(HST->getAttr(AttrIdx).Value, /*DupString=*/ false);
 }
@@ -220,7 +220,7 @@
 CXString clang_BlockCommandComment_getCommandName(CXComment CXC) {
   const BlockCommandComment *BCC = getASTNodeAs<BlockCommandComment>(CXC);
   if (!BCC)
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   const CommandTraits &Traits = getCommandTraits(CXC);
   return createCXString(BCC->getCommandName(Traits), /*DupString=*/ false);
@@ -238,7 +238,7 @@
                                               unsigned ArgIdx) {
   const BlockCommandComment *BCC = getASTNodeAs<BlockCommandComment>(CXC);
   if (!BCC || ArgIdx >= BCC->getNumArgs())
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(BCC->getArgText(ArgIdx), /*DupString=*/ false);
 }
@@ -254,7 +254,7 @@
 CXString clang_ParamCommandComment_getParamName(CXComment CXC) {
   const ParamCommandComment *PCC = getASTNodeAs<ParamCommandComment>(CXC);
   if (!PCC || !PCC->hasParamName())
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(PCC->getParamNameAsWritten(), /*DupString=*/ false);
 }
@@ -305,7 +305,7 @@
 CXString clang_TParamCommandComment_getParamName(CXComment CXC) {
   const TParamCommandComment *TPCC = getASTNodeAs<TParamCommandComment>(CXC);
   if (!TPCC || !TPCC->hasParamName())
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(TPCC->getParamNameAsWritten(), /*DupString=*/ false);
 }
@@ -338,7 +338,7 @@
   const VerbatimBlockLineComment *VBL =
       getASTNodeAs<VerbatimBlockLineComment>(CXC);
   if (!VBL)
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(VBL->getText(), /*DupString=*/ false);
 }
@@ -346,7 +346,7 @@
 CXString clang_VerbatimLineComment_getText(CXComment CXC) {
   const VerbatimLineComment *VLC = getASTNodeAs<VerbatimLineComment>(CXC);
   if (!VLC)
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   return createCXString(VLC->getText(), /*DupString=*/ false);
 }
@@ -838,7 +838,7 @@
 CXString clang_HTMLTagComment_getAsString(CXComment CXC) {
   const HTMLTagComment *HTC = getASTNodeAs<HTMLTagComment>(CXC);
   if (!HTC)
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   SmallString<128> HTML;
   CommentASTToHTMLConverter Converter(0, HTML, getCommandTraits(CXC));
@@ -849,7 +849,7 @@
 CXString clang_FullComment_getAsHTML(CXComment CXC) {
   const FullComment *FC = getASTNodeAs<FullComment>(CXC);
   if (!FC)
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
 
   SmallString<1024> HTML;
   CommentASTToHTMLConverter Converter(FC, HTML, getCommandTraits(CXC));
@@ -1377,7 +1377,7 @@
 CXString clang_FullComment_getAsXML(CXComment CXC) {
   const FullComment *FC = getASTNodeAs<FullComment>(CXC);
   if (!FC)
-    return createCXString((const char *) 0);
+    return cxstring::createNull();
   ASTContext &Context = FC->getDeclInfo()->CurrentDecl->getASTContext();
   CXTranslationUnit TU = CXC.TranslationUnit;
   SourceManager &SM = cxtu::getASTUnit(TU)->getSourceManager();
diff --git a/tools/libclang/CXCompilationDatabase.cpp b/tools/libclang/CXCompilationDatabase.cpp
index 6884593..7fb5f24 100644
--- a/tools/libclang/CXCompilationDatabase.cpp
+++ b/tools/libclang/CXCompilationDatabase.cpp
@@ -107,7 +107,7 @@
 clang_CompileCommand_getDirectory(CXCompileCommand CCmd)
 {
   if (!CCmd)
-    return createCXString((const char*)NULL);
+    return cxstring::createNull();
 
   CompileCommand *cmd = static_cast<CompileCommand *>(CCmd);
   return createCXString(cmd->Directory.c_str(), /*DupString=*/false);
@@ -126,12 +126,12 @@
 clang_CompileCommand_getArg(CXCompileCommand CCmd, unsigned Arg)
 {
   if (!CCmd)
-    return createCXString((const char*)NULL);
+    return cxstring::createNull();
 
   CompileCommand *Cmd = static_cast<CompileCommand *>(CCmd);
 
   if (Arg >= Cmd->CommandLine.size())
-    return createCXString((const char*)NULL);
+    return cxstring::createNull();
 
   return createCXString(Cmd->CommandLine[Arg].c_str(), /*DupString=*/false);
 }
diff --git a/tools/libclang/CXString.cpp b/tools/libclang/CXString.cpp
index 739646b..030e34c 100644
--- a/tools/libclang/CXString.cpp
+++ b/tools/libclang/CXString.cpp
@@ -29,6 +29,13 @@
 // Basic generation of CXStrings.
 //===----------------------------------------------------------------------===//
 
+CXString cxstring::createNull() {
+  CXString Str;
+  Str.data = 0;
+  Str.private_flags = CXS_Unmanaged;
+  return Str;
+}
+
 CXString cxstring::createCXString(const char *String, bool DupString){
   CXString Str;
   if (DupString) {
diff --git a/tools/libclang/CXString.h b/tools/libclang/CXString.h
index 3753ed4..5078a42 100644
--- a/tools/libclang/CXString.h
+++ b/tools/libclang/CXString.h
@@ -25,6 +25,9 @@
 
 struct CXStringBuf;
 
+/// \brief Create a CXString object for an NULL string.
+CXString createNull();
+
 /// \brief Create a CXString object from a C string.
 CXString createCXString(const char *String, bool DupString = false);