diff options
| author | Edward Wang <edward.yu.wang@gmail.com> | 2014-04-24 05:19:23 +0800 |
|---|---|---|
| committer | Edward Wang <edward.yu.wang@gmail.com> | 2014-04-24 06:16:46 +0800 |
| commit | 899f22238669bade874f29f784cdffba28ff0982 (patch) | |
| tree | dec876a0dd6a32f30d555388c592cf8a579b0390 /src/libsyntax/parse | |
| parent | b5dd3f05fe95168b5569d0f519636149479eb6ac (diff) | |
| download | rust-899f22238669bade874f29f784cdffba28ff0982.tar.gz rust-899f22238669bade874f29f784cdffba28ff0982.zip | |
Calibrate span for method call error messages
Specifically, the method parameter cardinality mismatch or missing method error message span now gets method itself exactly. It was the whole expression. Closes #9390 Closes #13684 Closes #13709
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 8808312bed7..8f011ffab5f 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1646,7 +1646,11 @@ impl<'a> Parser<'a> { ExprCall(f, args) } - fn mk_method_call(&mut self, ident: Ident, tps: Vec<P<Ty>> , args: Vec<@Expr> ) -> ast::Expr_ { + fn mk_method_call(&mut self, + ident: ast::SpannedIdent, + tps: Vec<P<Ty>>, + args: Vec<@Expr>) + -> ast::Expr_ { ExprMethodCall(ident, tps, args) } @@ -1919,6 +1923,7 @@ impl<'a> Parser<'a> { if self.eat(&token::DOT) { match self.token { token::IDENT(i, _) => { + let dot = self.last_span.hi; hi = self.span.hi; self.bump(); let (_, tys) = if self.eat(&token::MOD_SEP) { @@ -1940,7 +1945,8 @@ impl<'a> Parser<'a> { hi = self.last_span.hi; es.unshift(e); - let nd = self.mk_method_call(i, tys, es); + let id = spanned(dot, hi, i); + let nd = self.mk_method_call(id, tys, es); e = self.mk_expr(lo, hi, nd); } _ => { |
