Lines Matching refs:efn
79 Api::CxxFunction(efn) => {
80 expanded.extend(expand_cxx_function_shim(efn, types));
86 Api::RustFunction(efn) => hidden.extend(expand_rust_function_shim(efn, types)),
450 fn expand_cxx_function_decl(efn: &ExternFn, types: &Types) -> TokenStream {
451 let generics = &efn.generics;
452 let receiver = efn.receiver.iter().map(|receiver| {
456 let args = efn.args.iter().map(|arg| {
473 let ret = if efn.throws {
476 expand_extern_return_type(&efn.ret, types, true)
479 if indirect_return(efn, types) {
480 let ret = expand_extern_type(efn.ret.as_ref().unwrap(), types, true);
483 let link_name = mangle::extern_fn(efn, types);
484 let local_name = format_ident!("__{}", efn.name.rust);
491 fn expand_cxx_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
492 let doc = &efn.doc;
493 let attrs = &efn.attrs;
494 let decl = expand_cxx_function_decl(efn, types);
495 let receiver = efn.receiver.iter().map(|receiver| {
508 let args = efn.args.iter().map(|arg| quote!(#arg));
510 let ret = if efn.throws {
511 let ok = match &efn.ret {
517 expand_return_type(&efn.ret)
519 let indirect_return = indirect_return(efn, types);
520 let receiver_var = efn
524 let arg_vars = efn.args.iter().map(|arg| {
590 let trampolines = efn
596 Some(expand_function_pointer_trampoline(efn, var, f, types))
602 let mut setup = efn
616 let local_name = format_ident!("__{}", efn.name.rust);
617 let span = efn.semi_token.span;
619 let ret = expand_extern_type(efn.ret.as_ref().unwrap(), types, true);
623 setup.extend(if efn.throws {
633 } else if efn.throws {
643 if efn.throws && efn.sig.ret.is_none() {
646 expr = match &efn.ret {
716 if efn.throws {
721 let visibility = efn.visibility;
722 let unsafety = &efn.sig.unsafety;
726 let fn_token = efn.sig.fn_token;
727 let ident = &efn.name.rust;
728 let generics = &efn.generics;
729 let arg_list = quote_spanned!(efn.sig.paren_token.span=> (#(#all_args,)*));
737 match &efn.receiver {
780 efn: &ExternFn,
785 let c_trampoline = mangle::c_trampoline(efn, var, types);
786 let r_trampoline = mangle::r_trampoline(efn, var, types);
788 let prevent_unwind_label = format!("::{}::{}", efn.name.rust, var.rust);
789 let body_span = efn.semi_token.span;
797 Some(&efn.generics),
798 &efn.attrs,
929 fn expand_rust_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
930 let link_name = mangle::extern_fn(efn, types);
931 let local_name = match &efn.receiver {
932 None => format_ident!("__{}", efn.name.rust),
933 Some(receiver) => format_ident!("__{}__{}", receiver.ty.rust, efn.name.rust),
935 let prevent_unwind_label = match &efn.receiver {
936 None => format!("::{}", efn.name.rust),
937 Some(receiver) => format!("::{}::{}", receiver.ty.rust, efn.name.rust),
939 let invoke = Some(&efn.name.rust);
940 let body_span = efn.semi_token.span;
942 efn,
949 &efn.attrs,