diff --git a/crates/gen/src/types/function.rs b/crates/gen/src/types/function.rs index 9705ce2b63..decb0ff890 100644 --- a/crates/gen/src/types/function.rs +++ b/crates/gen/src/types/function.rs @@ -46,7 +46,7 @@ impl Function { let mut link = self.0.impl_map().expect("Function").scope().name(); // TODO: workaround for https://github.com/microsoft/windows-rs/issues/463 - if link.contains("-ms-win-") || link == "D3DCOMPILER_47" { + if link.contains("-ms-win-") || link == "D3DCOMPILER_47" || link == "SspiCli" { link = "onecoreuap"; } diff --git a/crates/macros/src/build_limits.rs b/crates/macros/src/build_limits.rs index 2d9adf9117..e5b7516cd1 100644 --- a/crates/macros/src/build_limits.rs +++ b/crates/macros/src/build_limits.rs @@ -106,14 +106,14 @@ fn use_tree_to_namespace_types(use_tree: &syn::UseTree) -> syn::parse::Result { - let namespace = find_namespace(reader, ¤t.clone(), g.span())?; + let namespace = find_namespace(reader, ¤t, g.span())?; Ok(NamespaceTypes { namespace, limit: TypeLimit::All, }) } syn::UseTree::Group(g) => { - let namespace = find_namespace(reader, ¤t.clone(), g.span())?; + let namespace = find_namespace(reader, ¤t, g.span())?; let mut types = Vec::with_capacity(g.items.len()); for tree in &g.items { @@ -136,7 +136,7 @@ fn use_tree_to_namespace_types(use_tree: &syn::UseTree) -> syn::parse::Result { - let namespace = find_namespace(reader, ¤t.clone(), n.span())?; + let namespace = find_namespace(reader, ¤t, n.span())?; let name = n.ident.to_string(); Ok(NamespaceTypes { namespace, diff --git a/crates/macros/src/implement.rs b/crates/macros/src/implement.rs index 57615f23b7..7c813f0b61 100644 --- a/crates/macros/src/implement.rs +++ b/crates/macros/src/implement.rs @@ -5,16 +5,20 @@ use squote::{format_ident, quote, Literal, TokenStream}; struct Implements(Vec); impl syn::parse::Parse for Implements { - fn parse(inner_type: syn::parse::ParseStream) -> syn::parse::Result { + fn parse(input: syn::parse::ParseStream) -> syn::parse::Result { let mut types = Vec::new(); let reader = gen::TypeReader::get(); loop { - use_tree_to_types(reader, &inner_type.parse::()?, &mut types)?; - - if inner_type.parse::().is_err() { + if input.is_empty() { break; } + + use_tree_to_types(reader, &input.parse::()?, &mut types)?; + + if !input.is_empty() { + input.parse::()?; + } } Ok(Self(types)) diff --git a/crates/macros/src/implement_tree.rs b/crates/macros/src/implement_tree.rs index e2d6dc765e..483d42d20d 100644 --- a/crates/macros/src/implement_tree.rs +++ b/crates/macros/src/implement_tree.rs @@ -12,7 +12,6 @@ pub enum ImplementTree { pub struct ImplementPath { pub ident: Ident, - pub colon2_token: Token![::], pub tree: Box, } @@ -32,9 +31,9 @@ impl Parse for ImplementTree { if lookahead.peek(Ident) { let ident = input.call(Ident::parse_any)?; if input.peek(Token![::]) { + input.parse::()?; Ok(ImplementTree::Path(ImplementPath { ident, - colon2_token: input.parse()?, tree: Box::new(input.parse()?), })) } else {