Working commit
This commit is contained in:
@@ -2,7 +2,7 @@ use crate::utils::{ffi_crate, syn_assert, syn_error};
|
||||
use darling::FromMeta;
|
||||
use proc_macro2::TokenStream;
|
||||
use quote::{format_ident, quote};
|
||||
use syn::{spanned::*, *};
|
||||
use syn::*;
|
||||
|
||||
#[derive(Debug, FromMeta)]
|
||||
pub struct Args {}
|
||||
|
||||
@@ -5,8 +5,16 @@ use syn::parse_macro_input;
|
||||
|
||||
mod cdef;
|
||||
mod metatype;
|
||||
mod module;
|
||||
mod utils;
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn module(_args: TokenStream1, input: TokenStream1) -> TokenStream1 {
|
||||
module::transform(parse_macro_input!(input))
|
||||
.unwrap_or_else(|err| err.into_compile_error().into_token_stream())
|
||||
.into()
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn cdef(args: TokenStream1, input: TokenStream1) -> TokenStream1 {
|
||||
NestedMeta::parse_meta_list(args.into())
|
||||
@@ -17,7 +25,7 @@ pub fn cdef(args: TokenStream1, input: TokenStream1) -> TokenStream1 {
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn metatype(args: TokenStream1, input: TokenStream1) -> TokenStream1 {
|
||||
pub fn metatype(_args: TokenStream1, input: TokenStream1) -> TokenStream1 {
|
||||
metatype::transform(parse_macro_input!(input))
|
||||
.unwrap_or_else(|err| err.into_compile_error().into_token_stream())
|
||||
.into()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::utils::{ffi_crate, is_primitive, is_unit, pat_ident, syn_assert, syn_error, ty_name};
|
||||
use crate::utils::{ffi_crate, is_primitive, is_unit, pat_ident, syn_assert, ty_name};
|
||||
use proc_macro2::TokenStream;
|
||||
use quote::{format_ident, quote};
|
||||
use syn::{spanned::*, *};
|
||||
use syn::*;
|
||||
|
||||
pub fn transform(mut imp: ItemImpl) -> Result<TokenStream> {
|
||||
syn_assert!(
|
||||
@@ -146,7 +146,7 @@ enum FfiArgType {
|
||||
Default,
|
||||
}
|
||||
|
||||
fn get_ffi_arg_type(ty: &Type) -> FfiArgType {
|
||||
fn get_ffi_arg_type(_ty: &Type) -> FfiArgType {
|
||||
FfiArgType::Default
|
||||
}
|
||||
|
||||
|
||||
26
crates/luaffi_impl/src/module.rs
Normal file
26
crates/luaffi_impl/src/module.rs
Normal file
@@ -0,0 +1,26 @@
|
||||
use crate::utils::syn_assert;
|
||||
use proc_macro2::TokenStream;
|
||||
use quote::quote;
|
||||
use syn::*;
|
||||
|
||||
pub fn transform(func: ItemFn) -> Result<TokenStream> {
|
||||
syn_assert!(
|
||||
func.sig.generics.params.is_empty(),
|
||||
func.sig.generics,
|
||||
"cannot be generic (not yet implemented)"
|
||||
);
|
||||
|
||||
// let impls = generate_impls(&mut imp)?;
|
||||
// let mod_name = format_ident!("__metatype__{}", ty_name(&imp.self_ty)?);
|
||||
|
||||
Ok(quote! {
|
||||
#func
|
||||
|
||||
// #[doc(hidden)]
|
||||
// #[allow(unused, non_snake_case)]
|
||||
// mod #mod_name {
|
||||
// use super::*;
|
||||
// #impls
|
||||
// }
|
||||
})
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
use std::env;
|
||||
use syn::{spanned::*, *};
|
||||
use syn::*;
|
||||
|
||||
macro_rules! syn_error {
|
||||
($src:expr, $($fmt:expr),+) => {{
|
||||
use syn::spanned::*;
|
||||
return Err(syn::Error::new($src.span(), format!($($fmt),*)));
|
||||
}};
|
||||
}
|
||||
@@ -10,7 +11,7 @@ macro_rules! syn_error {
|
||||
macro_rules! syn_assert {
|
||||
($cond:expr, $src:expr, $($fmt:expr),+) => {{
|
||||
if !$cond {
|
||||
syn_error!($src, $($fmt),+);
|
||||
crate::utils::syn_error!($src, $($fmt),+);
|
||||
}
|
||||
}};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user