aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/rust-hir-dump.cc
diff options
context:
space:
mode:
authorJiakun Fan <120090316@link.cuhk.edu.cn>2023-03-11 17:47:32 +0000
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:21:12 +0100
commitebdc961f811262a5002760a0af6d15a2a0357fc8 (patch)
treee01692535dc05425e60d6db8cf761cd8dbce3fc3 /gcc/rust/hir/rust-hir-dump.cc
parent3b61fe1d507bc8a2197b2ea0e87ccda943ed4aa2 (diff)
downloadgcc-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/rust/hir/rust-hir-dump.cc')
-rw-r--r--gcc/rust/hir/rust-hir-dump.cc66
1 files changed, 59 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