Skip to content

Commit d953b66

Browse files
---
yaml --- r: 32149 b: refs/heads/dist-snap c: bdbedb9 h: refs/heads/master i: 32147: e958bb5 v: v3
1 parent 9373c66 commit d953b66

File tree

2 files changed

+57
-7
lines changed

2 files changed

+57
-7
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: d0c6ce338884ee21843f4b40bf6bf18d222ce5df
99
refs/heads/incoming: d9317a174e434d4c99fc1a37fd7dc0d2f5328d37
10-
refs/heads/dist-snap: 6277046fa0a5c119885ba33bcb6ac2f4fba0228f
10+
refs/heads/dist-snap: bdbedb9d35903be0e3f587c603db49c014ef7d9f
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/dist-snap/src/rustc/middle/resolve3.rs

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4069,6 +4069,47 @@ struct Resolver {
40694069
}
40704070
}
40714071
4072+
fn name_exists_in_scope_class(name: &str) -> bool {
4073+
let mut i = self.type_ribs.len();
4074+
while i != 0 {
4075+
i -= 1;
4076+
let rib = self.type_ribs.get_elt(i);
4077+
match rib.kind {
4078+
MethodRibKind(node_id, _) =>
4079+
for vec::each(self.crate.node.module.items) |item| {
4080+
if item.id == node_id {
4081+
match item.node {
4082+
item_class(class_def, _) => {
4083+
for vec::each(class_def.fields) |field| {
4084+
match field.node.kind {
4085+
syntax::ast::unnamed_field
4086+
=> {},
4087+
syntax::ast::named_field(ident, _, _)
4088+
=> {
4089+
if str::eq_slice(self.session.str_of(ident),
4090+
name) {
4091+
return true
4092+
}
4093+
}
4094+
}
4095+
}
4096+
for vec::each(class_def.methods) |method| {
4097+
if str::eq_slice(self.session.str_of(method.ident),
4098+
name) {
4099+
return true
4100+
}
4101+
}
4102+
}
4103+
_ => {}
4104+
}
4105+
}
4106+
},
4107+
_ => {}
4108+
}
4109+
}
4110+
return false;
4111+
}
4112+
40724113
fn resolve_expr(expr: @expr, visitor: ResolveVisitor) {
40734114
// First, record candidate traits for this expression if it could
40744115
// result in the invocation of a method call.
@@ -4093,12 +4134,21 @@ struct Resolver {
40934134
self.record_def(expr.id, def);
40944135
}
40954136
none => {
4096-
self.session.span_err(
4097-
expr.span,
4098-
fmt!("unresolved name: %s",
4099-
connect(path.idents.map(
4100-
|x| self.session.str_of(x)),
4101-
~"::")));
4137+
let wrong_name =
4138+
connect(path.idents.map(
4139+
|x| self.session.str_of(x)), ~"::") ;
4140+
if self.name_exists_in_scope_class(wrong_name) {
4141+
self.session.span_err(expr.span,
4142+
fmt!("unresolved name: %s. \
4143+
Did you mean: self.%s",
4144+
wrong_name,
4145+
wrong_name));
4146+
}
4147+
else {
4148+
self.session.span_err(expr.span,
4149+
fmt!("unresolved name: %s",
4150+
wrong_name));
4151+
}
41024152
}
41034153
}
41044154

0 commit comments

Comments
 (0)