| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3fe79103bbadbadc21770b707584ba1648462ed4
|
| --- /dev/null
|
| +++ b/tools/clang/blink_gc_plugin/JsonWriter.h
|
| @@ -0,0 +1,70 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_
|
| +#define TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_
|
| +
|
| +#include "llvm/Support/raw_ostream.h"
|
| +
|
| +// Helper to write information for the points-to graph.
|
| +class JsonWriter {
|
| + public:
|
| + static JsonWriter* from(std::unique_ptr<llvm::raw_ostream> os) {
|
| + return os ? new JsonWriter(std::move(os)) : 0;
|
| + }
|
| + void OpenList() {
|
| + Separator();
|
| + *os_ << "[";
|
| + state_.push(false);
|
| + }
|
| + void OpenList(const std::string key) {
|
| + Write(key);
|
| + *os_ << ":";
|
| + OpenList();
|
| + }
|
| + void CloseList() {
|
| + *os_ << "]";
|
| + state_.pop();
|
| + }
|
| + void OpenObject() {
|
| + Separator();
|
| + *os_ << "{";
|
| + state_.push(false);
|
| + }
|
| + void CloseObject() {
|
| + *os_ << "}\n";
|
| + state_.pop();
|
| + }
|
| + void Write(const size_t val) {
|
| + Separator();
|
| + *os_ << val;
|
| + }
|
| + void Write(const std::string val) {
|
| + Separator();
|
| + *os_ << "\"" << val << "\"";
|
| + }
|
| + void Write(const std::string key, const size_t val) {
|
| + Separator();
|
| + *os_ << "\"" << key << "\":" << val;
|
| + }
|
| + void Write(const std::string key, const std::string val) {
|
| + Separator();
|
| + *os_ << "\"" << key << "\":\"" << val << "\"";
|
| + }
|
| + private:
|
| + JsonWriter(std::unique_ptr<llvm::raw_ostream> os) : os_(std::move(os)) {}
|
| + void Separator() {
|
| + if (state_.empty())
|
| + return;
|
| + if (state_.top()) {
|
| + *os_ << ",";
|
| + return;
|
| + }
|
| + state_.top() = true;
|
| + }
|
| + std::unique_ptr<llvm::raw_ostream> os_;
|
| + std::stack<bool> state_;
|
| +};
|
| +
|
| +#endif // TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_
|
|
|