public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/rust/master] hir: Unify indentation approach with ast
@ 2023-03-14 11:44 Thomas Schwinge
0 siblings, 0 replies; only message in thread
From: Thomas Schwinge @ 2023-03-14 11:44 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:048971cf4284e8eaf71060d3136495b1111793d9
commit 048971cf4284e8eaf71060d3136495b1111793d9
Author: Jakub Dupak <dev@jakubdupak.com>
Date: Sat Mar 11 20:36:11 2023 +0100
hir: Unify indentation approach with ast
gcc/rust/ChangeLog:
* ast/rust-ast-dump.cc (Indent::Indent): Move to separate file.
(operator<<): Move to separate file.
(Indent::increment): Move to separate file.
(Indent::decrement): Move to separate file.
* ast/rust-ast-dump.h (class Indent): Move to separate file.
* hir/rust-hir-dump.cc (Dump::Dump): Use new indentation object.
(Dump::go): Use new indentation object.
(Dump::visit): Use new indention object.
* hir/rust-hir-dump.h: Use new indentation object.
* util/rust-dump.h: New file. Moved Indentation from rust-ast-dump.cc
Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
Diff:
---
gcc/rust/ast/rust-ast-dump.cc | 21 ---------
gcc/rust/ast/rust-ast-dump.h | 16 +------
gcc/rust/hir/rust-hir-dump.cc | 102 +++++++++++++++++++++---------------------
gcc/rust/hir/rust-hir-dump.h | 4 +-
gcc/rust/util/rust-dump.h | 49 ++++++++++++++++++++
5 files changed, 103 insertions(+), 89 deletions(-)
diff --git a/gcc/rust/ast/rust-ast-dump.cc b/gcc/rust/ast/rust-ast-dump.cc
index 9315bc5292d..3792f960726 100644
--- a/gcc/rust/ast/rust-ast-dump.cc
+++ b/gcc/rust/ast/rust-ast-dump.cc
@@ -21,27 +21,6 @@
namespace Rust {
namespace AST {
-Indent::Indent () : tabs (0) {}
-
-std::ostream &
-operator<< (std::ostream &stream, const Indent &indent)
-{
- return stream << std::string (indent.tabs, '\t');
-}
-
-void
-Indent::increment ()
-{
- tabs++;
-}
-
-void
-Indent::decrement ()
-{
- rust_assert (tabs != 0);
- tabs--;
-}
-
Dump::Dump (std::ostream &stream) : stream (stream), indentation (Indent ()) {}
void
diff --git a/gcc/rust/ast/rust-ast-dump.h b/gcc/rust/ast/rust-ast-dump.h
index b68619d2862..4b76ec1a484 100644
--- a/gcc/rust/ast/rust-ast-dump.h
+++ b/gcc/rust/ast/rust-ast-dump.h
@@ -19,6 +19,7 @@
#include "rust-ast-visitor.h"
#include "rust-ast.h"
#include "rust-ast-full.h"
+#include "rust-dump.h"
#ifndef RUST_AST_DUMP_H
#define RUST_AST_DUMP_H
@@ -26,21 +27,6 @@
namespace Rust {
namespace AST {
-// TODO: We might want to reuse this class somewhere else
-class Indent
-{
-public:
- Indent ();
-
- friend std::ostream &operator<< (std::ostream &stream, const Indent &indent);
-
- void increment ();
- void decrement ();
-
-private:
- size_t tabs;
-};
-
class Dump : public ASTVisitor
{
public:
diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc
index 9975a1e66b1..52c17b8a979 100644
--- a/gcc/rust/hir/rust-hir-dump.cc
+++ b/gcc/rust/hir/rust-hir-dump.cc
@@ -21,7 +21,7 @@
namespace Rust {
namespace HIR {
-Dump::Dump (std::ostream &stream) : stream (stream), indent (0) {}
+Dump::Dump (std::ostream &stream) : stream (stream) {}
void
Dump::go (HIR::Crate &crate)
@@ -30,37 +30,37 @@ Dump::go (HIR::Crate &crate)
// inner attributes
if (!crate.inner_attrs.empty ())
{
- indent++;
- stream << std::string (indent, indent_char);
+ indentation.increment();
+ stream << indentation;
stream << "inner_attrs: [";
for (auto &attr : crate.inner_attrs)
stream << attr.as_string ();
stream << "]," << std::endl;
- indent--;
+ indentation.decrement();
}
- indent++;
- stream << std::string (indent, indent_char);
+ indentation.increment();
+ stream << indentation;
//
stream << "items: [";
- stream << std::string (indent, indent_char);
+ stream << indentation;
for (const auto &item : crate.items)
{
stream << std::endl;
item->accept_vis (*this);
}
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "]," << std::endl;
- indent--;
+ indentation.decrement();
//
- indent++;
- stream << std::string (indent, indent_char);
+ indentation.increment();
+ stream << indentation;
stream << "node_mappings: ";
stream << crate.get_mappings ().as_string ();
- indent--;
+ indentation.decrement();
stream << "\n}" << std::endl;
}
@@ -157,9 +157,9 @@ Dump::visit (ArithmeticOrLogicalExpr &aole)
aole.visit_lhs (*this);
stream << "\n";
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << operator_str << "\n";
- stream << std::string (indent, indent_char);
+ stream << indentation;
aole.visit_rhs (*this);
}
void
@@ -236,7 +236,7 @@ void
Dump::visit (BlockExpr &block_expr)
{
stream << "BlockExpr: [";
- indent++;
+ indentation.increment();
stream << std::endl;
// TODO: inner attributes
@@ -246,20 +246,20 @@ Dump::visit (BlockExpr &block_expr)
auto &stmts = block_expr.get_statements ();
for (auto &stmt : stmts)
{
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "Stmt: {\n";
- // stream << std::string (indent, indent_char);
+ // stream << indentation;
stmt->accept_vis (*this);
stream << "\n";
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "}\n";
}
}
// // TODO: print tail expression if exists
- indent--;
- stream << std::string (indent, indent_char);
+ indentation.decrement();
+ stream << indentation;
stream << "]";
}
@@ -376,20 +376,20 @@ Dump::visit (UseDeclaration &)
void
Dump::visit (Function &func)
{
- indent++;
- stream << std::string (indent, indent_char);
+ indentation.increment();
+ stream << indentation;
stream << "Function {" << std::endl;
- indent++;
+ indentation.increment();
// function name
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "func_name: ";
auto func_name = func.get_function_name ();
stream << func_name;
stream << ",\n";
// return type
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "return_type: ";
if (func.has_return_type ())
{
@@ -405,57 +405,57 @@ Dump::visit (Function &func)
// function params
if (func.has_function_params ())
{
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "params: [\n";
- indent++;
+ indentation.increment();
auto &func_params = func.get_function_params ();
for (const auto &item : func_params)
{
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << item.as_string ();
stream << ",\n";
}
// parameter node mappings
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "node_mappings: [\n";
for (const auto &item : func_params)
{
auto nmap = item.get_mappings ();
- indent++;
- stream << std::string (indent, indent_char);
+ indentation.increment();
+ stream << indentation;
auto pname = item.param_name->as_string ();
stream << pname << ": ";
stream << nmap.as_string () << ",\n";
- indent--;
+ indentation.decrement();
}
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "],";
- indent--;
+ indentation.decrement();
stream << "\n";
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "],";
stream << "\n";
}
// function body
- stream << std::string (indent, indent_char);
+ stream << indentation;
auto &func_body = func.get_definition ();
func_body->accept_vis (*this);
// func node mappings
stream << "\n";
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "node_mappings: ";
stream << func.get_impl_mappings ().as_string ();
- indent--;
+ indentation.decrement();
stream << "\n";
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "}" << std::endl;
// TODO: get function definition and visit block
// stream << std::endl;
- indent--;
+ indentation.decrement();
}
void
Dump::visit (TypeAlias &)
@@ -590,12 +590,12 @@ Dump::visit (EmptyStmt &)
void
Dump::visit (LetStmt &let_stmt)
{
- indent++;
+ indentation.increment();
// TODO: outer attributes
- stream << std::string (indent, indent_char);
+ stream << indentation;
stream << "LetStmt: {\n";
- indent++;
- stream << std::string (indent, indent_char);
+ indentation.increment();
+ stream << indentation;
auto var_pattern = let_stmt.get_pattern ();
stream << var_pattern->as_string ();
@@ -610,20 +610,20 @@ Dump::visit (LetStmt &let_stmt)
if (let_stmt.has_init_expr ())
{
stream << " = Expr: {\n ";
- indent++;
- stream << std::string (indent, indent_char);
+ indentation.increment();
+ stream << indentation;
auto expr = let_stmt.get_init_expr ();
expr->accept_vis (*this);
stream << "\n";
- stream << std::string (indent, indent_char);
- indent--;
+ stream << indentation;
+ indentation.decrement();
stream << "}\n";
}
- indent--;
- stream << std::string (indent, indent_char);
+ indentation.decrement();
+ stream << indentation;
stream << "}\n";
- indent--;
+ indentation.decrement();
}
void
Dump::visit (ExprStmtWithoutBlock &expr_stmt)
diff --git a/gcc/rust/hir/rust-hir-dump.h b/gcc/rust/hir/rust-hir-dump.h
index c1ef9849b46..3f42d048135 100644
--- a/gcc/rust/hir/rust-hir-dump.h
+++ b/gcc/rust/hir/rust-hir-dump.h
@@ -22,6 +22,7 @@
#include "rust-hir-visitor.h"
#include "rust-hir.h"
#include "rust-hir-full.h"
+#include "rust-dump.h"
namespace Rust {
namespace HIR {
@@ -33,9 +34,8 @@ public:
void go (HIR::Crate &crate);
private:
+ Indent indentation;
std::ostream &stream;
- std::size_t indent; // current indentation level
- char indent_char = '\t';
virtual void visit (Lifetime &) override;
virtual void visit (LifetimeParam &) override;
diff --git a/gcc/rust/util/rust-dump.h b/gcc/rust/util/rust-dump.h
new file mode 100644
index 00000000000..7fd0b365b9f
--- /dev/null
+++ b/gcc/rust/util/rust-dump.h
@@ -0,0 +1,49 @@
+// Copyright (C) 2021-2023 Free Software Foundation, Inc.
+
+// This file is part of GCC.
+
+// GCC is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3, or (at your option) any later
+// version.
+
+// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with GCC; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// Common definitions useful for textual dump of IRs (AST and HIR).
+
+#ifndef RUST_DUMP_H
+#define RUST_DUMP_H
+
+namespace Rust {
+
+class Indent
+{
+public:
+ Indent () = default;
+
+ friend std::ostream &operator<< (std::ostream &stream, const Indent &indent)
+ {
+ return stream << std::string (indent.tabs, '\t');
+ };
+
+ void increment () { tabs++; };
+
+ void decrement ()
+ {
+ rust_assert (tabs != 0);
+ tabs--;
+ };
+
+private:
+ size_t tabs = 0;
+};
+} // namespace Rust
+
+#endif
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-03-14 11:44 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-14 11:44 [gcc/devel/rust/master] hir: Unify indentation approach with ast Thomas Schwinge
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).