Index: tools/clang/blink_gc_plugin/JsonWriter.h |
diff --git a/tools/clang/blink_gc_plugin/JsonWriter.h b/tools/clang/blink_gc_plugin/JsonWriter.h |
index 54a87aae59e7cbf69fd48f345b977892088d51ba..09504b3aaf9feb7e011d0740959aab6c61624a89 100644 |
--- a/tools/clang/blink_gc_plugin/JsonWriter.h |
+++ b/tools/clang/blink_gc_plugin/JsonWriter.h |
@@ -7,66 +7,75 @@ |
#include "llvm/Support/raw_ostream.h" |
+// TODO(hans): Remove this #ifdef after Clang is rolled past r234897. |
+#ifdef LLVM_FORCE_HEAD_REVISION |
+#define JSON_WRITER_STREAM std::unique_ptr<llvm::raw_ostream> |
+#else |
+#define JSON_WRITER_STREAM llvm::raw_fd_ostream* |
+#endif |
+ |
// Helper to write information for the points-to graph. |
class JsonWriter { |
public: |
- static JsonWriter* from(llvm::raw_fd_ostream* os) { |
- return os ? new JsonWriter(os) : 0; |
+ static JsonWriter* from(JSON_WRITER_STREAM os) { |
+ return os ? new JsonWriter(std::move(os)) : 0; |
} |
+#ifndef LLVM_FORCE_HEAD_REVISION |
~JsonWriter() { |
- os_.close(); |
+ delete os_; |
} |
+#endif |
void OpenList() { |
Separator(); |
- os_ << "["; |
+ *os_ << "["; |
state_.push(false); |
} |
void OpenList(const std::string key) { |
Write(key); |
- os_ << ":"; |
+ *os_ << ":"; |
OpenList(); |
} |
void CloseList() { |
- os_ << "]"; |
+ *os_ << "]"; |
state_.pop(); |
} |
void OpenObject() { |
Separator(); |
- os_ << "{"; |
+ *os_ << "{"; |
state_.push(false); |
} |
void CloseObject() { |
- os_ << "}\n"; |
+ *os_ << "}\n"; |
state_.pop(); |
} |
void Write(const size_t val) { |
Separator(); |
- os_ << val; |
+ *os_ << val; |
} |
void Write(const std::string val) { |
Separator(); |
- os_ << "\"" << val << "\""; |
+ *os_ << "\"" << val << "\""; |
} |
void Write(const std::string key, const size_t val) { |
Separator(); |
- os_ << "\"" << key << "\":" << val; |
+ *os_ << "\"" << key << "\":" << val; |
} |
void Write(const std::string key, const std::string val) { |
Separator(); |
- os_ << "\"" << key << "\":\"" << val << "\""; |
+ *os_ << "\"" << key << "\":\"" << val << "\""; |
} |
private: |
- JsonWriter(llvm::raw_fd_ostream* os) : os_(*os) {} |
+ JsonWriter(JSON_WRITER_STREAM os) : os_(std::move(os)) {} |
void Separator() { |
if (state_.empty()) |
return; |
if (state_.top()) { |
- os_ << ","; |
+ *os_ << ","; |
return; |
} |
state_.top() = true; |
} |
- llvm::raw_fd_ostream& os_; |
+ JSON_WRITER_STREAM os_; |
std::stack<bool> state_; |
}; |