diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2023-02-03 10:19:32 -0500 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2023-04-06 10:47:23 +0200 |
commit | e81f5be60d1ff504f9b1b2c5cfad0a808bec4ff7 (patch) | |
tree | 378ed85accda32828a04e91241f00e232fa0b91b /gcc/rust | |
parent | 8a9886a85ea36788c329bba05eeeb00fca5f9a13 (diff) | |
download | gcc-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.cc | 28 | ||||
-rw-r--r-- | gcc/rust/backend/rust-compile-var-decl.h | 16 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-pattern.h | 7 |
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); |