Skip to content

Commit 82bb41b

Browse files
committed
Merge branch 'master' of https://github.com/Lymia/rust into rollup
2 parents d58abe7 + 57f9c4d commit 82bb41b

40 files changed

+519
-145
lines changed

src/libproc_macro/lib.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,8 @@ impl TokenTree {
681681
Dollar => op!('$'),
682682
Question => op!('?'),
683683

684-
Ident(ident) | Lifetime(ident) => TokenNode::Term(Term(ident.name)),
684+
Ident(ident, false) | Lifetime(ident) => TokenNode::Term(Term(ident.name)),
685+
Ident(ident, true) => TokenNode::Term(Term(Symbol::intern(&format!("r#{}", ident)))),
685686
Literal(..) | DocComment(..) => TokenNode::Literal(self::Literal(token)),
686687

687688
Interpolated(_) => {
@@ -713,8 +714,14 @@ impl TokenTree {
713714
},
714715
TokenNode::Term(symbol) => {
715716
let ident = ast::Ident { name: symbol.0, ctxt: self.span.0.ctxt() };
717+
let sym_str = symbol.0.as_str();
716718
let token =
717-
if symbol.0.as_str().starts_with("'") { Lifetime(ident) } else { Ident(ident) };
719+
if sym_str.starts_with("'") { Lifetime(ident) }
720+
else if sym_str.starts_with("r#") {
721+
let name = Symbol::intern(&sym_str[2..]);
722+
let ident = ast::Ident { name, ctxt: self.span.0.ctxt() };
723+
Ident(ident, true)
724+
} else { Ident(ident, false) };
718725
return TokenTree::Token(self.span.0, token).into();
719726
}
720727
TokenNode::Literal(token) => return TokenTree::Token(self.span.0, token.0).into(),

src/librustc/ich/impls_syntax.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,10 @@ fn hash_token<'a, 'gcx, W: StableHasherResult>(
318318
opt_name.hash_stable(hcx, hasher);
319319
}
320320

321-
token::Token::Ident(ident) |
321+
token::Token::Ident(ident, is_raw) => {
322+
ident.name.hash_stable(hcx, hasher);
323+
is_raw.hash_stable(hcx, hasher);
324+
}
322325
token::Token::Lifetime(ident) => ident.name.hash_stable(hcx, hasher),
323326

324327
token::Token::Interpolated(_) => {

src/librustc_passes/ast_validation.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ impl<'a> AstValidator<'a> {
4141
keywords::StaticLifetime.name(),
4242
keywords::Invalid.name()];
4343
if !valid_names.contains(&lifetime.ident.name) &&
44-
token::Ident(lifetime.ident.without_first_quote()).is_reserved_ident() {
44+
token::is_reserved_ident(lifetime.ident.without_first_quote()) {
4545
self.err_handler().span_err(lifetime.span, "lifetimes cannot use keyword names");
4646
}
4747
}
4848

4949
fn check_label(&self, label: Ident, span: Span) {
50-
if token::Ident(label.without_first_quote()).is_reserved_ident() {
50+
if token::is_reserved_ident(label.without_first_quote()) {
5151
self.err_handler().span_err(span, &format!("invalid label name `{}`", label.name));
5252
}
5353
}

src/librustc_resolve/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3206,7 +3206,7 @@ impl<'a> Resolver<'a> {
32063206
// `$crate::a::b`
32073207
module = Some(self.resolve_crate_root(ident.node.ctxt, true));
32083208
continue
3209-
} else if i == 1 && !token::Ident(ident.node).is_path_segment_keyword() {
3209+
} else if i == 1 && !token::is_path_segment_keyword(ident.node) {
32103210
let prev_name = path[0].node.name;
32113211
if prev_name == keywords::Extern.name() ||
32123212
prev_name == keywords::CrateRoot.name() &&

src/librustc_resolve/macros.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ impl<'a> base::Resolver for Resolver<'a> {
268268
if k > 0 {
269269
tokens.push(TokenTree::Token(path.span, Token::ModSep).into());
270270
}
271-
let tok = Token::Ident(segment.identifier);
271+
let tok = Token::from_ast_ident(segment.identifier);
272272
tokens.push(TokenTree::Token(path.span, tok).into());
273273
}
274274
}

src/librustc_resolve/resolve_imports.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,7 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
625625
} else {
626626
Some(self.resolve_crate_root(source.ctxt.modern(), false))
627627
}
628-
} else if is_extern && !token::Ident(source).is_path_segment_keyword() {
628+
} else if is_extern && !token::is_path_segment_keyword(source) {
629629
let crate_id =
630630
self.crate_loader.resolve_crate_from_path(source.name, directive.span);
631631
let crate_root =
@@ -667,7 +667,7 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
667667
}
668668
PathResult::Failed(span, msg, true) => {
669669
let (mut self_path, mut self_result) = (module_path.clone(), None);
670-
let is_special = |ident| token::Ident(ident).is_path_segment_keyword() &&
670+
let is_special = |ident| token::is_path_segment_keyword(ident) &&
671671
ident.name != keywords::CrateRoot.name();
672672
if !self_path.is_empty() && !is_special(self_path[0].node) &&
673673
!(self_path.len() > 1 && is_special(self_path[1].node)) {

src/librustdoc/html/highlight.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -323,12 +323,12 @@ impl<'a> Classifier<'a> {
323323
}
324324

325325
// Keywords are also included in the identifier set.
326-
token::Ident(ident) => {
326+
token::Ident(ident, is_raw) => {
327327
match &*ident.name.as_str() {
328-
"ref" | "mut" => Class::RefKeyWord,
328+
"ref" | "mut" if !is_raw => Class::RefKeyWord,
329329

330-
"self" |"Self" => Class::Self_,
331-
"false" | "true" => Class::Bool,
330+
"self" | "Self" => Class::Self_,
331+
"false" | "true" if !is_raw => Class::Bool,
332332

333333
"Option" | "Result" => Class::PreludeTy,
334334
"Some" | "None" | "Ok" | "Err" => Class::PreludeVal,

src/libsyntax/ast.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ impl Path {
112112
// or starts with something like `self`/`super`/`$crate`/etc.
113113
pub fn make_root(&self) -> Option<PathSegment> {
114114
if let Some(ident) = self.segments.get(0).map(|seg| seg.identifier) {
115-
if ::parse::token::Ident(ident).is_path_segment_keyword() &&
115+
if ::parse::token::is_path_segment_keyword(ident) &&
116116
ident.name != keywords::Crate.name() {
117117
return None;
118118
}

src/libsyntax/attr.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,17 +1106,18 @@ impl IntType {
11061106

11071107
impl MetaItem {
11081108
fn tokens(&self) -> TokenStream {
1109-
let ident = TokenTree::Token(self.span, Token::Ident(Ident::with_empty_ctxt(self.name)));
1109+
let ident = TokenTree::Token(self.span,
1110+
Token::from_ast_ident(Ident::with_empty_ctxt(self.name)));
11101111
TokenStream::concat(vec![ident.into(), self.node.tokens(self.span)])
11111112
}
11121113

11131114
fn from_tokens<I>(tokens: &mut iter::Peekable<I>) -> Option<MetaItem>
11141115
where I: Iterator<Item = TokenTree>,
11151116
{
11161117
let (span, name) = match tokens.next() {
1117-
Some(TokenTree::Token(span, Token::Ident(ident))) => (span, ident.name),
1118+
Some(TokenTree::Token(span, Token::Ident(ident, _))) => (span, ident.name),
11181119
Some(TokenTree::Token(_, Token::Interpolated(ref nt))) => match nt.0 {
1119-
token::Nonterminal::NtIdent(ident) => (ident.span, ident.node.name),
1120+
token::Nonterminal::NtIdent(ident, _) => (ident.span, ident.node.name),
11201121
token::Nonterminal::NtMeta(ref meta) => return Some(meta.clone()),
11211122
_ => return None,
11221123
},
@@ -1269,14 +1270,14 @@ impl LitKind {
12691270
"true"
12701271
} else {
12711272
"false"
1272-
}))),
1273+
})), false),
12731274
}
12741275
}
12751276

12761277
fn from_token(token: Token) -> Option<LitKind> {
12771278
match token {
1278-
Token::Ident(ident) if ident.name == "true" => Some(LitKind::Bool(true)),
1279-
Token::Ident(ident) if ident.name == "false" => Some(LitKind::Bool(false)),
1279+
Token::Ident(ident, false) if ident.name == "true" => Some(LitKind::Bool(true)),
1280+
Token::Ident(ident, false) if ident.name == "false" => Some(LitKind::Bool(false)),
12801281
Token::Interpolated(ref nt) => match nt.0 {
12811282
token::NtExpr(ref v) => match v.node {
12821283
ExprKind::Lit(ref lit) => Some(lit.node.clone()),

src/libsyntax/diagnostics/plugin.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub fn expand_diagnostic_used<'cx>(ecx: &'cx mut ExtCtxt,
4444
token_tree: &[TokenTree])
4545
-> Box<MacResult+'cx> {
4646
let code = match (token_tree.len(), token_tree.get(0)) {
47-
(1, Some(&TokenTree::Token(_, token::Ident(code)))) => code,
47+
(1, Some(&TokenTree::Token(_, token::Ident(code, _)))) => code,
4848
_ => unreachable!()
4949
};
5050

@@ -82,10 +82,10 @@ pub fn expand_register_diagnostic<'cx>(ecx: &'cx mut ExtCtxt,
8282
token_tree.get(1),
8383
token_tree.get(2)
8484
) {
85-
(1, Some(&TokenTree::Token(_, token::Ident(ref code))), None, None) => {
85+
(1, Some(&TokenTree::Token(_, token::Ident(ref code, _))), None, None) => {
8686
(code, None)
8787
},
88-
(3, Some(&TokenTree::Token(_, token::Ident(ref code))),
88+
(3, Some(&TokenTree::Token(_, token::Ident(ref code, _))),
8989
Some(&TokenTree::Token(_, token::Comma)),
9090
Some(&TokenTree::Token(_, token::Literal(token::StrRaw(description, _), None)))) => {
9191
(code, Some(description))
@@ -150,9 +150,9 @@ pub fn expand_build_diagnostic_array<'cx>(ecx: &'cx mut ExtCtxt,
150150
let (crate_name, name) = match (&token_tree[0], &token_tree[2]) {
151151
(
152152
// Crate name.
153-
&TokenTree::Token(_, token::Ident(ref crate_name)),
153+
&TokenTree::Token(_, token::Ident(ref crate_name, _)),
154154
// DIAGNOSTICS ident.
155-
&TokenTree::Token(_, token::Ident(ref name))
155+
&TokenTree::Token(_, token::Ident(ref name, _))
156156
) => (*&crate_name, name),
157157
_ => unreachable!()
158158
};

0 commit comments

Comments
 (0)