Use absolute path to FullRange, rather than assuming it is in the prelude

Closes #21263

[breaking-change]

If you are using `core::ops::FullRange` you should change to using `core::ops::RangeFull`
This commit is contained in:
Nick Cameron
2015-01-28 14:27:28 +13:00
parent 7ea93abfb2
commit a9d465fec9
3 changed files with 66 additions and 53 deletions

View File

@@ -147,6 +147,7 @@ mod array;
mod core { mod core {
pub use panicking; pub use panicking;
pub use fmt; pub use fmt;
pub use ops;
} }
#[doc(hidden)] #[doc(hidden)]

View File

@@ -2531,10 +2531,23 @@ impl<'a> Parser<'a> {
// FIXME(#20516) It would be better to use a lang item or // FIXME(#20516) It would be better to use a lang item or
// something for FullRange. // something for FullRange.
hi = self.last_span.hi; hi = self.last_span.hi;
let range = ExprStruct(ident_to_path(mk_sp(lo, hi),
token::special_idents::FullRange), let idents = vec![token::str_to_ident("core"),
vec![], token::str_to_ident("ops"),
None); token::str_to_ident("FullRange")];
let segments = idents.into_iter().map(|ident| {
ast::PathSegment {
identifier: ident,
parameters: ast::PathParameters::none(),
}
}).collect();
let path = ast::Path {
span: mk_sp(lo, hi),
global: true,
segments: segments,
};
let range = ExprStruct(path, vec![], None);
let ix = self.mk_expr(bracket_pos, hi, range); let ix = self.mk_expr(bracket_pos, hi, range);
let index = self.mk_index(e, ix); let index = self.mk_index(e, ix);
e = self.mk_expr(lo, hi, index) e = self.mk_expr(lo, hi, index)

View File

@@ -516,66 +516,65 @@ declare_special_idents_and_keywords! {
(9, unnamed_field, "<unnamed_field>"); (9, unnamed_field, "<unnamed_field>");
(10, type_self, "Self"); (10, type_self, "Self");
(11, prelude_import, "prelude_import"); (11, prelude_import, "prelude_import");
(12, FullRange, "FullRange");
} }
pub mod keywords { pub mod keywords {
// These ones are variants of the Keyword enum // These ones are variants of the Keyword enum
'strict: 'strict:
(13, As, "as"); (12, As, "as");
(14, Break, "break"); (13, Break, "break");
(15, Crate, "crate"); (14, Crate, "crate");
(16, Else, "else"); (15, Else, "else");
(17, Enum, "enum"); (16, Enum, "enum");
(18, Extern, "extern"); (17, Extern, "extern");
(19, False, "false"); (18, False, "false");
(20, Fn, "fn"); (19, Fn, "fn");
(21, For, "for"); (20, For, "for");
(22, If, "if"); (21, If, "if");
(23, Impl, "impl"); (22, Impl, "impl");
(24, In, "in"); (23, In, "in");
(25, Let, "let"); (24, Let, "let");
(26, Loop, "loop"); (25, Loop, "loop");
(27, Match, "match"); (26, Match, "match");
(28, Mod, "mod"); (27, Mod, "mod");
(29, Move, "move"); (28, Move, "move");
(30, Mut, "mut"); (29, Mut, "mut");
(31, Pub, "pub"); (30, Pub, "pub");
(32, Ref, "ref"); (31, Ref, "ref");
(33, Return, "return"); (32, Return, "return");
// Static and Self are also special idents (prefill de-dupes) // Static and Self are also special idents (prefill de-dupes)
(super::STATIC_KEYWORD_NAME_NUM, Static, "static"); (super::STATIC_KEYWORD_NAME_NUM, Static, "static");
(super::SELF_KEYWORD_NAME_NUM, Self, "self"); (super::SELF_KEYWORD_NAME_NUM, Self, "self");
(34, Struct, "struct"); (33, Struct, "struct");
(super::SUPER_KEYWORD_NAME_NUM, Super, "super"); (super::SUPER_KEYWORD_NAME_NUM, Super, "super");
(35, True, "true"); (34, True, "true");
(36, Trait, "trait"); (35, Trait, "trait");
(37, Type, "type"); (36, Type, "type");
(38, Unsafe, "unsafe"); (37, Unsafe, "unsafe");
(39, Use, "use"); (38, Use, "use");
(40, Virtual, "virtual"); (39, Virtual, "virtual");
(41, While, "while"); (40, While, "while");
(42, Continue, "continue"); (41, Continue, "continue");
(43, Proc, "proc"); (42, Proc, "proc");
(44, Box, "box"); (43, Box, "box");
(45, Const, "const"); (44, Const, "const");
(46, Where, "where"); (45, Where, "where");
'reserved: 'reserved:
(47, Alignof, "alignof"); (46, Alignof, "alignof");
(48, Be, "be"); (47, Be, "be");
(49, Offsetof, "offsetof"); (48, Offsetof, "offsetof");
(50, Priv, "priv"); (49, Priv, "priv");
(51, Pure, "pure"); (50, Pure, "pure");
(52, Sizeof, "sizeof"); (51, Sizeof, "sizeof");
(53, Typeof, "typeof"); (52, Typeof, "typeof");
(54, Unsized, "unsized"); (53, Unsized, "unsized");
(55, Yield, "yield"); (54, Yield, "yield");
(56, Do, "do"); (55, Do, "do");
(57, Abstract, "abstract"); (56, Abstract, "abstract");
(58, Final, "final"); (57, Final, "final");
(59, Override, "override"); (58, Override, "override");
(60, Macro, "macro"); (59, Macro, "macro");
} }
} }