mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 20:01:22 -05:00
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>
This commit is contained in:
@@ -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));
|
||||
tree init_stmt = NULL;
|
||||
tree stmt_type = TyTyResolveCompile::compile (ctx, ty);
|
||||
|
||||
auto fnctx = ctx->peek_fn ();
|
||||
if (ty->is_unit ())
|
||||
{
|
||||
ctx->add_statement (init_expr);
|
||||
ctx->get_backend ()->temporary_variable (ctx->peek_fn ().fndecl, NULL_TREE,
|
||||
stmt_type, init_expr, false,
|
||||
pattern.get_locus (), &init_stmt);
|
||||
|
||||
tree stmt_type = TyTyResolveCompile::compile (ctx, ty);
|
||||
|
||||
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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user