aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-06-22 00:16:17 +0200
committerCohenArthur <arthur.cohen@embecosm.com>2023-06-29 12:30:17 +0000
commitfeddab8c7d7b74deb7ee24217b4d15a93ad56aa2 (patch)
tree15fd9e2f48f5118dade5f4c1e32721bc36cd7447 /gcc/rust
parentbfc620f80a6c68b31b2f44c1646968d47228913d (diff)
downloadgcc-feddab8c7d7b74deb7ee24217b4d15a93ad56aa2.zip
gcc-feddab8c7d7b74deb7ee24217b4d15a93ad56aa2.tar.gz
gcc-feddab8c7d7b74deb7ee24217b4d15a93ad56aa2.tar.bz2
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>
Diffstat (limited to 'gcc/rust')
-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 22a2646..dae93cf 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 4509193..78015e5 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