[cfe-commits] r119698 - /cfe/trunk/lib/Basic/SourceManager.cpp

Benjamin Kramer benny.kra at googlemail.com
Thu Nov 18 04:46:39 PST 2010


Author: d0k
Date: Thu Nov 18 06:46:39 2010
New Revision: 119698

URL: http://llvm.org/viewvc/llvm-project?rev=119698&view=rev
Log:
Fix a typo in the UTF-8 BOM (PR8645). Use a StringSwitch while at it.

Modified:
    cfe/trunk/lib/Basic/SourceManager.cpp

Modified: cfe/trunk/lib/Basic/SourceManager.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/SourceManager.cpp?rev=119698&r1=119697&r2=119698&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/SourceManager.cpp (original)
+++ cfe/trunk/lib/Basic/SourceManager.cpp Thu Nov 18 06:46:39 2010
@@ -15,6 +15,7 @@
 #include "clang/Basic/SourceManagerInternals.h"
 #include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/FileManager.h"
+#include "llvm/ADT/StringSwitch.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/raw_ostream.h"
@@ -131,30 +132,20 @@
     // http://en.wikipedia.org/wiki/Byte_order_mark for more information.
     if (!isBufferInvalid()) {
       llvm::StringRef BufStr = Buffer.getPointer()->getBuffer();
-      const char *BOM = 0;
-      if (BufStr.startswith("\xFE\xBB\xBF"))
-        BOM = "UTF-8";
-      else if (BufStr.startswith("\xFE\xFF"))
-        BOM = "UTF-16 (BE)";
-      else if (BufStr.startswith("\xFF\xFE"))
-        BOM = "UTF-16 (LE)";
-      else if (BufStr.startswith(llvm::StringRef("\x00\x00\xFE\xFF", 4)))
-        BOM = "UTF-32 (BE)";
-      else if (BufStr.startswith(llvm::StringRef("\xFF\xFE\x00\x00", 4)))
-        BOM = "UTF-32 (LE)";
-      else if (BufStr.startswith("\x2B\x2F\x76"))
-        BOM = "UTF-7";
-      else if (BufStr.startswith("\xF7\x64\x4C"))
-        BOM = "UTF-1";
-      else if (BufStr.startswith("\xDD\x73\x66\x73"))
-        BOM = "UTF-EBCDIC";
-      else if (BufStr.startswith("\x0E\xFE\xFF"))
-        BOM = "SDSU";
-      else if (BufStr.startswith("\xFB\xEE\x28"))
-        BOM = "BOCU-1";
-      else if (BufStr.startswith("\x84\x31\x95\x33"))
-        BOM = "BOCU-1";
-      
+      const char *BOM = llvm::StringSwitch<const char *>(BufStr)
+        .StartsWith("\xEF\xBB\xBF", "UTF-8")
+        .StartsWith("\xFE\xFF", "UTF-16 (BE)")
+        .StartsWith("\xFF\xFE", "UTF-16 (LE)")
+        .StartsWith("\x00\x00\xFE\xFF", "UTF-32 (BE)")
+        .StartsWith("\xFF\xFE\x00\x00", "UTF-32 (LE)")
+        .StartsWith("\x2B\x2F\x76", "UTF-7")
+        .StartsWith("\xF7\x64\x4C", "UTF-1")
+        .StartsWith("\xDD\x73\x66\x73", "UTF-EBCDIC")
+        .StartsWith("\x0E\xFE\xFF", "SDSU")
+        .StartsWith("\xFB\xEE\x28", "BOCU-1")
+        .StartsWith("\x84\x31\x95\x33", "GB-18030")
+        .Default(0);
+
       if (BOM) {
         Diag.Report(FullSourceLoc(Loc, SM), diag::err_unsupported_bom)
           << BOM << Entry->getName();





More information about the cfe-commits mailing list