chandra_kernel/
lib.rs

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    //println!("{:#?}", attrs);
40
41    if let Data::Struct(s) = input.data {
42        for field in s.fields {
43            //println!("{:?}: {:#?}", field.ident, field.attrs);
44        }
45    }
46    
47    quote::quote!().into()
48}