From 75c9f9f61cb2d69f39d490c47a3b42810c31c1ff Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Sat, 21 May 2022 21:23:55 +0800 Subject: Marklive: support match expr --- gcc/rust/hir/tree/rust-hir-expr.h | 6 ++++++ gcc/rust/lint/rust-lint-marklive.h | 15 +++++++++++++++ 2 files changed, 21 insertions(+) (limited to 'gcc/rust') diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h index e585dd2..f6f035e 100644 --- a/gcc/rust/hir/tree/rust-hir-expr.h +++ b/gcc/rust/hir/tree/rust-hir-expr.h @@ -3842,6 +3842,12 @@ public: return match_arm_patterns; } + std::unique_ptr &get_guard_expr () + { + rust_assert (has_match_arm_guard ()); + return guard_expr; + } + Location get_locus () const { return locus; } }; diff --git a/gcc/rust/lint/rust-lint-marklive.h b/gcc/rust/lint/rust-lint-marklive.h index aeecda5..89a6d7e 100644 --- a/gcc/rust/lint/rust-lint-marklive.h +++ b/gcc/rust/lint/rust-lint-marklive.h @@ -204,6 +204,21 @@ public: expr.get_else_block ()->accept_vis (*this); } + void visit (HIR::MatchExpr &expr) override + { + expr.get_scrutinee_expr ()->accept_vis (*this); + std::vector &cases = expr.get_match_cases (); + for (auto &&caz : cases) + { + auto case_arm = caz.get_arm (); + if (case_arm.has_match_arm_guard ()) + { + case_arm.get_guard_expr ()->accept_vis (*this); + } + caz.get_expr ()->accept_vis (*this); + } + } + void visit (HIR::IfExprConseqIf &expr) override { expr.get_if_condition ()->accept_vis (*this); -- cgit v1.1