Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-api/src/legacy_protocol/msg/flat.rs')
-rw-r--r--crates/proc-macro-api/src/legacy_protocol/msg/flat.rs21
1 files changed, 14 insertions, 7 deletions
diff --git a/crates/proc-macro-api/src/legacy_protocol/msg/flat.rs b/crates/proc-macro-api/src/legacy_protocol/msg/flat.rs
index 7f19506048..d22e3f1899 100644
--- a/crates/proc-macro-api/src/legacy_protocol/msg/flat.rs
+++ b/crates/proc-macro-api/src/legacy_protocol/msg/flat.rs
@@ -303,6 +303,7 @@ impl FlatTree {
pub fn to_tokenstream_unresolved<T: SpanTransformer<Table = ()>>(
self,
version: u32,
+ span_join: impl Fn(T::Span, T::Span) -> T::Span,
) -> proc_macro_srv::TokenStream<T::Span> {
Reader::<T> {
subtree: if version >= ENCODE_CLOSE_SPAN_VERSION {
@@ -326,13 +327,14 @@ impl FlatTree {
span_data_table: &(),
version,
}
- .read_tokenstream()
+ .read_tokenstream(span_join)
}
pub fn to_tokenstream_resolved(
self,
version: u32,
span_data_table: &SpanDataIndexMap,
+ span_join: impl Fn(Span, Span) -> Span,
) -> proc_macro_srv::TokenStream<Span> {
Reader::<Span> {
subtree: if version >= ENCODE_CLOSE_SPAN_VERSION {
@@ -356,7 +358,7 @@ impl FlatTree {
span_data_table,
version,
}
- .read_tokenstream()
+ .read_tokenstream(span_join)
}
}
@@ -842,7 +844,10 @@ impl<T: SpanTransformer> Reader<'_, T> {
#[cfg(feature = "sysroot-abi")]
impl<T: SpanTransformer> Reader<'_, T> {
- pub(crate) fn read_tokenstream(self) -> proc_macro_srv::TokenStream<T::Span> {
+ pub(crate) fn read_tokenstream(
+ self,
+ span_join: impl Fn(T::Span, T::Span) -> T::Span,
+ ) -> proc_macro_srv::TokenStream<T::Span> {
let mut res: Vec<Option<proc_macro_srv::Group<T::Span>>> = vec![None; self.subtree.len()];
let read_span = |id| T::span_for_token_id(self.span_data_table, id);
for i in (0..self.subtree.len()).rev() {
@@ -935,6 +940,8 @@ impl<T: SpanTransformer> Reader<'_, T> {
}
})
.collect::<Vec<_>>();
+ let open = read_span(repr.open);
+ let close = read_span(repr.close);
let g = proc_macro_srv::Group {
delimiter: match repr.kind {
tt::DelimiterKind::Parenthesis => proc_macro_srv::Delimiter::Parenthesis,
@@ -944,10 +951,10 @@ impl<T: SpanTransformer> Reader<'_, T> {
},
stream: if stream.is_empty() { None } else { Some(TokenStream::new(stream)) },
span: proc_macro_srv::DelimSpan {
- open: read_span(repr.open),
- close: read_span(repr.close),
- // FIXME
- entire: read_span(repr.close),
+ open,
+ close,
+ // FIXME: The protocol does not yet encode entire spans ...
+ entire: span_join(open, close),
},
};
res[i] = Some(g);