return PatternType::REFERENCE;
}
+ std::unique_ptr<Pattern> &get_referenced_pattern ()
+ {
+ rust_assert (pattern != nullptr);
+ return pattern;
+ }
+
protected:
/* Use covariance to implement clone function as returning this object rather
* than base */
pattern.get_pattern_in_parens ()->accept_vis (*this);
}
+ void visit (AST::ReferencePattern &pattern) override
+ {
+ pattern.get_referenced_pattern ()->accept_vis (*this);
+ }
+
// cases in a match expression
void visit (AST::PathInExpression &pattern) override;
void
TypeCheckPattern::visit (HIR::ReferencePattern &pattern)
{
- rust_sorry_at (pattern.get_locus (),
- "type checking qualified path patterns not supported");
+ if (parent->get_kind () != TyTy::TypeKind::REF)
+ rust_error_at (pattern.get_locus (), "expected %s, found reference",
+ parent->as_string ().c_str ());
+
+ TyTy::ReferenceType *ref_ty_ty = static_cast<TyTy::ReferenceType *> (parent);
+ TypeCheckPattern::Resolve (pattern.get_referenced_pattern ().get (),
+ ref_ty_ty->get_base ());
}
void