Handle unrecognized type names in checking signature for mutable return type
diff --git a/syntax/check.rs b/syntax/check.rs
index 5d02fa8..b9c5370 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -521,7 +521,10 @@
if receiver.mutable {
return;
}
- let resolve = cx.types.resolve(&receiver.ty);
+ let resolve = match cx.types.try_resolve(&receiver.ty) {
+ Some(resolve) => resolve,
+ None => return,
+ };
if !resolve.generics.lifetimes.is_empty() {
return;
}
@@ -536,9 +539,11 @@
fn visit_type(&mut self, ty: &'t Type) {
self.found |= match ty {
Type::Ref(ty) => ty.mutable,
- Type::Ident(ident) => {
- let resolve = self.cx.types.resolve(ident);
- !resolve.generics.lifetimes.is_empty()
+ Type::Ident(ident) if Atom::from(&ident.rust).is_none() => {
+ match self.cx.types.try_resolve(ident) {
+ Some(resolve) => !resolve.generics.lifetimes.is_empty(),
+ None => true,
+ }
}
_ => false,
};
diff --git a/syntax/resolve.rs b/syntax/resolve.rs
index 757b78f..3a2635b 100644
--- a/syntax/resolve.rs
+++ b/syntax/resolve.rs
@@ -11,11 +11,16 @@
impl<'a> Types<'a> {
pub fn resolve(&self, ident: &impl UnresolvedName) -> Resolution<'a> {
let ident = ident.ident();
- match self.resolutions.get(ident) {
- Some(resolution) => *resolution,
+ match self.try_resolve(ident) {
+ Some(resolution) => resolution,
None => panic!("Unable to resolve type `{}`", ident),
}
}
+
+ pub fn try_resolve(&self, ident: &impl UnresolvedName) -> Option<Resolution<'a>> {
+ let ident = ident.ident();
+ self.resolutions.get(ident).copied()
+ }
}
pub trait UnresolvedName {