diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2014-12-30 20:07:25 +1300 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2015-01-02 10:28:19 +1300 |
| commit | 57a74eda8811bb04da2e081e3029aeec2f0bdcf4 (patch) | |
| tree | 0298a926e462dddc7b82d96a9abd79be055c579c /src | |
| parent | d45b5d2ed9b43b3ad573482fb8820a382f20289e (diff) | |
| download | rust-57a74eda8811bb04da2e081e3029aeec2f0bdcf4.tar.gz rust-57a74eda8811bb04da2e081e3029aeec2f0bdcf4.zip | |
Accept ranges with only a maximum value: `..expr`
Diffstat (limited to 'src')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index a58ed4811bf..cce21bbef26 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2146,14 +2146,14 @@ impl<'a> Parser<'a> { (&None, &Some(ref e)) => (e.span.lo, e.span.hi), (&None, &None) => (DUMMY_SP.lo, DUMMY_SP.hi), }; - ExprIndex(expr, self.mk_expr(lo, hi, ExprRange(start, end))) + ExprIndex(expr, self.mk_expr(lo, hi, self.mk_range(start, end))) } pub fn mk_range(&mut self, - start: P<Expr>, + start: Option<P<Expr>>, end: Option<P<Expr>>) -> ast::Expr_ { - ExprRange(Some(start), end) + ExprRange(start, end) } pub fn mk_field(&mut self, expr: P<Expr>, ident: ast::SpannedIdent) -> ast::Expr_ { @@ -2676,7 +2676,7 @@ impl<'a> Parser<'a> { }; let hi = self.span.hi; - let range = self.mk_range(e, opt_end); + let range = self.mk_range(Some(e), opt_end); return self.mk_expr(lo, hi, range); } _ => return e @@ -2889,6 +2889,13 @@ impl<'a> Parser<'a> { hi = e.span.hi; ex = self.mk_unary(UnUniq, e); } + token::DotDot if !self.restrictions.contains(RESTRICTION_NO_DOTS) => { + // A range, closed above: `..expr`. + self.bump(); + let e = self.parse_prefix_expr(); + hi = e.span.hi; + ex = self.mk_range(None, Some(e)); + } token::Ident(_, _) => { if !self.token.is_keyword(keywords::Box) { return self.parse_dot_or_call_expr(); |
