Add function pointer types to syntax tree
diff --git a/syntax/tokens.rs b/syntax/tokens.rs
index 52c47d5..3bbe872 100644
--- a/syntax/tokens.rs
+++ b/syntax/tokens.rs
@@ -1,7 +1,7 @@
use crate::syntax::atom::Atom::*;
use crate::syntax::{Derive, ExternFn, Ref, Ty1, Type, Var};
use proc_macro2::{Ident, Span, TokenStream};
-use quote::{quote_spanned, ToTokens};
+use quote::{quote, quote_spanned, ToTokens};
use syn::Token;
impl ToTokens for Type {
@@ -16,6 +16,21 @@
}
Type::RustBox(ty) | Type::UniquePtr(ty) => ty.to_tokens(tokens),
Type::Ref(r) | Type::Str(r) => r.to_tokens(tokens),
+ Type::Fn(f) => {
+ let fn_token = f.fn_token;
+ let args = &f.args;
+ tokens.extend(quote!(#fn_token(#(#args),*)));
+ let mut ret = match &f.ret {
+ Some(ret) => quote!(#ret),
+ None => quote!(()),
+ };
+ if f.throws {
+ ret = quote!(::std::result::Result<#ret, _>);
+ }
+ if f.ret.is_some() || f.throws {
+ tokens.extend(quote!(-> #ret));
+ }
+ }
Type::Void(span) => tokens.extend(quote_spanned!(*span=> ())),
}
}