diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-04-21 17:24:27 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-21 17:24:27 +0000 |
commit | cb42c3674a5a9ab77cb0c1216a1b776c323037e2 (patch) | |
tree | 223139b9b80a2c0473cb42c87d7d85fcb33a9f84 /gcc/rust/resolve | |
parent | fc22f12c9c707b258f35a1bab0e8154441b972b8 (diff) | |
parent | dd9e4c1e0ca0b14388a3cd43f18a4e1a7aebe6e5 (diff) | |
download | gcc-cb42c3674a5a9ab77cb0c1216a1b776c323037e2.zip gcc-cb42c3674a5a9ab77cb0c1216a1b776c323037e2.tar.gz gcc-cb42c3674a5a9ab77cb0c1216a1b776c323037e2.tar.bz2 |
Merge #1144
1144: Add name and type resolution support TuplePatterns in MatchArms r=philberty a=philberty
This adds support for the name and type resolution of match expressions. The code generation
and checks for all cases possible cases needs more thought so this will be done as part of a
separate PR.
Addresses #1081
Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Diffstat (limited to 'gcc/rust/resolve')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-pattern.cc | 30 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-pattern.h | 2 |
2 files changed, 32 insertions, 0 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-pattern.cc b/gcc/rust/resolve/rust-ast-resolve-pattern.cc index 0c7c8f3..24cd171 100644 --- a/gcc/rust/resolve/rust-ast-resolve-pattern.cc +++ b/gcc/rust/resolve/rust-ast-resolve-pattern.cc @@ -100,5 +100,35 @@ PatternDeclaration::visit (AST::StructPattern &pattern) rust_assert (!struct_pattern_elems.has_etc ()); } +void +PatternDeclaration::visit (AST::TuplePattern &pattern) +{ + std::unique_ptr<AST::TuplePatternItems> &items = pattern.get_items (); + switch (items->get_pattern_type ()) + { + case AST::TuplePatternItems::TuplePatternItemType::MULTIPLE: { + AST::TuplePatternItemsMultiple &ref + = *static_cast<AST::TuplePatternItemsMultiple *> ( + pattern.get_items ().get ()); + + for (auto &p : ref.get_patterns ()) + p->accept_vis (*this); + } + break; + + case AST::TuplePatternItems::TuplePatternItemType::RANGED: { + AST::TuplePatternItemsRanged &ref + = *static_cast<AST::TuplePatternItemsRanged *> ( + pattern.get_items ().get ()); + + for (auto &p : ref.get_lower_patterns ()) + p->accept_vis (*this); + for (auto &p : ref.get_upper_patterns ()) + p->accept_vis (*this); + } + break; + } +} + } // namespace Resolver } // namespace Rust diff --git a/gcc/rust/resolve/rust-ast-resolve-pattern.h b/gcc/rust/resolve/rust-ast-resolve-pattern.h index dca8258..464e362 100644 --- a/gcc/rust/resolve/rust-ast-resolve-pattern.h +++ b/gcc/rust/resolve/rust-ast-resolve-pattern.h @@ -101,6 +101,8 @@ public: void visit (AST::TupleStructPattern &pattern) override; + void visit (AST::TuplePattern &pattern) override; + private: PatternDeclaration (NodeId parent) : ResolverBase (parent) {} }; |