aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir
diff options
context:
space:
mode:
authorJakub Dupak <dev@jakubdupak.com>2023-10-17 15:39:06 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 19:09:23 +0100
commit259d3bd58d8969923ad66c78ea4c8f1539aafbfd (patch)
treeac3330a726bfbda64317ee3d6f53c7ee9856b678 /gcc/rust/hir
parent2c8bc81cf8be7109a0b814987c078acd2854a81c (diff)
downloadgcc-259d3bd58d8969923ad66c78ea4c8f1539aafbfd.zip
gcc-259d3bd58d8969923ad66c78ea4c8f1539aafbfd.tar.gz
gcc-259d3bd58d8969923ad66c78ea4c8f1539aafbfd.tar.bz2
gccrs: ast: Handle tuplestruct pattern with indices
gcc/rust/ChangeLog: * hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::visit): Implement for tuple pat. * resolve/rust-ast-resolve-pattern.cc (PatternDeclaration::visit): Implement for tupple pat. gcc/testsuite/ChangeLog: * rust/compile/tupple_struct_pattern_tuple.rs: New test. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
Diffstat (limited to 'gcc/rust/hir')
-rw-r--r--gcc/rust/hir/rust-ast-lower-pattern.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-pattern.cc b/gcc/rust/hir/rust-ast-lower-pattern.cc
index bfb7b71..4693e7d 100644
--- a/gcc/rust/hir/rust-ast-lower-pattern.cc
+++ b/gcc/rust/hir/rust-ast-lower-pattern.cc
@@ -122,8 +122,23 @@ ASTLoweringPattern::visit (AST::StructPattern &pattern)
switch (field->get_item_type ())
{
case AST::StructPatternField::ItemType::TUPLE_PAT: {
- // TODO
- rust_unreachable ();
+ AST::StructPatternFieldTuplePat &tuple
+ = static_cast<AST::StructPatternFieldTuplePat &> (*field);
+
+ auto crate_num = mappings->get_current_crate ();
+ Analysis::NodeMapping mapping (crate_num, tuple.get_node_id (),
+ mappings->get_next_hir_id (
+ crate_num),
+ UNKNOWN_LOCAL_DEFID);
+
+ std::unique_ptr<HIR::Pattern> pat (ASTLoweringPattern::translate (
+ tuple.get_index_pattern ().get ()));
+
+ f = new HIR::StructPatternFieldTuplePat (mapping,
+ tuple.get_index (),
+ std::move (pat),
+ tuple.get_outer_attrs (),
+ tuple.get_locus ());
}
break;