// pattern must either be ArrayType or SliceType, should be already confirmed
// by type checking
rust_assert (lookup->get_kind () == TyTy::TypeKind::ARRAY
- || lookup->get_kind () == TyTy::TypeKind::SLICE);
+ || lookup->get_kind () == TyTy::TypeKind::SLICE
+ || lookup->get_kind () == TyTy::REF);
size_t array_element_index = 0;
switch (lookup->get_kind ())
rust_assert (ok);
rust_assert (lookup->get_kind () == TyTy::TypeKind::ARRAY
- || lookup->get_kind () == TyTy::TypeKind::SLICE);
+ || lookup->get_kind () == TyTy::TypeKind::SLICE
+ || lookup->get_kind () == TyTy::REF);
size_t array_element_index = 0;
switch (lookup->get_kind ())
}
case TyTy::SLICE:
{
- auto &array_ty_ty = static_cast<TyTy::SliceType &> (*parent);
- parent_element_ty = array_ty_ty.get_element_type ();
+ auto &slice_ty_ty = static_cast<TyTy::SliceType &> (*parent);
+ parent_element_ty = slice_ty_ty.get_element_type ();
+ break;
+ }
+ case TyTy::REF:
+ {
+ auto &ref_ty_ty = static_cast<TyTy::ReferenceType &> (*parent);
+ const TyTy::SliceType *slice = nullptr;
+ if (!ref_ty_ty.is_dyn_slice_type (&slice))
+ {
+ rust_error_at (pattern.get_locus (), "expected %s, found slice",
+ parent->as_string ().c_str ());
+ return;
+ }
+ parent_element_ty = slice->get_element_type ();
break;
}
default: