diff options
author | andrewnaguib <24280372+ndrwnaguib@users.noreply.github.com> | 2022-07-12 12:04:50 -0700 |
---|---|---|
committer | andrewnaguib <24280372+ndrwnaguib@users.noreply.github.com> | 2022-07-25 01:00:24 -0700 |
commit | 5556d29f7bc0836f2ed6413c04eca3ae055c18d7 (patch) | |
tree | bb50a139afdd7fb49c9a4c0f3619fdaa66eb1d99 | |
parent | 65a06a817585faf7fb44fbc1c71173a00f9a407f (diff) | |
download | gcc-5556d29f7bc0836f2ed6413c04eca3ae055c18d7.zip gcc-5556d29f7bc0836f2ed6413c04eca3ae055c18d7.tar.gz gcc-5556d29f7bc0836f2ed6413c04eca3ae055c18d7.tar.bz2 |
hir/dump: simple dumping of crate attrs and adding a few todos
-rw-r--r-- | gcc/rust/hir/rust-hir-dump.cc | 96 | ||||
-rw-r--r-- | gcc/rust/hir/rust-hir-dump.h | 2 |
2 files changed, 87 insertions, 11 deletions
diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc index 5063344..6b36920 100644 --- a/gcc/rust/hir/rust-hir-dump.cc +++ b/gcc/rust/hir/rust-hir-dump.cc @@ -21,15 +21,60 @@ namespace Rust { namespace HIR { -Dump::Dump (std::ostream &stream) : stream (stream) {} +Dump::Dump (std::ostream &stream) : stream (stream), indent (0) {} void Dump::go (HIR::Crate &crate) { - // TODO: print crate inner_attrs - // TODO: print crate items - // TODO: print crate mappings - stream << crate.as_string (); + stream << "Crate" + << " " + << "{" << std::endl; + // + + indent++; + stream << std::string (indent, indent_char); + stream << "inner_attrs" + << ":" + << " " + << "["; + for (auto &attr : crate.inner_attrs) + stream << attr.as_string (); + stream << "]" + << "," << std::endl; + indent--; + + indent++; + stream << std::string (indent, indent_char); + // + + stream << "items" + << ":" + << " " + << "["; + + stream << std::string (indent, indent_char); + for (const auto &item : crate.items) + { + stream << std::endl; + item->accept_vis (*this); + } + stream << std::string (indent, indent_char); + stream << "]" + << "," << std::endl; + indent--; + // + + indent++; + stream << std::string (indent, indent_char); + stream << "node_mappings" + << ":" + << " " + << "["; + // TODO: print crate mapping attrs + stream << "]" << std::endl; + indent--; + + stream << "}" << std::endl; } void @@ -64,8 +109,14 @@ Dump::visit (QualifiedPathInType &) {} void -Dump::visit (LiteralExpr &) -{} +Dump::visit (LiteralExpr &literal_expr) +{ + indent++; + stream << std::string (indent, indent_char); + stream << "( " + literal_expr.get_literal ().as_string () + " (" + + literal_expr.get_mappings ().as_string () + "))"; + stream << "\n"; +} void Dump::visit (BorrowExpr &) {} @@ -152,8 +203,18 @@ void Dump::visit (ClosureExprInner &) {} void -Dump::visit (BlockExpr &) -{} +Dump::visit (BlockExpr &block_expr) +{ + stream << "BlockExpr" + << ":" + << " " + << "["; + indent++; + // TODO: print statements + // TODO: print tail expression if exists + stream << "]"; + indent--; +} void Dump::visit (ClosureExprInnerTyped &) {} @@ -264,8 +325,21 @@ void Dump::visit (UseDeclaration &) {} void -Dump::visit (Function &) -{} +Dump::visit (Function &function) +{ + indent++; + stream << std::string (indent, indent_char); + stream << "Function" + << " "; + stream << "{" << std::endl; + // TODO: print function params + stream << std::string (indent, indent_char); + stream << "}" << std::endl; + // TODO: get function definition and visit block + + stream << std::endl; + indent--; +} void Dump::visit (TypeAlias &) {} diff --git a/gcc/rust/hir/rust-hir-dump.h b/gcc/rust/hir/rust-hir-dump.h index 4569c90..8905d0c 100644 --- a/gcc/rust/hir/rust-hir-dump.h +++ b/gcc/rust/hir/rust-hir-dump.h @@ -34,6 +34,8 @@ public: private: std::ostream &stream; + std::size_t indent; // current indentation level + char indent_char = '\t'; virtual void visit (IdentifierExpr &) override; virtual void visit (Lifetime &) override; |