aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-06-22 00:16:17 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:46:31 +0100
commit766b6fc0c7d510e80e49af0fb85a23492aa42675 (patch)
tree60ff5dc0ea8a6fe33d745def45e810f39e3703a4
parentddc51b22bd8fff3a667cc9429aed5dfd5a6d9777 (diff)
downloadgcc-766b6fc0c7d510e80e49af0fb85a23492aa42675.zip
gcc-766b6fc0c7d510e80e49af0fb85a23492aa42675.tar.gz
gcc-766b6fc0c7d510e80e49af0fb85a23492aa42675.tar.bz2
gccrs: dump: Output separating space under condition
Separating space shall not be output between every tokens to make the dump clear and easy to read. gcc/rust/ChangeLog: * ast/rust-ast-dump.cc (Dump::require_spacing): Add a function to determine wether a space shall output. * ast/rust-ast-dump.h: Add function prototype as well as condition. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r--gcc/rust/ast/rust-ast-dump.cc32
-rw-r--r--gcc/rust/ast/rust-ast-dump.h11
2 files changed, 41 insertions, 2 deletions
diff --git a/gcc/rust/ast/rust-ast-dump.cc b/gcc/rust/ast/rust-ast-dump.cc
index 56202a7..7c90592 100644
--- a/gcc/rust/ast/rust-ast-dump.cc
+++ b/gcc/rust/ast/rust-ast-dump.cc
@@ -24,6 +24,38 @@ namespace AST {
Dump::Dump (std::ostream &stream) : stream (stream), indentation (Indent ()) {}
+bool
+Dump::require_spacing (TokenPtr previous, TokenPtr current)
+{
+ switch (current->get_id ())
+ {
+ case EXCLAM:
+ case DOT_DOT:
+ case DOT_DOT_EQ:
+ case SCOPE_RESOLUTION:
+ case LEFT_PAREN:
+ case LEFT_ANGLE:
+ case LEFT_SQUARE:
+ case RIGHT_SQUARE:
+ case RIGHT_PAREN:
+ case DOLLAR_SIGN:
+ case SEMICOLON:
+ return false;
+ default:
+ break;
+ }
+
+ switch (previous->get_id ())
+ {
+ case SCOPE_RESOLUTION:
+ case LEFT_SQUARE:
+ case LEFT_PAREN:
+ return false;
+ default:
+ return true;
+ }
+}
+
void
Dump::debug (Visitable &v)
{
diff --git a/gcc/rust/ast/rust-ast-dump.h b/gcc/rust/ast/rust-ast-dump.h
index 14d22ec..c5b4ab1 100644
--- a/gcc/rust/ast/rust-ast-dump.h
+++ b/gcc/rust/ast/rust-ast-dump.h
@@ -45,9 +45,14 @@ public:
TokenCollector collector (container);
collector.visit (v);
- for (auto &token : collector.collect_tokens ())
+ auto tokens = collector.collect_tokens ();
+ if (!tokens.empty ())
+ stream << tokens.front ()->as_string ();
+ for (auto it = tokens.cbegin () + 1; it < tokens.cend (); it++)
{
- stream << token->as_string () << " ";
+ if (require_spacing (*(it - 1), *it))
+ stream << " ";
+ stream << (*it)->as_string ();
}
}
@@ -57,6 +62,8 @@ public:
private:
std::ostream &stream;
Indent indentation;
+
+ static bool require_spacing (TokenPtr previous, TokenPtr current);
};
} // namespace AST