Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(478)

Unified Diff: src/compiler/graph-visualizer.cc

Issue 2421313002: [turbofan] Fix JSON escapes in --trace-turbo files. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/graph-visualizer.cc
diff --git a/src/compiler/graph-visualizer.cc b/src/compiler/graph-visualizer.cc
index d810c3785ac71d8a415958ddddc1c9559df01f90..f30effe830065858327b1df82a435d72c04ae636 100644
--- a/src/compiler/graph-visualizer.cc
+++ b/src/compiler/graph-visualizer.cc
@@ -81,33 +81,28 @@ static const char* SafeMnemonic(Node* node) {
return node == nullptr ? "null" : node->op()->mnemonic();
}
-#define DEAD_COLOR "#999999"
-
-class Escaped {
+class JSONEscaped {
public:
- explicit Escaped(const std::ostringstream& os,
- const char* escaped_chars = "<>|{}\\")
- : str_(os.str()), escaped_chars_(escaped_chars) {}
-
- friend std::ostream& operator<<(std::ostream& os, const Escaped& e) {
- for (std::string::const_iterator i = e.str_.begin(); i != e.str_.end();
- ++i) {
- if (e.needs_escape(*i)) os << "\\";
- os << *i;
- }
+ explicit JSONEscaped(const std::ostringstream& os) : str_(os.str()) {}
+
+ friend std::ostream& operator<<(std::ostream& os, const JSONEscaped& e) {
+ for (char c : e.str_) PipeCharacter(os, c);
return os;
}
private:
- bool needs_escape(char ch) const {
- for (size_t i = 0; i < strlen(escaped_chars_); ++i) {
- if (ch == escaped_chars_[i]) return true;
- }
- return false;
+ static std::ostream& PipeCharacter(std::ostream& os, char c) {
+ if (c == '"') return os << "\\\"";
+ if (c == '\\') return os << "\\\\";
+ if (c == '\b') return os << "\\b";
+ if (c == '\f') return os << "\\f";
+ if (c == '\n') return os << "\\n";
+ if (c == '\r') return os << "\\r";
+ if (c == '\t') return os << "\\t";
+ return os << c;
}
const std::string str_;
- const char* const escaped_chars_;
};
class JSONGraphNodeWriter {
@@ -135,11 +130,11 @@ class JSONGraphNodeWriter {
node->op()->PrintTo(label, Operator::PrintVerbosity::kSilent);
node->op()->PrintTo(title, Operator::PrintVerbosity::kVerbose);
node->op()->PrintPropsTo(properties);
- os_ << "{\"id\":" << SafeId(node) << ",\"label\":\""
- << Escaped(label, "\"\\") << "\""
- << ",\"title\":\"" << Escaped(title, "\"\\") << "\""
+ os_ << "{\"id\":" << SafeId(node) << ",\"label\":\"" << JSONEscaped(label)
+ << "\""
+ << ",\"title\":\"" << JSONEscaped(title) << "\""
<< ",\"live\": " << (live_.IsLive(node) ? "true" : "false")
- << ",\"properties\":\"" << Escaped(properties, "\"\\") << "\"";
+ << ",\"properties\":\"" << JSONEscaped(properties) << "\"";
IrOpcode::Value opcode = node->opcode();
if (IrOpcode::IsPhiOpcode(opcode)) {
os_ << ",\"rankInputs\":[0," << NodeProperties::FirstControlIndex(node)
@@ -171,7 +166,7 @@ class JSONGraphNodeWriter {
Type* type = NodeProperties::GetType(node);
std::ostringstream type_out;
type->PrintTo(type_out);
- os_ << ",\"type\":\"" << Escaped(type_out, "\"\\") << "\"";
+ os_ << ",\"type\":\"" << JSONEscaped(type_out) << "\"";
}
os_ << "}";
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698