From: bors[bot] <26634292+bors[bot]@users.noreply.github.com> Date: Fri, 3 Feb 2023 20:17:06 +0000 (+0000) Subject: Merge #1818 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8d96698ffcb5d716e9ab41ba0c1775adb3ef15fe;p=thirdparty%2Fgcc.git Merge #1818 1818: Implement lowering ReferencePattern from AST to HIR r=CohenArthur a=powerboat9 gcc/rust/ChangeLog: * ast/rust-pattern.h (ReferencePattern::get_has_two_amps): Add method. (ReferencePattern::get_is_mut): Add method. * hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::visit): Add ReferencePattern visitor. * hir/rust-ast-lower-pattern.h (ASTLoweringPattern::visit): Add ReferencePattern visitor. Signed-off-by: Owen Avery Partially addresses #1813 Co-authored-by: Owen Avery --- 8d96698ffcb5d716e9ab41ba0c1775adb3ef15fe diff --cc gcc/rust/hir/rust-ast-lower-pattern.cc index 237fa2ee7466,9f673926f9dd..57cf17c24ae2 --- a/gcc/rust/hir/rust-ast-lower-pattern.cc +++ b/gcc/rust/hir/rust-ast-lower-pattern.cc @@@ -246,8 -246,47 +246,37 @@@ ASTLoweringPattern::visit (AST::RangePa void ASTLoweringPattern::visit (AST::GroupedPattern &pattern) { - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - HIR::Pattern *inner - = ASTLoweringPattern::translate (pattern.get_pattern_in_parens ().get ()); - - translated - = new HIR::GroupedPattern (mapping, std::unique_ptr (inner), - pattern.get_locus ()); + pattern.get_pattern_in_parens ()->accept_vis (*this); } + void + ASTLoweringPattern::visit (AST::ReferencePattern &pattern) + { + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (), + mappings->get_next_hir_id (crate_num), + UNKNOWN_LOCAL_DEFID); + + HIR::Pattern *inner + = ASTLoweringPattern::translate (pattern.get_referenced_pattern ().get ()); + + translated + = new HIR::ReferencePattern (mapping, std::unique_ptr (inner), + pattern.get_is_mut () ? Mutability::Mut + : Mutability::Imm, + pattern.get_locus ()); + + if (pattern.is_double_reference ()) + { + Analysis::NodeMapping mapping2 (crate_num, pattern.get_node_id (), + mappings->get_next_hir_id (crate_num), + UNKNOWN_LOCAL_DEFID); + translated + = new HIR::ReferencePattern (mapping2, + std::unique_ptr (translated), + Mutability::Imm, pattern.get_locus ()); + } + } + } // namespace HIR } // namespace Rust