Add macro to luaify blocks instead of exprs
This commit is contained in:
@@ -14,6 +14,12 @@ pub fn generate(expr: &Expr) -> Result<TokenStream> {
|
||||
Ok(f.done())
|
||||
}
|
||||
|
||||
pub fn generate_chunk(block: &Block) -> Result<TokenStream> {
|
||||
let mut f = Formatter::default();
|
||||
generate_block(&mut f, &block, Context::stmt(false))?;
|
||||
Ok(f.done())
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct Formatter {
|
||||
buf: String,
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
use crate::{generate::generate, transform::transform};
|
||||
use crate::{
|
||||
generate::{generate, generate_chunk},
|
||||
transform::{transform, transform_chunk},
|
||||
};
|
||||
use proc_macro::TokenStream as TokenStream1;
|
||||
use quote::ToTokens;
|
||||
use syn::parse_macro_input;
|
||||
@@ -16,3 +19,13 @@ pub fn luaify(input: TokenStream1) -> TokenStream1 {
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
#[proc_macro]
|
||||
pub fn luaify_chunk(input: TokenStream1) -> TokenStream1 {
|
||||
let mut block = parse_macro_input!(input);
|
||||
match transform_chunk(&mut block).and_then(|()| generate_chunk(&block)) {
|
||||
Ok(s) => s,
|
||||
Err(err) => err.into_compile_error().into_token_stream(),
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
@@ -9,6 +9,12 @@ pub fn transform(expr: &mut Expr) -> Result<()> {
|
||||
visitor.result
|
||||
}
|
||||
|
||||
pub fn transform_chunk(block: &mut Block) -> Result<()> {
|
||||
let mut visitor = Visitor::new();
|
||||
visitor.visit_block_mut(block);
|
||||
visitor.result
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Visitor {
|
||||
result: Result<()>,
|
||||
|
||||
Reference in New Issue
Block a user