fallout
This commit is contained in:
@@ -1726,7 +1726,7 @@ impl<'a> Parser<'a> {
|
||||
|
||||
token::Str_(s) => {
|
||||
(true,
|
||||
LitStr(token::intern_and_get_ident(parse::str_lit(s.as_str()).index(&FullRange)),
|
||||
LitStr(token::intern_and_get_ident(parse::str_lit(s.as_str()).as_slice()),
|
||||
ast::CookedStr))
|
||||
}
|
||||
token::StrRaw(s, n) => {
|
||||
@@ -2538,16 +2538,26 @@ impl<'a> Parser<'a> {
|
||||
token::OpenDelim(token::Bracket) => {
|
||||
let bracket_pos = self.span.lo;
|
||||
self.bump();
|
||||
if self.eat(&token::CloseDelim(token::Bracket)) {
|
||||
|
||||
let mut found_dotdot = false;
|
||||
if self.token == token::DotDot &&
|
||||
self.look_ahead(1, |t| t == &token::CloseDelim(token::Bracket)) {
|
||||
// Using expr[..], which is a mistake, should be expr[]
|
||||
self.bump();
|
||||
self.bump();
|
||||
found_dotdot = true;
|
||||
}
|
||||
|
||||
if found_dotdot || self.eat(&token::CloseDelim(token::Bracket)) {
|
||||
// No expression, expand to a FullRange
|
||||
let ix = {
|
||||
hi = self.last_span.hi;
|
||||
let range = ExprStruct(ident_to_path(mk_sp(lo, hi),
|
||||
token::special_idents::FullRange),
|
||||
vec![],
|
||||
None);
|
||||
self.mk_expr(bracket_pos, hi, range)
|
||||
};
|
||||
// FIXME(#20516) It would be better to use a lang item or
|
||||
// something for FullRange.
|
||||
hi = self.last_span.hi;
|
||||
let range = ExprStruct(ident_to_path(mk_sp(lo, hi),
|
||||
token::special_idents::FullRange),
|
||||
vec![],
|
||||
None);
|
||||
let ix = self.mk_expr(bracket_pos, hi, range);
|
||||
let index = self.mk_index(e, ix);
|
||||
e = self.mk_expr(lo, hi, index)
|
||||
} else {
|
||||
@@ -2557,6 +2567,12 @@ impl<'a> Parser<'a> {
|
||||
let index = self.mk_index(e, ix);
|
||||
e = self.mk_expr(lo, hi, index)
|
||||
}
|
||||
|
||||
if found_dotdot {
|
||||
self.span_err(e.span, "incorrect slicing expression: `[..]`");
|
||||
self.span_note(e.span,
|
||||
"use `&expr[]` to construct a slice of the whole of expr");
|
||||
}
|
||||
}
|
||||
|
||||
// A range expression, either `expr..expr` or `expr..`.
|
||||
@@ -4881,7 +4897,7 @@ impl<'a> Parser<'a> {
|
||||
let token_str = self.this_token_to_string();
|
||||
self.fatal(format!("expected `where`, or `{}` after struct \
|
||||
name, found `{}`", "{",
|
||||
token_str)[]);
|
||||
token_str).index(&FullRange));
|
||||
}
|
||||
|
||||
fields
|
||||
|
||||
Reference in New Issue
Block a user