public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Thomas Schwinge <tschwinge@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] Parse AltPattern Date: Wed, 22 Feb 2023 07:22:31 +0000 (GMT) [thread overview] Message-ID: <20230222072231.32CBB3858C1F@sourceware.org> (raw) https://gcc.gnu.org/g:15ca76ea868ccb9dbb0bd1a77f9b13746220499f commit 15ca76ea868ccb9dbb0bd1a77f9b13746220499f Author: Owen Avery <powerboat9.gamer@gmail.com> Date: Tue Feb 14 18:42:39 2023 -0500 Parse AltPattern Renamed Parser::parse_pattern to Parser::parse_pattern_no_alt and created new method Parser::parse_pattern to handle alternate patterns. gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_pattern): Add. (Parser::parse_pattern_no_alt): Rename. * parse/rust-parse.h: (Parser::parse_pattern): Add. (Parser::parse_pattern_no_alt): Rename. gcc/testsuite/ChangeLog: * rust/compile/pattern-or.rs: New test. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com> Diff: --- gcc/rust/parse/rust-parse-impl.h | 33 +++++++++++++++++++++++++++++++- gcc/rust/parse/rust-parse.h | 1 + gcc/testsuite/rust/compile/pattern-or.rs | 7 +++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index db32803ddbe..4c39284749d 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -10619,10 +10619,41 @@ Parser<ManagedTokenSource>::parse_range_pattern_bound () } } -// Parses a pattern (will further disambiguate any pattern). template <typename ManagedTokenSource> std::unique_ptr<AST::Pattern> Parser<ManagedTokenSource>::parse_pattern () +{ + Location start_locus = lexer.peek_token ()->get_locus (); + + /* skip optional starting pipe */ + maybe_skip_token (PIPE); + + auto first = parse_pattern_no_alt (); + + if (lexer.peek_token ()->get_id () != PIPE) + /* no alternates */ + return first; + + std::vector<std::unique_ptr<AST::Pattern>> alts; + alts.push_back (std::move (first)); + + do + { + lexer.skip_token (); + alts.push_back (parse_pattern_no_alt ()); + } + while (lexer.peek_token ()->get_id () == PIPE); + + /* alternates */ + return std::unique_ptr<AST::Pattern> ( + new AST::AltPattern (std::move (alts), start_locus)); +} + +// Parses a pattern without alternates ('|') +// (will further disambiguate any pattern). +template <typename ManagedTokenSource> +std::unique_ptr<AST::Pattern> +Parser<ManagedTokenSource>::parse_pattern_no_alt () { const_TokenPtr t = lexer.peek_token (); switch (t->get_id ()) diff --git a/gcc/rust/parse/rust-parse.h b/gcc/rust/parse/rust-parse.h index a4b65c50221..54a87c946f9 100644 --- a/gcc/rust/parse/rust-parse.h +++ b/gcc/rust/parse/rust-parse.h @@ -126,6 +126,7 @@ public: std::unique_ptr<AST::Item> parse_item (bool called_from_statement); std::unique_ptr<AST::Pattern> parse_pattern (); + std::unique_ptr<AST::Pattern> parse_pattern_no_alt (); /** * Parse a statement diff --git a/gcc/testsuite/rust/compile/pattern-or.rs b/gcc/testsuite/rust/compile/pattern-or.rs new file mode 100644 index 00000000000..054b43f0504 --- /dev/null +++ b/gcc/testsuite/rust/compile/pattern-or.rs @@ -0,0 +1,7 @@ +// { dg-additional-options "-fsyntax-only" } + +fn main() { + match ((12, 13)) { + (_, 5) | (12, _) => {} + } +}
reply other threads:[~2023-02-22 7:22 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230222072231.32CBB3858C1F@sourceware.org \ --to=tschwinge@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).