MarcusJohnson91 updated this revision to Diff 359590.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D103426/new/

https://reviews.llvm.org/D103426

Files:
  clang/include/clang/AST/Expr.h
  clang/include/clang/AST/FormatString.h
  clang/include/clang/AST/Type.h
  clang/lib/AST/Expr.cpp
  clang/lib/AST/PrintfFormatString.cpp
  clang/lib/AST/Type.cpp

Index: clang/lib/AST/Type.cpp
===================================================================
--- clang/lib/AST/Type.cpp
+++ clang/lib/AST/Type.cpp
@@ -1962,18 +1962,6 @@
   return false;
 }
 
-bool Type::isType(const std::string TypeName) const {
-  QualType Desugar = this->getLocallyUnqualifiedSingleStepDesugaredType();
-  
-  
-  while (!Desugar->isCanonicalUnqualified()) {
-    if (Desugar.getAsString() == TypeName) {
-      return true;
-    }
-    Desugar = Desugar->getLocallyUnqualifiedSingleStepDesugaredType();
-  }
-}
-
 bool Type::isChar8Type() const {
   if (const BuiltinType *BT = dyn_cast<BuiltinType>(CanonicalType))
     return BT->getKind() == BuiltinType::Char8;
@@ -1985,7 +1973,15 @@
     if (BT->getKind() == BuiltinType::Char16)
       return true;
   if (!LangOpts.CPlusPlus) {
-    return isType("char16_t");
+    QualType Desugar = this->getLocallyUnqualifiedSingleStepDesugaredType();
+    
+    
+    while (!Desugar->isCanonicalUnqualified()) {
+      if (Desugar.getAsString() == "char16_t") {
+        return true;
+      }
+      Desugar = Desugar->getLocallyUnqualifiedSingleStepDesugaredType();
+    }
   }
   return false;
 }
@@ -1995,7 +1991,14 @@
     if (BT->getKind() == BuiltinType::Char32)
       return true;
   if (!LangOpts.CPlusPlus) {
-    return isType("char32_t");
+    QualType Desugar = this->getLocallyUnqualifiedSingleStepDesugaredType();
+    
+    while (!Desugar->isCanonicalUnqualified()) {
+      if (Desugar.getAsString() == "char32_t") {
+        return true;
+      }
+      Desugar = Desugar->getLocallyUnqualifiedSingleStepDesugaredType();
+    }
   }
   return false;
 }
Index: clang/lib/AST/PrintfFormatString.cpp
===================================================================
--- clang/lib/AST/PrintfFormatString.cpp
+++ clang/lib/AST/PrintfFormatString.cpp
@@ -643,6 +643,9 @@
                          "const unichar *");
         return ArgType(ArgType::WCStrTy, "wchar_t *");
       }
+      if (LM.getKind() == LengthModifier::AsWide) {
+        return ArgType(ArgType::WCStrTy, "wchar_t *");
+      }
       if (LM.getKind() == LengthModifier::AsUTF16)
         return ArgType(ArgType::Char16Ty, "char16_t *");
       if (LM.getKind() == LengthModifier::AsUTF32)
@@ -860,6 +863,9 @@
     LM.setKind(LengthModifier::AsLongDouble);
     break;
       
+  case BuiltinType::Char8:
+    LM.setKind(LengthModifier::AsUTF8);
+      
   case BuiltinType::Char16:
     LM.setKind(LengthModifier::AsUTF16);
     break;
Index: clang/lib/AST/Expr.cpp
===================================================================
--- clang/lib/AST/Expr.cpp
+++ clang/lib/AST/Expr.cpp
@@ -1331,6 +1331,8 @@
                                  const LangOptions &Features,
                                  const TargetInfo &Target, unsigned *StartToken,
                                  unsigned *StartTokenByteOffset) const {
+  assert((getKind() == StringLiteral::Ascii || getKind() == StringLiteral::UTF8) &&
+         "Only narrow string literals are currently supported");
   // Loop over all of the tokens in this string until we find the one that
   // contains the byte we're looking for.
   unsigned TokNo = 0;
Index: clang/include/clang/AST/Type.h
===================================================================
--- clang/include/clang/AST/Type.h
+++ clang/include/clang/AST/Type.h
@@ -1972,7 +1972,6 @@
   /// Determine whether this type is a scoped enumeration type.
   bool isScopedEnumeralType() const;
   bool isBooleanType() const;
-  bool isType(const std::string TypeName) const;
   bool isCharType() const;
   bool isChar8Type() const;
   bool isWideCharType() const;
Index: clang/include/clang/AST/FormatString.h
===================================================================
--- clang/include/clang/AST/FormatString.h
+++ clang/include/clang/AST/FormatString.h
@@ -80,8 +80,8 @@
     AsLongDouble, // 'L'
     AsAllocate,   // for '%as', GNU extension to C90 scanf
     AsMAllocate,  // for '%ms', GNU extension to scanf
-    AsUTF16,      // for '%l16(c|s)', soon to be standardized
-    AsUTF32,      // for '%l32(c|s)', soon to be standardized
+    AsUTF16,      // for '%l16(c|s)', Clang extension
+    AsUTF32,      // for '%l32(c|s)', Clang extension
     AsWide,       // 'w' (MSVCRT, like l but only for c, C, s, S, or Z
     AsWideChar = AsLong // for '%ls', only makes sense for printf
   };
Index: clang/include/clang/AST/Expr.h
===================================================================
--- clang/include/clang/AST/Expr.h
+++ clang/include/clang/AST/Expr.h
@@ -1850,21 +1850,18 @@
   std::u16string getStringAsChar16() const {
     assert(getCharByteWidth() == 2 &&
            "This function is used in places that assume strings use char16_t");
-    //return reinterpret_cast<const char16_t *>(getTrailingObjects<char>());
     return std::u16string(reinterpret_cast<const char16_t *>(getTrailingObjects<char>()), reinterpret_cast<const char16_t *>(getTrailingObjects<char>() + getByteLength()));
   }
                                       
   std::u32string getStringAsChar32() const {
     assert(getCharByteWidth() == 4 &&
            "This function is used in places that assume strings use char32_t");
-    //return reinterpret_cast<const char32_t *>(getTrailingObjects<char>());
     return std::u32string(reinterpret_cast<const char32_t *>(getTrailingObjects<char>()), reinterpret_cast<const char32_t *>(getTrailingObjects<char>() + getByteLength()));
   }
                                       
   std::wstring getStringAsWChar() const {
     assert((getCharByteWidth() == 2 || getCharByteWidth() == 4) &&
            "This function is used in places that assume strings use wchar_t");
-    //return reinterpret_cast<const wchar_t *>(getTrailingObjects<char>());
     return std::wstring(reinterpret_cast<const wchar_t *>(getTrailingObjects<char>()), reinterpret_cast<const wchar_t *>(getTrailingObjects<char>() + getByteLength()));
   }
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to