1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
use proc_macro2::TokenStream; use quote::{quote, ToTokens}; mod ast; mod encode; mod to_tokens; pub fn generate_datafrog(input: TokenStream) -> TokenStream { let parsed_program = match syn::parse2(input) { Ok(program) => program, Err(err) => { let tokens = TokenStream::from(err.to_compile_error()); return quote! { {#tokens }}; } }; let typechecked_program = match crate::typechecker::typecheck(parsed_program) { Ok(program) => program, Err(err) => { let tokens = TokenStream::from(err.to_syn_error().to_compile_error()); return quote! { {#tokens }}; } }; let encoded_program = encode::encode(typechecked_program); encoded_program.to_token_stream() }