mirror of
https://github.com/vulkano-rs/vulkano.git
synced 2024-11-22 06:45:23 +00:00
Remove useless cyclic dependency (#2387)
* Remove useless cyclic dependency * Move the call to `crate_ident` outside of the derive functions
This commit is contained in:
parent
af57608ac5
commit
4e79d5dcc6
@ -20,6 +20,3 @@ syn = { workspace = true }
|
|||||||
quote = { workspace = true }
|
quote = { workspace = true }
|
||||||
proc-macro2 = { workspace = true }
|
proc-macro2 = { workspace = true }
|
||||||
proc-macro-crate = { workspace = true }
|
proc-macro-crate = { workspace = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
vulkano = { workspace = true }
|
|
||||||
|
@ -15,9 +15,7 @@ use syn::{
|
|||||||
Result, Type, TypeArray, TypeSlice, WherePredicate,
|
Result, Type, TypeArray, TypeSlice, WherePredicate,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn derive_buffer_contents(mut ast: DeriveInput) -> Result<TokenStream> {
|
pub fn derive_buffer_contents(crate_ident: &Ident, mut ast: DeriveInput) -> Result<TokenStream> {
|
||||||
let crate_ident = crate::crate_ident();
|
|
||||||
|
|
||||||
let struct_ident = &ast.ident;
|
let struct_ident = &ast.ident;
|
||||||
|
|
||||||
let is_repr_rust = ast
|
let is_repr_rust = ast
|
||||||
@ -63,7 +61,7 @@ pub fn derive_buffer_contents(mut ast: DeriveInput) -> Result<TokenStream> {
|
|||||||
ast.generics.split_for_impl()
|
ast.generics.split_for_impl()
|
||||||
};
|
};
|
||||||
|
|
||||||
let layout = write_layout(&crate_ident, &ast)?;
|
let layout = write_layout(crate_ident, &ast)?;
|
||||||
|
|
||||||
Ok(quote! {
|
Ok(quote! {
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
@ -269,25 +267,28 @@ fn find_innermost_element_type(mut field_type: &Type) -> &Type {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use proc_macro2::Span;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn repr() {
|
fn repr() {
|
||||||
|
let crate_ident = Ident::new("vulkano", Span::call_site());
|
||||||
|
|
||||||
let default_repr = parse_quote! {
|
let default_repr = parse_quote! {
|
||||||
struct Test(u8, [u8]);
|
struct Test(u8, [u8]);
|
||||||
};
|
};
|
||||||
assert!(derive_buffer_contents(default_repr).is_err());
|
assert!(derive_buffer_contents(&crate_ident, default_repr).is_err());
|
||||||
|
|
||||||
let irellevant_reprs = parse_quote! {
|
let irellevant_reprs = parse_quote! {
|
||||||
#[repr(packed(2), align(16))]
|
#[repr(packed(2), align(16))]
|
||||||
struct Test(u8, [u8]);
|
struct Test(u8, [u8]);
|
||||||
};
|
};
|
||||||
assert!(derive_buffer_contents(irellevant_reprs).is_err());
|
assert!(derive_buffer_contents(&crate_ident, irellevant_reprs).is_err());
|
||||||
|
|
||||||
let transparent_repr = parse_quote! {
|
let transparent_repr = parse_quote! {
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
struct Test([u8]);
|
struct Test([u8]);
|
||||||
};
|
};
|
||||||
assert!(derive_buffer_contents(transparent_repr).is_ok());
|
assert!(derive_buffer_contents(&crate_ident, transparent_repr).is_ok());
|
||||||
|
|
||||||
let multiple_reprs = parse_quote! {
|
let multiple_reprs = parse_quote! {
|
||||||
#[repr(align(16))]
|
#[repr(align(16))]
|
||||||
@ -295,24 +296,28 @@ mod tests {
|
|||||||
#[repr(packed)]
|
#[repr(packed)]
|
||||||
struct Test(u8, [u8]);
|
struct Test(u8, [u8]);
|
||||||
};
|
};
|
||||||
assert!(derive_buffer_contents(multiple_reprs).is_ok());
|
assert!(derive_buffer_contents(&crate_ident, multiple_reprs).is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn zero_sized() {
|
fn zero_sized() {
|
||||||
|
let crate_ident = Ident::new("vulkano", Span::call_site());
|
||||||
|
|
||||||
let unit = parse_quote! {
|
let unit = parse_quote! {
|
||||||
struct Test;
|
struct Test;
|
||||||
};
|
};
|
||||||
assert!(derive_buffer_contents(unit).is_err());
|
assert!(derive_buffer_contents(&crate_ident, unit).is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn unsupported_datatype() {
|
fn unsupported_datatype() {
|
||||||
|
let crate_ident = Ident::new("vulkano", Span::call_site());
|
||||||
|
|
||||||
let enum_ = parse_quote! {
|
let enum_ = parse_quote! {
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
enum Test { A, B, C }
|
enum Test { A, B, C }
|
||||||
};
|
};
|
||||||
assert!(derive_buffer_contents(enum_).is_err());
|
assert!(derive_buffer_contents(&crate_ident, enum_).is_err());
|
||||||
|
|
||||||
let union = parse_quote! {
|
let union = parse_quote! {
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
@ -321,6 +326,6 @@ mod tests {
|
|||||||
b: f32,
|
b: f32,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
assert!(derive_buffer_contents(union).is_err());
|
assert!(derive_buffer_contents(&crate_ident, union).is_err());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ use syn::{
|
|||||||
Data, DataStruct, Fields, Ident, LitStr, Result, Token,
|
Data, DataStruct, Fields, Ident, LitStr, Result, Token,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn derive_vertex(ast: syn::DeriveInput) -> Result<TokenStream> {
|
pub fn derive_vertex(crate_ident: &Ident, ast: syn::DeriveInput) -> Result<TokenStream> {
|
||||||
let struct_name = &ast.ident;
|
let struct_name = &ast.ident;
|
||||||
|
|
||||||
let fields = match &ast.data {
|
let fields = match &ast.data {
|
||||||
@ -27,8 +27,6 @@ pub fn derive_vertex(ast: syn::DeriveInput) -> Result<TokenStream> {
|
|||||||
_ => bail!("expected a struct with named fields"),
|
_ => bail!("expected a struct with named fields"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let crate_ident = crate::crate_ident();
|
|
||||||
|
|
||||||
let mut members = quote! {
|
let mut members = quote! {
|
||||||
let mut offset = 0;
|
let mut offset = 0;
|
||||||
let mut members = ::std::collections::HashMap::default();
|
let mut members = ::std::collections::HashMap::default();
|
||||||
|
@ -24,8 +24,9 @@ mod derive_vertex;
|
|||||||
#[proc_macro_derive(Vertex, attributes(name, format))]
|
#[proc_macro_derive(Vertex, attributes(name, format))]
|
||||||
pub fn derive_vertex(input: TokenStream) -> TokenStream {
|
pub fn derive_vertex(input: TokenStream) -> TokenStream {
|
||||||
let ast = parse_macro_input!(input as DeriveInput);
|
let ast = parse_macro_input!(input as DeriveInput);
|
||||||
|
let crate_ident = crate_ident();
|
||||||
|
|
||||||
derive_vertex::derive_vertex(ast)
|
derive_vertex::derive_vertex(&crate_ident, ast)
|
||||||
.unwrap_or_else(Error::into_compile_error)
|
.unwrap_or_else(Error::into_compile_error)
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
@ -36,8 +37,9 @@ pub fn derive_vertex(input: TokenStream) -> TokenStream {
|
|||||||
#[proc_macro_derive(BufferContents)]
|
#[proc_macro_derive(BufferContents)]
|
||||||
pub fn derive_buffer_contents(input: TokenStream) -> TokenStream {
|
pub fn derive_buffer_contents(input: TokenStream) -> TokenStream {
|
||||||
let ast = parse_macro_input!(input as DeriveInput);
|
let ast = parse_macro_input!(input as DeriveInput);
|
||||||
|
let crate_ident = crate_ident();
|
||||||
|
|
||||||
derive_buffer_contents::derive_buffer_contents(ast)
|
derive_buffer_contents::derive_buffer_contents(&crate_ident, ast)
|
||||||
.unwrap_or_else(Error::into_compile_error)
|
.unwrap_or_else(Error::into_compile_error)
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user