diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-06-22 00:16:17 +0200 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2023-06-29 12:30:17 +0000 |
commit | feddab8c7d7b74deb7ee24217b4d15a93ad56aa2 (patch) | |
tree | 15fd9e2f48f5118dade5f4c1e32721bc36cd7447 /gcc/rust | |
parent | bfc620f80a6c68b31b2f44c1646968d47228913d (diff) | |
download | gcc-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.cc | 32 | ||||
-rw-r--r-- | gcc/rust/ast/rust-ast-dump.h | 11 |
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 |