diff options
author | Jiakun Fan <120090316@link.cuhk.edu.cn> | 2023-03-11 17:47:32 +0000 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:21:12 +0100 |
commit | ebdc961f811262a5002760a0af6d15a2a0357fc8 (patch) | |
tree | e01692535dc05425e60d6db8cf761cd8dbce3fc3 /gcc | |
parent | 3b61fe1d507bc8a2197b2ea0e87ccda943ed4aa2 (diff) | |
download | gcc-ebdc961f811262a5002760a0af6d15a2a0357fc8.zip gcc-ebdc961f811262a5002760a0af6d15a2a0357fc8.tar.gz gcc-ebdc961f811262a5002760a0af6d15a2a0357fc8.tar.bz2 |
gccrs: Dump inner attrs for Dump::visit(BlockExpr &)
Refer to `BlockExpr::as_string ()`, dump inner attrs for `Dump::visit`.
Add visit (AST::Attribute &).
gcc/rust/ChangeLog:
* hir/rust-hir-dump.cc (Dump::go): fix format
(Dump::visit): impl `visit (AST::Attribute &)`, dump inner attrs and
`visit (Lifetime &)`
* hir/rust-hir-dump.h:add `visit (AST::Attribute &)`
Signed-off-by: Jiakun Fan <120090316@link.cuhk.edu.cn>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/hir/rust-hir-dump.cc | 66 | ||||
-rw-r--r-- | gcc/rust/hir/rust-hir-dump.h | 1 |
2 files changed, 60 insertions, 7 deletions
diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc index f0d0471..65b79f3 100644 --- a/gcc/rust/hir/rust-hir-dump.cc +++ b/gcc/rust/hir/rust-hir-dump.cc @@ -51,7 +51,9 @@ Dump::go (HIR::Crate &crate) stream << std::endl; item->accept_vis (*this); } + stream << std::endl; stream << indentation; + stream << "]," << std::endl; indentation.decrement (); // @@ -66,8 +68,39 @@ Dump::go (HIR::Crate &crate) } void -Dump::visit (Lifetime &) -{} +Dump::visit (AST::Attribute &attribute) +{ + std::string path_str = attribute.get_path ().as_string (); + stream << path_str; + if (attribute.has_attr_input ()) + stream << attribute.get_attr_input ().as_string (); +} + +void +Dump::visit (Lifetime &lifetime) +{ + if (lifetime.is_error ()) + { + stream << "error lifetime"; + return; + } + + switch (lifetime.get_lifetime_type ()) + { + case AST::Lifetime::LifetimeType::NAMED: + stream << "'" << lifetime.get_name (); + break; + case AST::Lifetime::LifetimeType::STATIC: + stream << "'static"; + break; + case AST::Lifetime::LifetimeType::WILDCARD: + stream << "'_"; + break; + default: + stream << "ERROR-MARK-STRING: lifetime type failure"; + break; + } +} void Dump::visit (LifetimeParam &) {} @@ -235,29 +268,48 @@ Dump::visit (ClosureExpr &) void Dump::visit (BlockExpr &block_expr) { - stream << "BlockExpr: ["; + stream << "BlockExpr: [\n"; + indentation.increment (); - stream << std::endl; // TODO: inner attributes + if (!block_expr.inner_attrs.empty ()) + { + stream << indentation << "inner_attrs: ["; + indentation.increment (); + for (auto &attr : block_expr.inner_attrs) + { + stream << "\n"; + stream << indentation; + visit (attr); + } + indentation.decrement (); + stream << "\n" << indentation << "]\n"; + } // statements + // impl null pointer check + if (block_expr.has_statements ()) { auto &stmts = block_expr.get_statements (); for (auto &stmt : stmts) { stream << indentation << "Stmt: {\n"; - // stream << indentation; stmt->accept_vis (*this); stream << "\n"; stream << indentation << "}\n"; } } - // // TODO: print tail expression if exists + // final expression + if (block_expr.has_expr ()) + { + stream << indentation << "final expression:"; + stream << "\n" << indentation << block_expr.expr->as_string (); + } indentation.decrement (); - stream << indentation << "]"; + stream << "\n" << indentation << "]"; } void diff --git a/gcc/rust/hir/rust-hir-dump.h b/gcc/rust/hir/rust-hir-dump.h index 39b8cc0..be73170 100644 --- a/gcc/rust/hir/rust-hir-dump.h +++ b/gcc/rust/hir/rust-hir-dump.h @@ -37,6 +37,7 @@ private: Indent indentation; std::ostream &stream; + void visit (AST::Attribute &attribute); virtual void visit (Lifetime &) override; virtual void visit (LifetimeParam &) override; virtual void visit (PathInExpression &) override; |