summaryrefslogtreecommitdiff
path: root/crates/typst-macros
diff options
context:
space:
mode:
authorSébastien d'Herbais de Thun <sebastien.d.herbais@gmail.com>2023-12-04 11:44:34 +0100
committerGitHub <noreply@github.com>2023-12-04 11:44:34 +0100
commit7f10d3282e85b0223efe569d1ee612eb43ab8195 (patch)
tree4aac92ee2b5e2e905b3359bf3da24e11f5da0233 /crates/typst-macros
parent9926a594e7f462103b47930270a00c1b9ce3cbf3 (diff)
Fix defaults on `#[synthesized]` fields (#2825)
Fixes #2821
Diffstat (limited to 'crates/typst-macros')
-rw-r--r--crates/typst-macros/src/elem.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/crates/typst-macros/src/elem.rs b/crates/typst-macros/src/elem.rs
index e531a7ed..b3f86117 100644
--- a/crates/typst-macros/src/elem.rs
+++ b/crates/typst-macros/src/elem.rs
@@ -723,7 +723,7 @@ fn create_native_elem_impl(element: &Elem) -> TokenStream {
quote! {
<#elem as #foundations::ElementFields>::Fields::#name => None,
}
- } else if field.inherent() {
+ } else if field.inherent() || (field.synthesized && field.default.is_some()) {
quote! {
<#elem as #foundations::ElementFields>::Fields::#name => Some(
#foundations::IntoValue::into_value(self.#field_ident.clone())
@@ -748,7 +748,7 @@ fn create_native_elem_impl(element: &Elem) -> TokenStream {
quote! {
<#elem as #foundations::ElementFields>::Fields::#name => false,
}
- } else if field.inherent() {
+ } else if field.inherent() || (field.synthesized && field.default.is_some()) {
quote! {
<#elem as #foundations::ElementFields>::Fields::#name => true,
}
@@ -867,13 +867,22 @@ fn create_native_elem_impl(element: &Elem) -> TokenStream {
quote! { ::ecow::EcoString::inline(#name).into() }
};
- quote! {
- if let Some(value) = &self.#field_ident {
+ if field.synthesized && field.default.is_some() {
+ quote! {
fields.insert(
#field_call,
- #foundations::IntoValue::into_value(value.clone())
+ #foundations::IntoValue::into_value(self.#field_ident.clone())
);
}
+ } else {
+ quote! {
+ if let Some(value) = &self.#field_ident {
+ fields.insert(
+ #field_call,
+ #foundations::IntoValue::into_value(value.clone())
+ );
+ }
+ }
}
});