From: Pierre-Emmanuel Patry <[email protected]>
gcc/rust/ChangeLog:
* ast/rust-ast-collector.cc (TokenCollector::begin_describe_node):
Remove function.
(TokenCollector::end_describe_node): Likewise.
(TokenCollector::describe_node): Remove calls to begin/end.
* ast/rust-ast-collector.h: Specialize begin and end collect items. Add
more constructors to begin/end description.
* ast/rust-ast-dump.cc (Dump::Dump): Adapt to new configuration
options.
* ast/rust-ast-dump.h: Add new configuration options.
* rust-session-manager.cc (Session::dump_ast_pretty_internal): Use new
configuration options.
Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.
Commit on github:
https://github.com/Rust-GCC/gccrs/commit/369888f75cf05b384bf42d37177f9bb691c93220
The commit has been mentioned in the following pull-request(s):
- https://github.com/Rust-GCC/gccrs/pull/4326
gcc/rust/ast/rust-ast-collector.cc | 22 +----------
gcc/rust/ast/rust-ast-collector.h | 20 +++++++---
gcc/rust/ast/rust-ast-dump.cc | 17 +++++----
gcc/rust/ast/rust-ast-dump.h | 59 ++++++++++++++++++++++--------
gcc/rust/rust-session-manager.cc | 9 ++++-
5 files changed, 78 insertions(+), 49 deletions(-)
diff --git a/gcc/rust/ast/rust-ast-collector.cc
b/gcc/rust/ast/rust-ast-collector.cc
index 737100a59..db146cdd2 100644
--- a/gcc/rust/ast/rust-ast-collector.cc
+++ b/gcc/rust/ast/rust-ast-collector.cc
@@ -103,33 +103,15 @@ TokenCollector::comment (std::string comment)
tokens.emplace_back (CollectItem::make_comment (comment));
}
-void
-TokenCollector::begin_describe_node (const std::string &node_name)
-{
- const std::string symbol_begin ("(");
-
- tokens.emplace_back (
- CollectItem::make_node_description (node_name + symbol_begin));
-}
-
-void
-TokenCollector::end_describe_node (const std::string &node_name)
-{
- const std::string symbol_end (")!");
-
- tokens.push_back (
- CollectItem::make_node_description (symbol_end + node_name));
-}
-
void
TokenCollector::describe_node (const std::string &node_name,
std::function<void ()> visitor)
{
- begin_describe_node (node_name);
+ tokens.emplace_back (CollectItem::make_begin_node_description (node_name));
visitor ();
- end_describe_node (node_name);
+ tokens.push_back (CollectItem::make_end_node_description (node_name));
}
void
diff --git a/gcc/rust/ast/rust-ast-collector.h
b/gcc/rust/ast/rust-ast-collector.h
index 6658cdaa7..83297c9a6 100644
--- a/gcc/rust/ast/rust-ast-collector.h
+++ b/gcc/rust/ast/rust-ast-collector.h
@@ -35,7 +35,8 @@ public:
{
Comment,
InternalComment,
- NodeDescription,
+ BeginNodeDescription,
+ EndNodeDescription,
Newline,
Indentation,
Token,
@@ -54,9 +55,17 @@ public:
{
return CollectItem (comment, Kind::Comment);
}
- static CollectItem make_node_description (const std::string
&node_description)
+
+ static CollectItem
+ make_begin_node_description (const std::string &node_description)
+ {
+ return CollectItem (node_description, Kind::BeginNodeDescription);
+ }
+
+ static CollectItem
+ make_end_node_description (const std::string &node_description)
{
- return CollectItem (node_description, Kind::NodeDescription);
+ return CollectItem (node_description, Kind::EndNodeDescription);
}
Kind get_kind () { return kind; }
@@ -87,7 +96,8 @@ public:
std::string get_node_description ()
{
- rust_assert (kind == Kind::NodeDescription);
+ rust_assert (kind == Kind::BeginNodeDescription
+ || kind == Kind::EndNodeDescription);
return comment;
}
@@ -207,8 +217,6 @@ private:
void increment_indentation ();
void decrement_indentation ();
void comment (std::string comment);
- void begin_describe_node (const std::string &node_name);
- void end_describe_node (const std::string &node_name);
/**
* Visit common items of functions: Parameters, return type, block
*/
diff --git a/gcc/rust/ast/rust-ast-dump.cc b/gcc/rust/ast/rust-ast-dump.cc
index 6e9c9d437..e22b5a931 100644
--- a/gcc/rust/ast/rust-ast-dump.cc
+++ b/gcc/rust/ast/rust-ast-dump.cc
@@ -18,21 +18,24 @@
#include "rust-ast-dump.h"
#include "rust-expr.h"
-#include <vector>
namespace Rust {
namespace AST {
Dump::Dump (std::ostream &stream)
- : stream (stream), indentation (Indent ()), print_internal (false)
+ : stream (stream), indentation (Indent ()),
+ configuration (Configuration{
+ Configuration::InternalComment::Hide,
+ Configuration::NodeDescription::Hide,
+ Configuration::Comment::Dump,
+ })
{}
-Dump::Dump (std::ostream &stream, bool print_internal,
+Dump::Dump (std::ostream &stream, Configuration configuration,
std::set<std::string> excluded_node)
- : stream (stream), indentation (Indent ()), print_internal (print_internal)
-{
- excluded_node = excluded_node;
-}
+ : stream (stream), indentation (Indent ()), configuration (configuration),
+ excluded_node (excluded_node)
+{}
bool
Dump::require_spacing (TokenPtr previous, TokenPtr current)
diff --git a/gcc/rust/ast/rust-ast-dump.h b/gcc/rust/ast/rust-ast-dump.h
index 2d32e6893..6d4476436 100644
--- a/gcc/rust/ast/rust-ast-dump.h
+++ b/gcc/rust/ast/rust-ast-dump.h
@@ -32,8 +32,27 @@ namespace AST {
class Dump
{
public:
+ struct Configuration
+ {
+ enum class InternalComment
+ {
+ Dump,
+ Hide,
+ } dump_internal_comments;
+ enum class NodeDescription
+ {
+ Dump,
+ Hide,
+ } dump_node_description;
+ enum class Comment
+ {
+ Dump,
+ Hide,
+ } dump_comments;
+ };
+
Dump (std::ostream &stream);
- Dump (std::ostream &stream, bool print_internal,
+ Dump (std::ostream &stream, Configuration configuration,
std::set<std::string> excluded_node);
/**
@@ -62,7 +81,8 @@ public:
}
break;
case AST::CollectItem::Kind::Comment:
- stream << " /* " << item.get_comment () << " */ ";
+ if (configuration.dump_comments == Configuration::Comment::Dump)
+ stream << " /* " << item.get_comment () << " */ ";
break;
case AST::CollectItem::Kind::Indentation:
for (size_t i = 0; i < item.get_indent_level (); i++)
@@ -74,21 +94,30 @@ public:
stream << "\n";
previous = nullptr;
break;
+ case AST::CollectItem::Kind::BeginNodeDescription:
+ if (configuration.dump_node_description
+ == Configuration::NodeDescription::Dump)
+ {
+ std::string comment = item.get_node_description ();
+ if (excluded_node.find (comment) == excluded_node.end ())
+ stream << " /* " << comment << " */ ";
+ }
+ break;
+ case AST::CollectItem::Kind::EndNodeDescription:
+ if (configuration.dump_node_description
+ == Configuration::NodeDescription::Dump)
+ {
+ std::string comment = item.get_node_description ();
+ if (excluded_node.find (comment) == excluded_node.end ())
+ stream << " /* !" << comment << " */ ";
+ }
+ break;
case AST::CollectItem::Kind::InternalComment:
- if (print_internal)
+ if (configuration.dump_internal_comments
+ == Configuration::InternalComment::Dump)
{
- bool is_excluded = false;
std::string comment = item.get_internal_comment ();
- for (auto &node : excluded_node)
- {
- if (comment.find (node) != std::string::npos)
- {
- is_excluded = true;
- break;
- }
- }
- if (!is_excluded)
- stream << " /* " << comment << " */ ";
+ stream << " /* " << comment << " */ ";
}
break;
default:
@@ -103,7 +132,7 @@ public:
private:
std::ostream &stream;
Indent indentation;
- bool print_internal;
+ Configuration configuration;
std::set<std::string> excluded_node;
static bool require_spacing (TokenPtr previous, TokenPtr current);
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 901339c9c..c948f3d15 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -1081,7 +1081,14 @@ Session::dump_ast_pretty_internal (AST::Crate &crate)
const
std::set<std::string> str_tmp = options.get_excluded ();
- AST::Dump (out, true, str_tmp).go (crate);
+ AST::Dump (out,
+ AST::Dump::Configuration{
+ AST::Dump::Configuration::InternalComment::Dump,
+ AST::Dump::Configuration::NodeDescription::Dump,
+ AST::Dump::Configuration::Comment::Dump,
+ },
+ str_tmp)
+ .go (crate);
out.close ();
}
--
2.52.0