Vendor dependencies
Let's see how I like this workflow.
This commit is contained in:
parent
34d1830413
commit
9c435dc440
7500 changed files with 1665121 additions and 99 deletions
91
vendor/cxxbridge-macro/src/generics.rs
vendored
Normal file
91
vendor/cxxbridge-macro/src/generics.rs
vendored
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
use crate::syntax::instantiate::NamedImplKey;
|
||||
use crate::syntax::resolve::Resolution;
|
||||
use crate::syntax::{Impl, Lifetimes};
|
||||
use proc_macro2::TokenStream;
|
||||
use quote::ToTokens;
|
||||
use syn::{Lifetime, Token};
|
||||
|
||||
pub struct ImplGenerics<'a> {
|
||||
explicit_impl: Option<&'a Impl>,
|
||||
resolve: Resolution<'a>,
|
||||
}
|
||||
|
||||
pub struct TyGenerics<'a> {
|
||||
key: NamedImplKey<'a>,
|
||||
explicit_impl: Option<&'a Impl>,
|
||||
resolve: Resolution<'a>,
|
||||
}
|
||||
|
||||
pub fn split_for_impl<'a>(
|
||||
key: NamedImplKey<'a>,
|
||||
explicit_impl: Option<&'a Impl>,
|
||||
resolve: Resolution<'a>,
|
||||
) -> (ImplGenerics<'a>, TyGenerics<'a>) {
|
||||
let impl_generics = ImplGenerics {
|
||||
explicit_impl,
|
||||
resolve,
|
||||
};
|
||||
let ty_generics = TyGenerics {
|
||||
key,
|
||||
explicit_impl,
|
||||
resolve,
|
||||
};
|
||||
(impl_generics, ty_generics)
|
||||
}
|
||||
|
||||
impl<'a> ToTokens for ImplGenerics<'a> {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
if let Some(imp) = self.explicit_impl {
|
||||
imp.impl_generics.to_tokens(tokens);
|
||||
} else {
|
||||
self.resolve.generics.to_tokens(tokens);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> ToTokens for TyGenerics<'a> {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
if let Some(imp) = self.explicit_impl {
|
||||
imp.ty_generics.to_tokens(tokens);
|
||||
} else if !self.resolve.generics.lifetimes.is_empty() {
|
||||
let span = self.key.rust.span();
|
||||
self.key
|
||||
.lt_token
|
||||
.unwrap_or_else(|| Token)
|
||||
.to_tokens(tokens);
|
||||
self.resolve.generics.lifetimes.to_tokens(tokens);
|
||||
self.key
|
||||
.gt_token
|
||||
.unwrap_or_else(|| Token)
|
||||
.to_tokens(tokens);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct UnderscoreLifetimes<'a> {
|
||||
generics: &'a Lifetimes,
|
||||
}
|
||||
|
||||
impl Lifetimes {
|
||||
pub fn to_underscore_lifetimes(&self) -> UnderscoreLifetimes {
|
||||
UnderscoreLifetimes { generics: self }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> ToTokens for UnderscoreLifetimes<'a> {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
let Lifetimes {
|
||||
lt_token,
|
||||
lifetimes,
|
||||
gt_token,
|
||||
} = self.generics;
|
||||
lt_token.to_tokens(tokens);
|
||||
for pair in lifetimes.pairs() {
|
||||
let (lifetime, punct) = pair.into_tuple();
|
||||
let lifetime = Lifetime::new("'_", lifetime.span());
|
||||
lifetime.to_tokens(tokens);
|
||||
punct.to_tokens(tokens);
|
||||
}
|
||||
gt_token.to_tokens(tokens);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue