Remove some std stream usage from Support and TableGen
authorReid Kleckner <reid@kleckner.net>
Tue, 6 Aug 2013 22:51:21 +0000 (22:51 +0000)
committerReid Kleckner <reid@kleckner.net>
Tue, 6 Aug 2013 22:51:21 +0000 (22:51 +0000)
LLVM's coding standards recommend raw_ostream and MemoryBuffer for
reading and writing text.

This has the side effect of allowing clang to compile more of Support
and TableGen in the Microsoft C++ ABI.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187826 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Disassembler.cpp
lib/Support/LockFileManager.cpp
lib/TableGen/TGParser.cpp
utils/TableGen/AsmMatcherEmitter.cpp

index b3244fab7df7b26b70c2a87cfa77b24ee91cf63a..27df3a9e2cb7b0d5c45cba03d62143fcccfd9067 100644 (file)
@@ -41,10 +41,10 @@ bool llvm::sys::hasDisassembler()
 
 std::string llvm::sys::disassembleBuffer(uint8_t* start, size_t length,
                                          uint64_t pc) {
-  std::stringstream res;
-
 #if (defined (__i386__) || defined (__amd64__) || defined (__x86_64__)) \
   && USE_UDIS86
+  std::stringstream res;
+
   unsigned bits;
 # if defined(__i386__)
   bits = 32;
@@ -66,9 +66,9 @@ std::string llvm::sys::disassembleBuffer(uint8_t* start, size_t length,
   while (ud_disassemble(&ud_obj)) {
     res << ud_insn_off(&ud_obj) << ":\t" << ud_insn_asm(&ud_obj) << "\n";
   }
-#else
-  res << "No disassembler available. See configure help for options.\n";
-#endif
 
   return res.str();
+#else
+  return "No disassembler available. See configure help for options.\n";
+#endif
 }
index 21c4d4070d264bb89b789c1572ac3bd8dcc36b49..b1ff22c2e68fa25f1b2a5878cbd282a088a653e7 100644 (file)
@@ -7,9 +7,11 @@
 //
 //===----------------------------------------------------------------------===//
 #include "llvm/Support/LockFileManager.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringExtras.h"
 #include "llvm/Support/FileSystem.h"
+#include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/raw_ostream.h"
-#include <fstream>
 #include <sys/stat.h>
 #include <sys/types.h>
 #if LLVM_ON_WIN32
@@ -35,16 +37,18 @@ LockFileManager::readLockFile(StringRef LockFileName) {
 
   // Read the owning host and PID out of the lock file. If it appears that the
   // owning process is dead, the lock file is invalid.
-  int PID = 0;
-  std::string Hostname;
-  std::ifstream Input(LockFileName.str().c_str());
-  if (Input >> Hostname >> PID && PID > 0 &&
-      processStillExecuting(Hostname, PID))
-    return std::make_pair(Hostname, PID);
+  OwningPtr<MemoryBuffer> MB;
+  if (MemoryBuffer::getFile(LockFileName, MB)) {
+    StringRef Hostname;
+    StringRef PIDStr;
+    tie(Hostname, PIDStr) = getToken(MB->getBuffer(), " ");
+    int PID;
+    if (PIDStr.getAsInteger(10, PID))
+      return std::make_pair(std::string(Hostname), PID);
+  }
 
   // Delete the lock file. It's invalid anyway.
-  bool Existed;
-  sys::fs::remove(LockFileName, Existed);
+  sys::fs::remove(LockFileName);
   return None;
 }
 
index 86ad2a6e3c09c6899d0d534baa5c72654d8d3b6e..965cd00396e6a1382e1e9f7bc59aa479433c870a 100644 (file)
@@ -1271,10 +1271,11 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType,
     if (ItemType != 0) {
       ListRecTy *ListType = dyn_cast<ListRecTy>(ItemType);
       if (ListType == 0) {
-        std::stringstream s;
-        s << "Type mismatch for list, expected list type, got "
-          << ItemType->getAsString();
-        TokError(s.str());
+        std::string s;
+        raw_string_ostream ss(s);
+        ss << "Type mismatch for list, expected list type, got "
+           << ItemType->getAsString();
+        TokError(ss.str());
         return 0;
       }
       GivenListTy = ListType;
index 840c9aa34e68c286a5f11cb71a57b0d732b7e5d8..468ce1c007d574fd89e8805c287e03214e681e25 100644 (file)
@@ -2069,7 +2069,8 @@ static void emitIsSubclass(CodeGenTarget &Target,
   OS << "  if (A == B)\n";
   OS << "    return true;\n\n";
 
-  std::stringstream SS;
+  std::string OStr;
+  raw_string_ostream SS(OStr);
   unsigned Count = 0;
   SS << "  switch (A) {\n";
   SS << "  default:\n";