mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-10-03 01:08:12 +08:00
Pick hashed element glue in the macro emissions
This commit is contained in:
@@ -2158,7 +2158,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
|
|||||||
let flip_layout_meta_fn = flip_meta_concrete.then(|| {
|
let flip_layout_meta_fn = flip_meta_concrete.then(|| {
|
||||||
let layout_meta_fn = format_ident!("{}_layout_meta", fn_name);
|
let layout_meta_fn = format_ident!("{}_layout_meta", fn_name);
|
||||||
let element_spec = match element_write {
|
let element_spec = match element_write {
|
||||||
Some(ty) => quote!(#core_types::record::ElementSpec::Concrete(#core_types::record::element_write::<#ty>())),
|
Some(ty) => quote!(#core_types::record::ElementSpec::Concrete({ use #core_types::record::{ElementWritePickHashed as _, ElementWritePickPlain as _}; (&#core_types::record::ElementWritePick::<#ty>(::core::marker::PhantomData)).element_write() })),
|
||||||
None => quote!(#core_types::record::ElementSpec::Carried),
|
None => quote!(#core_types::record::ElementSpec::Carried),
|
||||||
};
|
};
|
||||||
let layout_meta = crate::codegen::ir::layout_meta_tokens(&node, element_spec, core_types);
|
let layout_meta = crate::codegen::ir::layout_meta_tokens(&node, element_spec, core_types);
|
||||||
@@ -2187,7 +2187,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
|
|||||||
.collect();
|
.collect();
|
||||||
let subtraction = (!remove_pairs.is_empty()).then(|| quote!(.without(&[#(#remove_pairs),*])));
|
let subtraction = (!remove_pairs.is_empty()).then(|| quote!(.without(&[#(#remove_pairs),*])));
|
||||||
let element = match element_write {
|
let element = match element_write {
|
||||||
Some(ty) => quote!(#core_types::record::element_write::<#ty>()),
|
Some(ty) => quote!({ use #core_types::record::{ElementWritePickHashed as _, ElementWritePickPlain as _}; (&#core_types::record::ElementWritePick::<#ty>(::core::marker::PhantomData)).element_write() }),
|
||||||
None => quote!(__carrier.element),
|
None => quote!(__carrier.element),
|
||||||
};
|
};
|
||||||
let layout_def = match skips_carrier {
|
let layout_def = match skips_carrier {
|
||||||
@@ -2204,7 +2204,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
|
|||||||
};
|
};
|
||||||
let layout_meta_fn = format_ident!("{}_layout_meta", fn_name);
|
let layout_meta_fn = format_ident!("{}_layout_meta", fn_name);
|
||||||
let element_spec = match element_write {
|
let element_spec = match element_write {
|
||||||
Some(ty) => quote!(#core_types::record::ElementSpec::Concrete(#core_types::record::element_write::<#ty>())),
|
Some(ty) => quote!(#core_types::record::ElementSpec::Concrete({ use #core_types::record::{ElementWritePickHashed as _, ElementWritePickPlain as _}; (&#core_types::record::ElementWritePick::<#ty>(::core::marker::PhantomData)).element_write() })),
|
||||||
None => quote!(#core_types::record::ElementSpec::Carried),
|
None => quote!(#core_types::record::ElementSpec::Carried),
|
||||||
};
|
};
|
||||||
let layout_meta = crate::codegen::ir::layout_meta_tokens(&node, element_spec, core_types);
|
let layout_meta = crate::codegen::ir::layout_meta_tokens(&node, element_spec, core_types);
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ fn flip_entries_tokens(parsed: &ParsedNodeFn, struct_name: &Ident, regular_field
|
|||||||
let layout = format_ident!("__layout_{index}");
|
let layout = format_ident!("__layout_{index}");
|
||||||
quote!(&#layout,)
|
quote!(&#layout,)
|
||||||
});
|
});
|
||||||
let element_spec = quote!(gcore::record::ElementSpec::Concrete(gcore::record::element_write::<#row_output>()));
|
let element_spec = quote!(gcore::record::ElementSpec::Concrete({ use gcore::record::{ElementWritePickHashed as _, ElementWritePickPlain as _}; (&gcore::record::ElementWritePick::<#row_output>(::core::marker::PhantomData)).element_write() }));
|
||||||
let layout_meta = crate::codegen::ir::layout_meta_tokens(&node, element_spec, &core_types);
|
let layout_meta = crate::codegen::ir::layout_meta_tokens(&node, element_spec, &core_types);
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
gcore::registry::RegistryEntry {
|
gcore::registry::RegistryEntry {
|
||||||
|
|||||||
Reference in New Issue
Block a user