1#![recursion_limit = "128"]
2
3mod function;
4mod kernel;
5mod parseatt;
6mod parse_function;
7mod parse_cpu_function;
8
9extern crate proc_macro;
10
11use proc_macro::TokenStream;
12use proc_macro_error::{proc_macro_error};
13use syn::{parse_macro_input, DeriveInput, Data};
14
15
16#[proc_macro_error]
17#[proc_macro_attribute]
18pub fn kernel(attr: TokenStream, tokens: TokenStream) -> TokenStream {
19 kernel::kernel(attr, tokens, quote::quote!(::chandra))
20}
21
22#[proc_macro_error]
23#[proc_macro_attribute]
24pub fn ChandraFunction(attr: TokenStream, tokens: TokenStream) -> TokenStream {
25 function::function(attr, tokens, quote::quote!(::chandra), false)
26}
27
28#[proc_macro_error]
29#[proc_macro_attribute]
30pub fn ChandraExtension(attr: TokenStream, tokens: TokenStream) -> TokenStream {
31 function::function(attr, tokens, quote::quote!(::chandra), true)
32}
33
34#[proc_macro_error]
35#[proc_macro_derive(ChandraStruct, attributes(For, Index, XPar))]
36pub fn chandra_struct(input: TokenStream) -> TokenStream {
37 let input = parse_macro_input!(input as DeriveInput);
38 let attrs = &input.attrs;
39 if let Data::Struct(s) = input.data {
42 for field in s.fields {
43 }
45 }
46
47 quote::quote!().into()
48}