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

Unified Diff: tools/gn/parse_tree.cc

Issue 588893006: gn: attach comments to parse tree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: x64 Created 6 years, 3 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 | « tools/gn/parse_tree.h ('k') | tools/gn/parse_tree_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/parse_tree.cc
diff --git a/tools/gn/parse_tree.cc b/tools/gn/parse_tree.cc
index c4f78b7ce0768f9f7e7d025d112e1e25c7c31930..a1d969a1089465827fe3061a40369dfb1b7929d0 100644
--- a/tools/gn/parse_tree.cc
+++ b/tools/gn/parse_tree.cc
@@ -16,14 +16,17 @@
namespace {
std::string IndentFor(int value) {
- std::string ret;
- for (int i = 0; i < value; i++)
- ret.append(" ");
- return ret;
+ return std::string(value, ' ');
}
} // namespace
+Comments::Comments() {
+}
+
+Comments::~Comments() {
+}
+
ParseNode::ParseNode() {
}
@@ -40,6 +43,33 @@ const ListNode* ParseNode::AsList() const { return NULL; }
const LiteralNode* ParseNode::AsLiteral() const { return NULL; }
const UnaryOpNode* ParseNode::AsUnaryOp() const { return NULL; }
+Comments* ParseNode::comments_mutable() {
+ if (!comments_)
+ comments_.reset(new Comments);
+ return comments_.get();
+}
+
+void ParseNode::PrintComments(std::ostream& out, int indent) const {
+ if (comments_) {
+ std::string ind = IndentFor(indent + 1);
+ for (std::vector<Token>::const_iterator i(comments_->before().begin());
+ i != comments_->before().end();
+ ++i) {
+ out << ind << "+BEFORE_COMMENT(\"" << i->value() << "\")\n";
+ }
+ for (std::vector<Token>::const_iterator i(comments_->suffix().begin());
+ i != comments_->suffix().end();
+ ++i) {
+ out << ind << "+SUFFIX_COMMENT(\"" << i->value() << "\")\n";
+ }
+ for (std::vector<Token>::const_iterator i(comments_->after().begin());
+ i != comments_->after().end();
+ ++i) {
+ out << ind << "+AFTER_COMMENT(\"" << i->value() << "\")\n";
+ }
+ }
+}
+
// AccessorNode ---------------------------------------------------------------
AccessorNode::AccessorNode() {
@@ -77,6 +107,7 @@ Err AccessorNode::MakeErrorDescribing(const std::string& msg,
void AccessorNode::Print(std::ostream& out, int indent) const {
out << IndentFor(indent) << "ACCESSOR\n";
+ PrintComments(out, indent);
out << IndentFor(indent + 1) << base_.value() << "\n";
if (index_)
index_->Print(out, indent + 1);
@@ -192,6 +223,7 @@ Err BinaryOpNode::MakeErrorDescribing(const std::string& msg,
void BinaryOpNode::Print(std::ostream& out, int indent) const {
out << IndentFor(indent) << "BINARY(" << op_.value() << ")\n";
+ PrintComments(out, indent);
left_->Print(out, indent + 1);
right_->Print(out, indent + 1);
}
@@ -241,6 +273,7 @@ Err BlockNode::MakeErrorDescribing(const std::string& msg,
void BlockNode::Print(std::ostream& out, int indent) const {
out << IndentFor(indent) << "BLOCK\n";
+ PrintComments(out, indent);
for (size_t i = 0; i < statements_.size(); i++)
statements_[i]->Print(out, indent + 1);
}
@@ -317,6 +350,7 @@ Err ConditionNode::MakeErrorDescribing(const std::string& msg,
void ConditionNode::Print(std::ostream& out, int indent) const {
out << IndentFor(indent) << "CONDITION\n";
+ PrintComments(out, indent);
condition_->Print(out, indent + 1);
if_true_->Print(out, indent + 1);
if (if_false_)
@@ -354,6 +388,7 @@ Err FunctionCallNode::MakeErrorDescribing(const std::string& msg,
void FunctionCallNode::Print(std::ostream& out, int indent) const {
out << IndentFor(indent) << "FUNCTION(" << function_.value() << ")\n";
+ PrintComments(out, indent);
args_->Print(out, indent + 1);
if (block_)
block_->Print(out, indent + 1);
@@ -398,6 +433,7 @@ Err IdentifierNode::MakeErrorDescribing(const std::string& msg,
void IdentifierNode::Print(std::ostream& out, int indent) const {
out << IndentFor(indent) << "IDENTIFIER(" << value_.value() << ")\n";
+ PrintComments(out, indent);
}
// ListNode -------------------------------------------------------------------
@@ -444,6 +480,7 @@ Err ListNode::MakeErrorDescribing(const std::string& msg,
void ListNode::Print(std::ostream& out, int indent) const {
out << IndentFor(indent) << "LIST\n";
+ PrintComments(out, indent);
for (size_t i = 0; i < contents_.size(); i++)
contents_[i]->Print(out, indent + 1);
}
@@ -499,6 +536,7 @@ Err LiteralNode::MakeErrorDescribing(const std::string& msg,
void LiteralNode::Print(std::ostream& out, int indent) const {
out << IndentFor(indent) << "LITERAL(" << value_.value() << ")\n";
+ PrintComments(out, indent);
}
// UnaryOpNode ----------------------------------------------------------------
@@ -531,5 +569,6 @@ Err UnaryOpNode::MakeErrorDescribing(const std::string& msg,
void UnaryOpNode::Print(std::ostream& out, int indent) const {
out << IndentFor(indent) << "UNARY(" << op_.value() << ")\n";
+ PrintComments(out, indent);
operand_->Print(out, indent + 1);
}
« no previous file with comments | « tools/gn/parse_tree.h ('k') | tools/gn/parse_tree_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698