Skip to content

Commit

Permalink
fix(napi-derive): fix macro expansion naming shadow (#1278)
Browse files Browse the repository at this point in the history
Co-authored-by: fengyu <fengyu.shelby@bytedance.com>
  • Loading branch information
JSerFeng and fengyu committed Aug 19, 2022
1 parent 5ba6034 commit bc69e15
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions crates/backend/src/codegen/struct.rs
Original file line number Diff line number Diff line change
Expand Up @@ -405,9 +405,11 @@ impl NapiStruct {

match &field.name {
syn::Member::Named(ident) => {
field_destructions.push(quote! { #ident });
// alias here prevents field name shadowing
let alias_ident = format_ident!("{}_", ident);
field_destructions.push(quote! { #ident: #alias_ident });
field_conversions.push(
quote! { <#ty as napi::bindgen_prelude::ToNapiValue>::to_napi_value(env, #ident)? },
quote! { <#ty as napi::bindgen_prelude::ToNapiValue>::to_napi_value(env, #alias_ident)? },
);
}
syn::Member::Unnamed(i) => {
Expand Down Expand Up @@ -499,21 +501,22 @@ impl NapiStruct {
};
match &field.name {
syn::Member::Named(ident) => {
field_destructions.push(quote! { #ident });
let alias_ident = format_ident!("{}_", ident);
field_destructions.push(quote! { #ident: #alias_ident });
if is_optional_field {
obj_field_setters.push(quote! {
if #ident.is_some() {
obj.set(#field_js_name, #ident)?;
if #alias_ident.is_some() {
obj.set(#field_js_name, #alias_ident)?;
}
});
} else {
obj_field_setters.push(quote! { obj.set(#field_js_name, #ident)?; });
obj_field_setters.push(quote! { obj.set(#field_js_name, #alias_ident)?; });
}
if is_optional_field {
obj_field_getters.push(quote! { let #ident: #ty = obj.get(#field_js_name)?; });
obj_field_getters.push(quote! { let #alias_ident: #ty = obj.get(#field_js_name)?; });
} else {
obj_field_getters.push(quote! {
let #ident: #ty = obj.get(#field_js_name)?.ok_or_else(|| napi::bindgen_prelude::Error::new(
let #alias_ident: #ty = obj.get(#field_js_name)?.ok_or_else(|| napi::bindgen_prelude::Error::new(
napi::bindgen_prelude::Status::InvalidArg,
format!("Missing field `{}`", #field_js_name),
))?;
Expand Down

0 comments on commit bc69e15

Please sign in to comment.