diff options
author | Haibo Huang <hhb@google.com> | 2020-05-27 19:45:19 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-05-27 19:45:19 +0000 |
commit | 61061177c7a8c916f042f42ff3d295c7457dde7d (patch) | |
tree | a33f77d49a0ca4530c7d4ddd15c1d87520e647c7 | |
parent | 0f5729924099e9e6df1b89bcfa892b90fcefac7f (diff) | |
parent | dfc35a2c85654d53298514ffc85469e7024a082a (diff) | |
download | paste-impl-61061177c7a8c916f042f42ff3d295c7457dde7d.tar.gz |
Upgrade rust/crates/paste-impl to 0.1.14 am: dfc35a2c85
Change-Id: Ic3fd1a9e5d68dafa6317c6290b8309dfe955a833
-rw-r--r-- | .cargo_vcs_info.json | 2 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | Cargo.toml.orig | 2 | ||||
-rw-r--r-- | METADATA | 4 | ||||
-rw-r--r-- | src/lib.rs | 62 |
5 files changed, 49 insertions, 23 deletions
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json index 326754d..1347e27 100644 --- a/.cargo_vcs_info.json +++ b/.cargo_vcs_info.json @@ -1,5 +1,5 @@ { "git": { - "sha1": "ff47f2f0bbba62fcb2f892f5c488265b3bd7156f" + "sha1": "157559c3faf524ae24f8329537d2a763f6e18931" } } @@ -13,7 +13,7 @@ [package] edition = "2018" name = "paste-impl" -version = "0.1.12" +version = "0.1.14" authors = ["David Tolnay <dtolnay@gmail.com>"] description = "Implementation detail of the `paste` crate" license = "MIT OR Apache-2.0" diff --git a/Cargo.toml.orig b/Cargo.toml.orig index 057e084..80d2071 100644 --- a/Cargo.toml.orig +++ b/Cargo.toml.orig @@ -1,6 +1,6 @@ [package] name = "paste-impl" -version = "0.1.12" +version = "0.1.14" authors = ["David Tolnay <dtolnay@gmail.com>"] edition = "2018" license = "MIT OR Apache-2.0" @@ -9,11 +9,11 @@ third_party { type: GIT value: "https://github.com/dtolnay/paste" } - version: "0.1.12" + version: "0.1.14" license_type: NOTICE last_upgrade_date { year: 2020 month: 5 - day: 4 + day: 25 } } @@ -40,31 +40,57 @@ struct PasteInput { impl Parse for PasteInput { fn parse(input: ParseStream) -> Result<Self> { - let mut expanded = TokenStream::new(); - while !input.is_empty() { - match input.parse()? { - TokenTree::Group(group) => { - let delimiter = group.delimiter(); - let content = group.stream(); - let span = group.span(); - if delimiter == Delimiter::Bracket && is_paste_operation(&content) { - let segments = parse_bracket_as_segments.parse2(content)?; - let pasted = paste_segments(span, &segments)?; - pasted.to_tokens(&mut expanded); - } else if is_none_delimited_single_ident_or_lifetime(delimiter, &content) { - content.to_tokens(&mut expanded); - } else { - let nested = PasteInput::parse.parse2(content)?; - let mut group = Group::new(delimiter, nested.expanded); + let mut contains_paste = false; + let expanded = parse(input, &mut contains_paste)?; + Ok(PasteInput { expanded }) + } +} + +fn parse(input: ParseStream, contains_paste: &mut bool) -> Result<TokenStream> { + let mut expanded = TokenStream::new(); + let (mut prev_colons, mut colons) = (false, false); + while !input.is_empty() { + let save = input.fork(); + match input.parse()? { + TokenTree::Group(group) => { + let delimiter = group.delimiter(); + let content = group.stream(); + let span = group.span(); + let in_path = prev_colons || input.peek(Token![::]); + if delimiter == Delimiter::Bracket && is_paste_operation(&content) { + let segments = parse_bracket_as_segments.parse2(content)?; + let pasted = paste_segments(span, &segments)?; + pasted.to_tokens(&mut expanded); + *contains_paste = true; + } else if is_none_delimited_single_ident_or_lifetime(delimiter, &content) { + content.to_tokens(&mut expanded); + *contains_paste |= in_path; + } else { + let mut group_contains_paste = false; + let nested = (|input: ParseStream| parse(input, &mut group_contains_paste)) + .parse2(content)?; + let group = if group_contains_paste { + let mut group = Group::new(delimiter, nested); group.set_span(span); + *contains_paste = true; + group + } else { + group.clone() + }; + if in_path && delimiter == Delimiter::None { + group.stream().to_tokens(&mut expanded); + *contains_paste = true; + } else { group.to_tokens(&mut expanded); } } - other => other.to_tokens(&mut expanded), } + other => other.to_tokens(&mut expanded), } - Ok(PasteInput { expanded }) + prev_colons = colons; + colons = save.peek(Token![::]); } + Ok(expanded) } fn is_paste_operation(input: &TokenStream) -> bool { |