1
Fork 0

review fixups

This commit is contained in:
Nika Layzell 2022-06-17 22:10:07 -04:00
parent af51424008
commit df925fda9c
4 changed files with 43 additions and 70 deletions

View file

@ -498,12 +498,13 @@ impl server::TokenStream for Rustc<'_, '_> {
} }
builder.build() builder.build()
} }
fn into_iter( fn into_trees(
&mut self, &mut self,
stream: Self::TokenStream, stream: Self::TokenStream,
) -> Vec<TokenTree<Self::Group, Self::Punct, Self::Ident, Self::Literal>> { ) -> Vec<TokenTree<Self::Group, Self::Punct, Self::Ident, Self::Literal>> {
// FIXME: This is a raw port of the previous approach, and can probably // FIXME: This is a raw port of the previous approach (which had a
// be optimized. // `TokenStreamIter` server-side object with a single `next` method),
// and can probably be optimized (for bulk conversion).
let mut cursor = stream.into_trees(); let mut cursor = stream.into_trees();
let mut stack = Vec::new(); let mut stack = Vec::new();
let mut tts = Vec::new(); let mut tts = Vec::new();

View file

@ -73,9 +73,9 @@ macro_rules! with_api {
) -> $S::TokenStream; ) -> $S::TokenStream;
fn concat_streams( fn concat_streams(
base: Option<$S::TokenStream>, base: Option<$S::TokenStream>,
trees: Vec<$S::TokenStream>, streams: Vec<$S::TokenStream>,
) -> $S::TokenStream; ) -> $S::TokenStream;
fn into_iter( fn into_trees(
$self: $S::TokenStream $self: $S::TokenStream
) -> Vec<TokenTree<$S::Group, $S::Punct, $S::Ident, $S::Literal>>; ) -> Vec<TokenTree<$S::Group, $S::Punct, $S::Ident, $S::Literal>>;
}, },
@ -307,32 +307,6 @@ impl<'a, T, M> Unmark for &'a mut Marked<T, M> {
} }
} }
impl<T: Mark> Mark for Option<T> {
type Unmarked = Option<T::Unmarked>;
fn mark(unmarked: Self::Unmarked) -> Self {
unmarked.map(T::mark)
}
}
impl<T: Unmark> Unmark for Option<T> {
type Unmarked = Option<T::Unmarked>;
fn unmark(self) -> Self::Unmarked {
self.map(T::unmark)
}
}
impl<T: Mark, E: Mark> Mark for Result<T, E> {
type Unmarked = Result<T::Unmarked, E::Unmarked>;
fn mark(unmarked: Self::Unmarked) -> Self {
unmarked.map(T::mark).map_err(E::mark)
}
}
impl<T: Unmark, E: Unmark> Unmark for Result<T, E> {
type Unmarked = Result<T::Unmarked, E::Unmarked>;
fn unmark(self) -> Self::Unmarked {
self.map(T::unmark).map_err(E::unmark)
}
}
impl<T: Mark> Mark for Vec<T> { impl<T: Mark> Mark for Vec<T> {
type Unmarked = Vec<T::Unmarked>; type Unmarked = Vec<T::Unmarked>;
fn mark(unmarked: Self::Unmarked) -> Self { fn mark(unmarked: Self::Unmarked) -> Self {
@ -378,7 +352,6 @@ mark_noop! {
Level, Level,
LineColumn, LineColumn,
Spacing, Spacing,
Bound<usize>,
} }
rpc_encode_decode!( rpc_encode_decode!(
@ -438,6 +411,28 @@ macro_rules! compound_traits {
}; };
} }
compound_traits!(
enum Bound<T> {
Included(x),
Excluded(x),
Unbounded,
}
);
compound_traits!(
enum Option<T> {
Some(t),
None,
}
);
compound_traits!(
enum Result<T, E> {
Ok(t),
Err(e),
}
);
#[derive(Clone)] #[derive(Clone)]
pub enum TokenTree<G, P, I, L> { pub enum TokenTree<G, P, I, L> {
Group(G), Group(G),

View file

@ -4,7 +4,6 @@ use std::any::Any;
use std::char; use std::char;
use std::io::Write; use std::io::Write;
use std::num::NonZeroU32; use std::num::NonZeroU32;
use std::ops::Bound;
use std::str; use std::str;
pub(super) type Writer = super::buffer::Buffer; pub(super) type Writer = super::buffer::Buffer;
@ -186,28 +185,6 @@ impl<'a, S, A: for<'s> DecodeMut<'a, 's, S>, B: for<'s> DecodeMut<'a, 's, S>> De
} }
} }
rpc_encode_decode!(
enum Bound<T> {
Included(x),
Excluded(x),
Unbounded,
}
);
rpc_encode_decode!(
enum Option<T> {
None,
Some(x),
}
);
rpc_encode_decode!(
enum Result<T, E> {
Ok(x),
Err(e),
}
);
impl<S> Encode<S> for &[u8] { impl<S> Encode<S> for &[u8] {
fn encode(self, w: &mut Writer, s: &mut S) { fn encode(self, w: &mut Writer, s: &mut S) {
self.len().encode(w, s); self.len().encode(w, s);

View file

@ -235,7 +235,7 @@ impl From<TokenTree> for TokenStream {
/// Non-generic helper for implementing `FromIterator<TokenTree>` and /// Non-generic helper for implementing `FromIterator<TokenTree>` and
/// `Extend<TokenTree>` with less monomorphization in calling crates. /// `Extend<TokenTree>` with less monomorphization in calling crates.
struct ExtendStreamWithTreesHelper { struct ConcatTreesHelper {
trees: Vec< trees: Vec<
bridge::TokenTree< bridge::TokenTree<
bridge::client::Group, bridge::client::Group,
@ -246,9 +246,9 @@ struct ExtendStreamWithTreesHelper {
>, >,
} }
impl ExtendStreamWithTreesHelper { impl ConcatTreesHelper {
fn new(capacity: usize) -> Self { fn new(capacity: usize) -> Self {
ExtendStreamWithTreesHelper { trees: Vec::with_capacity(capacity) } ConcatTreesHelper { trees: Vec::with_capacity(capacity) }
} }
fn push(&mut self, tree: TokenTree) { fn push(&mut self, tree: TokenTree) {
@ -263,7 +263,7 @@ impl ExtendStreamWithTreesHelper {
} }
} }
fn extend(self, stream: &mut TokenStream) { fn append_to(self, stream: &mut TokenStream) {
if self.trees.is_empty() { if self.trees.is_empty() {
return; return;
} }
@ -273,13 +273,13 @@ impl ExtendStreamWithTreesHelper {
/// Non-generic helper for implementing `FromIterator<TokenStream>` and /// Non-generic helper for implementing `FromIterator<TokenStream>` and
/// `Extend<TokenStream>` with less monomorphization in calling crates. /// `Extend<TokenStream>` with less monomorphization in calling crates.
struct ExtendStreamWithStreamsHelper { struct ConcatStreamsHelper {
streams: Vec<bridge::client::TokenStream>, streams: Vec<bridge::client::TokenStream>,
} }
impl ExtendStreamWithStreamsHelper { impl ConcatStreamsHelper {
fn new(capacity: usize) -> Self { fn new(capacity: usize) -> Self {
ExtendStreamWithStreamsHelper { streams: Vec::with_capacity(capacity) } ConcatStreamsHelper { streams: Vec::with_capacity(capacity) }
} }
fn push(&mut self, stream: TokenStream) { fn push(&mut self, stream: TokenStream) {
@ -296,7 +296,7 @@ impl ExtendStreamWithStreamsHelper {
} }
} }
fn extend(mut self, stream: &mut TokenStream) { fn append_to(mut self, stream: &mut TokenStream) {
if self.streams.is_empty() { if self.streams.is_empty() {
return; return;
} }
@ -314,7 +314,7 @@ impl ExtendStreamWithStreamsHelper {
impl iter::FromIterator<TokenTree> for TokenStream { impl iter::FromIterator<TokenTree> for TokenStream {
fn from_iter<I: IntoIterator<Item = TokenTree>>(trees: I) -> Self { fn from_iter<I: IntoIterator<Item = TokenTree>>(trees: I) -> Self {
let iter = trees.into_iter(); let iter = trees.into_iter();
let mut builder = ExtendStreamWithTreesHelper::new(iter.size_hint().0); let mut builder = ConcatTreesHelper::new(iter.size_hint().0);
iter.for_each(|tree| builder.push(tree)); iter.for_each(|tree| builder.push(tree));
builder.build() builder.build()
} }
@ -326,7 +326,7 @@ impl iter::FromIterator<TokenTree> for TokenStream {
impl iter::FromIterator<TokenStream> for TokenStream { impl iter::FromIterator<TokenStream> for TokenStream {
fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self { fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self {
let iter = streams.into_iter(); let iter = streams.into_iter();
let mut builder = ExtendStreamWithStreamsHelper::new(iter.size_hint().0); let mut builder = ConcatStreamsHelper::new(iter.size_hint().0);
iter.for_each(|stream| builder.push(stream)); iter.for_each(|stream| builder.push(stream));
builder.build() builder.build()
} }
@ -336,9 +336,9 @@ impl iter::FromIterator<TokenStream> for TokenStream {
impl Extend<TokenTree> for TokenStream { impl Extend<TokenTree> for TokenStream {
fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, trees: I) { fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, trees: I) {
let iter = trees.into_iter(); let iter = trees.into_iter();
let mut builder = ExtendStreamWithTreesHelper::new(iter.size_hint().0); let mut builder = ConcatTreesHelper::new(iter.size_hint().0);
iter.for_each(|tree| builder.push(tree)); iter.for_each(|tree| builder.push(tree));
builder.extend(self); builder.append_to(self);
} }
} }
@ -346,9 +346,9 @@ impl Extend<TokenTree> for TokenStream {
impl Extend<TokenStream> for TokenStream { impl Extend<TokenStream> for TokenStream {
fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) { fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) {
let iter = streams.into_iter(); let iter = streams.into_iter();
let mut builder = ExtendStreamWithStreamsHelper::new(iter.size_hint().0); let mut builder = ConcatStreamsHelper::new(iter.size_hint().0);
iter.for_each(|stream| builder.push(stream)); iter.for_each(|stream| builder.push(stream));
builder.extend(self); builder.append_to(self);
} }
} }
@ -393,7 +393,7 @@ pub mod token_stream {
type IntoIter = IntoIter; type IntoIter = IntoIter;
fn into_iter(self) -> IntoIter { fn into_iter(self) -> IntoIter {
IntoIter(self.0.map(|v| v.into_iter()).unwrap_or_default().into_iter()) IntoIter(self.0.map(|v| v.into_trees()).unwrap_or_default().into_iter())
} }
} }
} }