summaryrefslogtreecommitdiffstats
path: root/vendor/proc-macro2
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:25:56 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:25:56 +0000
commit018c4950b9406055dec02ef0fb52f132e2bb1e2c (patch)
treea835ebdf2088ef88fa681f8fad45f09922c1ae9a /vendor/proc-macro2
parentAdding debian version 1.75.0+dfsg1-5. (diff)
downloadrustc-018c4950b9406055dec02ef0fb52f132e2bb1e2c.tar.xz
rustc-018c4950b9406055dec02ef0fb52f132e2bb1e2c.zip
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/proc-macro2')
-rw-r--r--vendor/proc-macro2/.cargo-checksum.json2
-rw-r--r--vendor/proc-macro2/Cargo.toml2
-rw-r--r--vendor/proc-macro2/src/fallback.rs105
-rw-r--r--vendor/proc-macro2/src/lib.rs14
-rw-r--r--vendor/proc-macro2/src/parse.rs19
-rw-r--r--vendor/proc-macro2/src/wrapper.rs18
-rw-r--r--vendor/proc-macro2/tests/test.rs18
7 files changed, 135 insertions, 43 deletions
diff --git a/vendor/proc-macro2/.cargo-checksum.json b/vendor/proc-macro2/.cargo-checksum.json
index 97be42e1e..cf64e7d03 100644
--- a/vendor/proc-macro2/.cargo-checksum.json
+++ b/vendor/proc-macro2/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"3315c2de7940b42cace82f4ad91222e29fea708b2c624480d268e8ed2c18915f","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"c609b6865476d6c35879784e9155367a97a0da496aa5c3c61488440a20f59883","build.rs":"6b0b19a3af5248513b186b9c28c133f5af34a1d11122c0268c68e89724aa40fa","rust-toolchain.toml":"6bbb61302978c736b2da03e4fb40e3beab908f85d533ab46fd541e637b5f3e0f","src/detection.rs":"ed9a5f9a979ab01247d7a68eeb1afa3c13209334c5bfff0f9289cb07e5bb4e8b","src/extra.rs":"d378a9e799e5c49933b067cd38f5364d16a152ef337eef86ce42fdc86005ddf3","src/fallback.rs":"2d3be80c4df730c2400f9b4fa953640c78b7701ac09823c0a007bfe0343dbc1e","src/lib.rs":"d783053e150d9aad91876f2cf525b9d3492e521e44bd6d6705dd3ecd0096f055","src/location.rs":"f55d2e61f1bb1af65e14ed04c9e91eb1ddbf8430e8c05f2048d1cd538d27368e","src/marker.rs":"43f5a18f5059f1a16507c047b3b7387afee7f25ac45ba4eb1621ca7fa733eb01","src/parse.rs":"6ceaad0a6375af9a202cf8df6ebe72e1bce9543b1f0db71ea03929ac02c3a8b8","src/rcvec.rs":"1c3c48c4f819927cc445ae15ca3bb06775feff2fd1cb21901ae4c40c7e6b4e82","src/wrapper.rs":"06624150b94f4fd9ada30b2c9ad6936ea695d05c2138ceb14f2304e757133d52","tests/comments.rs":"31115b3a56c83d93eef2fb4c9566bf4543e302560732986161b98aef504785ed","tests/features.rs":"a86deb8644992a4eb64d9fd493eff16f9cf9c5cb6ade3a634ce0c990cf87d559","tests/marker.rs":"3190ee07dae510251f360db701ce257030f94a479b6689c3a9ef804bd5d8d099","tests/test.rs":"b6190b112f4fc15916d6ee6c9b51bbeff825e5fc807b37fd21cc1b119dd76a24","tests/test_fmt.rs":"b7743b612af65f2c88cbe109d50a093db7aa7e87f9e37bf45b7bbaeb240aa020","tests/test_size.rs":"acf05963c1e62052d769d237b50844a2c59b4182b491231b099a4f74e5456ab0"},"package":"3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"} \ No newline at end of file
+{"files":{"Cargo.toml":"42e4f7a2ceba017dd6f2819091c7da6dbff0370880b72f80c242832de473d100","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"c609b6865476d6c35879784e9155367a97a0da496aa5c3c61488440a20f59883","build.rs":"6b0b19a3af5248513b186b9c28c133f5af34a1d11122c0268c68e89724aa40fa","rust-toolchain.toml":"6bbb61302978c736b2da03e4fb40e3beab908f85d533ab46fd541e637b5f3e0f","src/detection.rs":"ed9a5f9a979ab01247d7a68eeb1afa3c13209334c5bfff0f9289cb07e5bb4e8b","src/extra.rs":"d378a9e799e5c49933b067cd38f5364d16a152ef337eef86ce42fdc86005ddf3","src/fallback.rs":"df10a5ac00a2bbc0d4a9b9fce33578727c7d24eb2ac8d13c8350ef7897a6175c","src/lib.rs":"d7fb225946fd8f3edae9f8cd6d93cd1b60ad5b5354976aae37c787052bffdfb7","src/location.rs":"f55d2e61f1bb1af65e14ed04c9e91eb1ddbf8430e8c05f2048d1cd538d27368e","src/marker.rs":"43f5a18f5059f1a16507c047b3b7387afee7f25ac45ba4eb1621ca7fa733eb01","src/parse.rs":"4b77cddbc2752bc4d38a65acd8b96b6786c5220d19b1e1b37810257b5d24132d","src/rcvec.rs":"1c3c48c4f819927cc445ae15ca3bb06775feff2fd1cb21901ae4c40c7e6b4e82","src/wrapper.rs":"833bad90b8bee76c7dc9d617aa203a43b6b4a76fcca07dcc695e57aa692f5635","tests/comments.rs":"31115b3a56c83d93eef2fb4c9566bf4543e302560732986161b98aef504785ed","tests/features.rs":"a86deb8644992a4eb64d9fd493eff16f9cf9c5cb6ade3a634ce0c990cf87d559","tests/marker.rs":"3190ee07dae510251f360db701ce257030f94a479b6689c3a9ef804bd5d8d099","tests/test.rs":"7511be57e097b15403cf36feb858b4aabdc832fac7024571059a559a7e2ed2a0","tests/test_fmt.rs":"b7743b612af65f2c88cbe109d50a093db7aa7e87f9e37bf45b7bbaeb240aa020","tests/test_size.rs":"acf05963c1e62052d769d237b50844a2c59b4182b491231b099a4f74e5456ab0"},"package":"39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"} \ No newline at end of file
diff --git a/vendor/proc-macro2/Cargo.toml b/vendor/proc-macro2/Cargo.toml
index 8887c242b..9d3d21e5b 100644
--- a/vendor/proc-macro2/Cargo.toml
+++ b/vendor/proc-macro2/Cargo.toml
@@ -13,7 +13,7 @@
edition = "2021"
rust-version = "1.56"
name = "proc-macro2"
-version = "1.0.67"
+version = "1.0.70"
authors = [
"David Tolnay <dtolnay@gmail.com>",
"Alex Crichton <alex@alexcrichton.com>",
diff --git a/vendor/proc-macro2/src/fallback.rs b/vendor/proc-macro2/src/fallback.rs
index daa1e1708..55773bcc0 100644
--- a/vendor/proc-macro2/src/fallback.rs
+++ b/vendor/proc-macro2/src/fallback.rs
@@ -4,6 +4,8 @@ use crate::parse::{self, Cursor};
use crate::rcvec::{RcVec, RcVecBuilder, RcVecIntoIter, RcVecMut};
use crate::{Delimiter, Spacing, TokenTree};
#[cfg(all(span_locations, not(fuzzing)))]
+use alloc::collections::BTreeMap;
+#[cfg(all(span_locations, not(fuzzing)))]
use core::cell::RefCell;
#[cfg(span_locations)]
use core::cmp;
@@ -305,7 +307,6 @@ impl SourceFile {
}
pub fn is_real(&self) -> bool {
- // XXX(nika): Support real files in the future?
false
}
}
@@ -322,12 +323,13 @@ impl Debug for SourceFile {
#[cfg(all(span_locations, not(fuzzing)))]
thread_local! {
static SOURCE_MAP: RefCell<SourceMap> = RefCell::new(SourceMap {
- // NOTE: We start with a single dummy file which all call_site() and
- // def_site() spans reference.
+ // Start with a single dummy file which all call_site() and def_site()
+ // spans reference.
files: vec![FileInfo {
source_text: String::new(),
span: Span { lo: 0, hi: 0 },
lines: vec![0],
+ char_index_to_byte_offset: BTreeMap::new(),
}],
});
}
@@ -337,6 +339,7 @@ struct FileInfo {
source_text: String,
span: Span,
lines: Vec<usize>,
+ char_index_to_byte_offset: BTreeMap<usize, usize>,
}
#[cfg(all(span_locations, not(fuzzing)))]
@@ -344,7 +347,7 @@ impl FileInfo {
fn offset_line_column(&self, offset: usize) -> LineColumn {
assert!(self.span_within(Span {
lo: offset as u32,
- hi: offset as u32
+ hi: offset as u32,
}));
let offset = offset - self.span.lo as usize;
match self.lines.binary_search(&offset) {
@@ -363,10 +366,40 @@ impl FileInfo {
span.lo >= self.span.lo && span.hi <= self.span.hi
}
- fn source_text(&self, span: Span) -> String {
- let lo = (span.lo - self.span.lo) as usize;
- let hi = (span.hi - self.span.lo) as usize;
- self.source_text[lo..hi].to_owned()
+ fn source_text(&mut self, span: Span) -> String {
+ let lo_char = (span.lo - self.span.lo) as usize;
+
+ // Look up offset of the largest already-computed char index that is
+ // less than or equal to the current requested one. We resume counting
+ // chars from that point.
+ let (&last_char_index, &last_byte_offset) = self
+ .char_index_to_byte_offset
+ .range(..=lo_char)
+ .next_back()
+ .unwrap_or((&0, &0));
+
+ let lo_byte = if last_char_index == lo_char {
+ last_byte_offset
+ } else {
+ let total_byte_offset = match self.source_text[last_byte_offset..]
+ .char_indices()
+ .nth(lo_char - last_char_index)
+ {
+ Some((additional_offset, _ch)) => last_byte_offset + additional_offset,
+ None => self.source_text.len(),
+ };
+ self.char_index_to_byte_offset
+ .insert(lo_char, total_byte_offset);
+ total_byte_offset
+ };
+
+ let trunc_lo = &self.source_text[lo_byte..];
+ let char_len = (span.hi - span.lo) as usize;
+ let source_text = match trunc_lo.char_indices().nth(char_len) {
+ Some((offset, _ch)) => &trunc_lo[..offset],
+ None => trunc_lo,
+ };
+ source_text.to_owned()
}
}
@@ -405,7 +438,6 @@ impl SourceMap {
fn add_file(&mut self, src: &str) -> Span {
let (len, lines) = lines_offsets(src);
let lo = self.next_start_pos();
- // XXX(nika): Should we bother doing a checked cast or checked add here?
let span = Span {
lo,
hi: lo + (len as u32),
@@ -415,6 +447,8 @@ impl SourceMap {
source_text: src.to_owned(),
span,
lines,
+ // Populated lazily by source_text().
+ char_index_to_byte_offset: BTreeMap::new(),
});
span
@@ -442,6 +476,15 @@ impl SourceMap {
}
unreachable!("Invalid span with no related FileInfo!");
}
+
+ fn fileinfo_mut(&mut self, span: Span) -> &mut FileInfo {
+ for file in &mut self.files {
+ if file.span_within(span) {
+ return file;
+ }
+ }
+ unreachable!("Invalid span with no related FileInfo!");
+ }
}
#[derive(Clone, Copy, PartialEq, Eq)]
@@ -566,7 +609,7 @@ impl Span {
if self.is_call_site() {
None
} else {
- Some(SOURCE_MAP.with(|cm| cm.borrow().fileinfo(*self).source_text(*self)))
+ Some(SOURCE_MAP.with(|cm| cm.borrow_mut().fileinfo_mut(*self).source_text(*self)))
}
}
}
@@ -712,22 +755,32 @@ pub(crate) struct Ident {
}
impl Ident {
- fn _new(string: &str, raw: bool, span: Span) -> Self {
- validate_ident(string, raw);
+ #[track_caller]
+ pub fn new_checked(string: &str, span: Span) -> Self {
+ validate_ident(string);
+ Ident::new_unchecked(string, span)
+ }
+ pub fn new_unchecked(string: &str, span: Span) -> Self {
Ident {
sym: string.to_owned(),
span,
- raw,
+ raw: false,
}
}
- pub fn new(string: &str, span: Span) -> Self {
- Ident::_new(string, false, span)
+ #[track_caller]
+ pub fn new_raw_checked(string: &str, span: Span) -> Self {
+ validate_ident_raw(string);
+ Ident::new_raw_unchecked(string, span)
}
- pub fn new_raw(string: &str, span: Span) -> Self {
- Ident::_new(string, true, span)
+ pub fn new_raw_unchecked(string: &str, span: Span) -> Self {
+ Ident {
+ sym: string.to_owned(),
+ span,
+ raw: true,
+ }
}
pub fn span(&self) -> Span {
@@ -747,7 +800,8 @@ pub(crate) fn is_ident_continue(c: char) -> bool {
unicode_ident::is_xid_continue(c)
}
-fn validate_ident(string: &str, raw: bool) {
+#[track_caller]
+fn validate_ident(string: &str) {
if string.is_empty() {
panic!("Ident is not allowed to be empty; use Option<Ident>");
}
@@ -773,14 +827,17 @@ fn validate_ident(string: &str, raw: bool) {
if !ident_ok(string) {
panic!("{:?} is not a valid Ident", string);
}
+}
- if raw {
- match string {
- "_" | "super" | "self" | "Self" | "crate" => {
- panic!("`r#{}` cannot be a raw identifier", string);
- }
- _ => {}
+#[track_caller]
+fn validate_ident_raw(string: &str) {
+ validate_ident(string);
+
+ match string {
+ "_" | "super" | "self" | "Self" | "crate" => {
+ panic!("`r#{}` cannot be a raw identifier", string);
}
+ _ => {}
}
}
diff --git a/vendor/proc-macro2/src/lib.rs b/vendor/proc-macro2/src/lib.rs
index 42bb2be46..d5a5b9957 100644
--- a/vendor/proc-macro2/src/lib.rs
+++ b/vendor/proc-macro2/src/lib.rs
@@ -86,15 +86,17 @@
//! a different thread.
// Proc-macro2 types in rustdoc of other crates get linked to here.
-#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.67")]
+#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.70")]
#![cfg_attr(any(proc_macro_span, super_unstable), feature(proc_macro_span))]
#![cfg_attr(super_unstable, feature(proc_macro_def_site))]
#![cfg_attr(doc_cfg, feature(doc_cfg))]
#![allow(
clippy::cast_lossless,
clippy::cast_possible_truncation,
+ clippy::checked_conversions,
clippy::doc_markdown,
clippy::items_after_statements,
+ clippy::iter_without_into_iter,
clippy::let_underscore_untyped,
clippy::manual_assert,
clippy::manual_range_contains,
@@ -948,8 +950,9 @@ impl Ident {
/// style="padding-right:0;">syn::parse_str</code></a><code
/// style="padding-left:0;">::&lt;Ident&gt;</code>
/// rather than `Ident::new`.
+ #[track_caller]
pub fn new(string: &str, span: Span) -> Self {
- Ident::_new(imp::Ident::new(string, span.inner))
+ Ident::_new(imp::Ident::new_checked(string, span.inner))
}
/// Same as `Ident::new`, but creates a raw identifier (`r#ident`). The
@@ -957,12 +960,9 @@ impl Ident {
/// (including keywords, e.g. `fn`). Keywords which are usable in path
/// segments (e.g. `self`, `super`) are not supported, and will cause a
/// panic.
+ #[track_caller]
pub fn new_raw(string: &str, span: Span) -> Self {
- Ident::_new_raw(string, span)
- }
-
- fn _new_raw(string: &str, span: Span) -> Self {
- Ident::_new(imp::Ident::new_raw(string, span.inner))
+ Ident::_new(imp::Ident::new_raw_checked(string, span.inner))
}
/// Returns the span of this `Ident`.
diff --git a/vendor/proc-macro2/src/parse.rs b/vendor/proc-macro2/src/parse.rs
index 1430d736e..07239bc3a 100644
--- a/vendor/proc-macro2/src/parse.rs
+++ b/vendor/proc-macro2/src/parse.rs
@@ -1,5 +1,5 @@
use crate::fallback::{
- is_ident_continue, is_ident_start, Group, LexError, Literal, Span, TokenStream,
+ self, is_ident_continue, is_ident_start, Group, LexError, Literal, Span, TokenStream,
TokenStreamBuilder,
};
use crate::{Delimiter, Punct, Spacing, TokenTree};
@@ -300,7 +300,10 @@ fn ident_any(input: Cursor) -> PResult<crate::Ident> {
let (rest, sym) = ident_not_raw(rest)?;
if !raw {
- let ident = crate::Ident::new(sym, crate::Span::call_site());
+ let ident = crate::Ident::_new(crate::imp::Ident::new_unchecked(
+ sym,
+ fallback::Span::call_site(),
+ ));
return Ok((rest, ident));
}
@@ -309,7 +312,10 @@ fn ident_any(input: Cursor) -> PResult<crate::Ident> {
_ => {}
}
- let ident = crate::Ident::_new_raw(sym, crate::Span::call_site());
+ let ident = crate::Ident::_new(crate::imp::Ident::new_raw_unchecked(
+ sym,
+ fallback::Span::call_site(),
+ ));
Ok((rest, ident))
}
@@ -908,12 +914,13 @@ fn doc_comment<'a>(input: Cursor<'a>, trees: &mut TokenStreamBuilder) -> PResult
#[cfg(span_locations)]
let lo = input.off;
let (rest, (comment, inner)) = doc_comment_contents(input)?;
- let span = crate::Span::_new_fallback(Span {
+ let fallback_span = Span {
#[cfg(span_locations)]
lo,
#[cfg(span_locations)]
hi: rest.off,
- });
+ };
+ let span = crate::Span::_new_fallback(fallback_span);
let mut scan_for_bare_cr = comment;
while let Some(cr) = scan_for_bare_cr.find('\r') {
@@ -934,7 +941,7 @@ fn doc_comment<'a>(input: Cursor<'a>, trees: &mut TokenStreamBuilder) -> PResult
trees.push_token_from_parser(TokenTree::Punct(bang));
}
- let doc_ident = crate::Ident::new("doc", span);
+ let doc_ident = crate::Ident::_new(crate::imp::Ident::new_unchecked("doc", fallback_span));
let mut equal = Punct::new('=', Spacing::Alone);
equal.set_span(span);
let mut literal = crate::Literal::string(comment);
diff --git a/vendor/proc-macro2/src/wrapper.rs b/vendor/proc-macro2/src/wrapper.rs
index 860b6b775..37fdf37f2 100644
--- a/vendor/proc-macro2/src/wrapper.rs
+++ b/vendor/proc-macro2/src/wrapper.rs
@@ -639,20 +639,30 @@ pub(crate) enum Ident {
}
impl Ident {
- pub fn new(string: &str, span: Span) -> Self {
+ #[track_caller]
+ pub fn new_checked(string: &str, span: Span) -> Self {
match span {
Span::Compiler(s) => Ident::Compiler(proc_macro::Ident::new(string, s)),
- Span::Fallback(s) => Ident::Fallback(fallback::Ident::new(string, s)),
+ Span::Fallback(s) => Ident::Fallback(fallback::Ident::new_checked(string, s)),
}
}
- pub fn new_raw(string: &str, span: Span) -> Self {
+ pub fn new_unchecked(string: &str, span: fallback::Span) -> Self {
+ Ident::Fallback(fallback::Ident::new_unchecked(string, span))
+ }
+
+ #[track_caller]
+ pub fn new_raw_checked(string: &str, span: Span) -> Self {
match span {
Span::Compiler(s) => Ident::Compiler(proc_macro::Ident::new_raw(string, s)),
- Span::Fallback(s) => Ident::Fallback(fallback::Ident::new_raw(string, s)),
+ Span::Fallback(s) => Ident::Fallback(fallback::Ident::new_raw_checked(string, s)),
}
}
+ pub fn new_raw_unchecked(string: &str, span: fallback::Span) -> Self {
+ Ident::Fallback(fallback::Ident::new_raw_unchecked(string, span))
+ }
+
pub fn span(&self) -> Span {
match self {
Ident::Compiler(t) => Span::Compiler(t.span()),
diff --git a/vendor/proc-macro2/tests/test.rs b/vendor/proc-macro2/tests/test.rs
index 8e47b46f0..b75cd5527 100644
--- a/vendor/proc-macro2/tests/test.rs
+++ b/vendor/proc-macro2/tests/test.rs
@@ -325,6 +325,24 @@ fn literal_span() {
assert!(positive.subspan(1..4).is_none());
}
+#[cfg(span_locations)]
+#[test]
+fn source_text() {
+ let input = " 𓀕 a z ";
+ let mut tokens = input
+ .parse::<proc_macro2::TokenStream>()
+ .unwrap()
+ .into_iter();
+
+ let first = tokens.next().unwrap();
+ assert_eq!("𓀕", first.span().source_text().unwrap());
+
+ let second = tokens.next().unwrap();
+ let third = tokens.next().unwrap();
+ assert_eq!("z", third.span().source_text().unwrap());
+ assert_eq!("a", second.span().source_text().unwrap());
+}
+
#[test]
fn roundtrip() {
fn roundtrip(p: &str) {