aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2023-02-03 10:19:32 -0500
committerArthur Cohen <arthur.cohen@embecosm.com>2023-04-06 10:47:23 +0200
commite81f5be60d1ff504f9b1b2c5cfad0a808bec4ff7 (patch)
tree378ed85accda32828a04e91241f00e232fa0b91b /gcc/rust
parent8a9886a85ea36788c329bba05eeeb00fca5f9a13 (diff)
downloadgcc-e81f5be60d1ff504f9b1b2c5cfad0a808bec4ff7.zip
gcc-e81f5be60d1ff504f9b1b2c5cfad0a808bec4ff7.tar.gz
gcc-e81f5be60d1ff504f9b1b2c5cfad0a808bec4ff7.tar.bz2
gccrs: Simplify WildcardPattern let statement handling
gcc/rust/ChangeLog: * backend/rust-compile-pattern.cc (CompilePatternLet::visit): Simplify WildcardPattern compilation for let statements. * backend/rust-compile-var-decl.h: (CompileVarDecl::visit): Remove variable declaration for WildcardPattern. * resolve/rust-ast-resolve-pattern.h: (PatternDeclaration::visit): Remove name resolution for WildcardPattern. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc/rust')
-rw-r--r--gcc/rust/backend/rust-compile-pattern.cc28
-rw-r--r--gcc/rust/backend/rust-compile-var-decl.h16
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-pattern.h7
3 files changed, 7 insertions, 44 deletions
diff --git a/gcc/rust/backend/rust-compile-pattern.cc b/gcc/rust/backend/rust-compile-pattern.cc
index cb4b082..d98f7be 100644
--- a/gcc/rust/backend/rust-compile-pattern.cc
+++ b/gcc/rust/backend/rust-compile-pattern.cc
@@ -361,30 +361,14 @@ CompilePatternLet::visit (HIR::IdentifierPattern &pattern)
void
CompilePatternLet::visit (HIR::WildcardPattern &pattern)
{
- Bvariable *var = nullptr;
- rust_assert (
- ctx->lookup_var_decl (pattern.get_pattern_mappings ().get_hirid (), &var));
-
- auto fnctx = ctx->peek_fn ();
- if (ty->is_unit ())
- {
- ctx->add_statement (init_expr);
+ tree init_stmt = NULL;
+ tree stmt_type = TyTyResolveCompile::compile (ctx, ty);
- tree stmt_type = TyTyResolveCompile::compile (ctx, ty);
+ ctx->get_backend ()->temporary_variable (ctx->peek_fn ().fndecl, NULL_TREE,
+ stmt_type, init_expr, false,
+ pattern.get_locus (), &init_stmt);
- auto unit_type_init_expr
- = ctx->get_backend ()->constructor_expression (stmt_type, false, {}, -1,
- rval_locus);
- auto s = ctx->get_backend ()->init_statement (fnctx.fndecl, var,
- unit_type_init_expr);
- ctx->add_statement (s);
- }
- else
- {
- auto s
- = ctx->get_backend ()->init_statement (fnctx.fndecl, var, init_expr);
- ctx->add_statement (s);
- }
+ ctx->add_statement (init_stmt);
}
void
diff --git a/gcc/rust/backend/rust-compile-var-decl.h b/gcc/rust/backend/rust-compile-var-decl.h
index 9e07999..13b429d 100644
--- a/gcc/rust/backend/rust-compile-var-decl.h
+++ b/gcc/rust/backend/rust-compile-var-decl.h
@@ -53,21 +53,6 @@ public:
locals.push_back (var);
}
- void visit (HIR::WildcardPattern &pattern) override
- {
- translated_type = ctx->get_backend ()->immutable_type (translated_type);
-
- Bvariable *var
- = ctx->get_backend ()->local_variable (fndecl, "_", translated_type,
- NULL /*decl_var*/,
- pattern.get_locus ());
-
- HirId stmt_id = pattern.get_pattern_mappings ().get_hirid ();
- ctx->insert_var_decl (stmt_id, var);
-
- locals.push_back (var);
- }
-
// Empty visit for unused Pattern HIR nodes.
void visit (HIR::LiteralPattern &) override {}
void visit (HIR::PathInExpression &) override {}
@@ -78,6 +63,7 @@ public:
void visit (HIR::StructPattern &) override {}
void visit (HIR::TuplePattern &) override {}
void visit (HIR::TupleStructPattern &) override {}
+ void visit (HIR::WildcardPattern &) override {}
private:
CompileVarDecl (Context *ctx, tree fndecl, tree translated_type,
diff --git a/gcc/rust/resolve/rust-ast-resolve-pattern.h b/gcc/rust/resolve/rust-ast-resolve-pattern.h
index 3e74f0a..4c7d13a 100644
--- a/gcc/rust/resolve/rust-ast-resolve-pattern.h
+++ b/gcc/rust/resolve/rust-ast-resolve-pattern.h
@@ -70,13 +70,6 @@ public:
pattern.get_node_id (), pattern.get_locus (), type);
}
- void visit (AST::WildcardPattern &pattern) override
- {
- resolver->get_name_scope ().insert (
- CanonicalPath::new_seg (pattern.get_node_id (), "_"),
- pattern.get_node_id (), pattern.get_locus (), type);
- }
-
void visit (AST::GroupedPattern &pattern) override
{
pattern.get_pattern_in_parens ()->accept_vis (*this);