mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-04-25 14:12:13 +00:00
try to fix js_name error when both getter
and setter
used (#2074)
* try to fix js_name error when both `getter` and `setter` used * add tests
This commit is contained in:
parent
301a5f36eb
commit
b9f78aba57
@ -330,12 +330,6 @@ impl Function {
|
|||||||
pub fn infer_setter_property(&self) -> Result<String, Diagnostic> {
|
pub fn infer_setter_property(&self) -> Result<String, Diagnostic> {
|
||||||
let name = self.name.to_string();
|
let name = self.name.to_string();
|
||||||
|
|
||||||
// if `#[wasm_bindgen(js_name = "...")]` is used then that explicitly
|
|
||||||
// because it was hand-written anyway.
|
|
||||||
if self.renamed_via_js_name {
|
|
||||||
return Ok(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise we infer names based on the Rust function name.
|
// Otherwise we infer names based on the Rust function name.
|
||||||
if !name.starts_with("set_") {
|
if !name.starts_with("set_") {
|
||||||
bail_span!(
|
bail_span!(
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
|
||||||
|
use ast::OperationKind;
|
||||||
use backend::ast;
|
use backend::ast;
|
||||||
use backend::util::{ident_ty, ShortHash};
|
use backend::util::{ident_ty, ShortHash};
|
||||||
use backend::Diagnostic;
|
use backend::Diagnostic;
|
||||||
@ -710,7 +711,16 @@ fn function_from_decl(
|
|||||||
|
|
||||||
let (name, name_span, renamed_via_js_name) =
|
let (name, name_span, renamed_via_js_name) =
|
||||||
if let Some((js_name, js_name_span)) = opts.js_name() {
|
if let Some((js_name, js_name_span)) = opts.js_name() {
|
||||||
(js_name.to_string(), js_name_span, true)
|
let kind = operation_kind(&opts);
|
||||||
|
let prefix = match kind {
|
||||||
|
OperationKind::Setter(_) => "set_",
|
||||||
|
_ => "",
|
||||||
|
};
|
||||||
|
(
|
||||||
|
format!("{}{}", prefix, js_name.to_string()),
|
||||||
|
js_name_span,
|
||||||
|
true,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
(decl_name.to_string(), decl_name.span(), false)
|
(decl_name.to_string(), decl_name.span(), false)
|
||||||
};
|
};
|
||||||
|
@ -49,6 +49,48 @@ exports._7_js = (rules) => {
|
|||||||
return rules;
|
return rules;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports._8_js = (rules) => {
|
||||||
|
let value = rules.new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name;
|
||||||
|
assert.equal(value, 8);
|
||||||
|
rules.new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name = value * 2;
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports._9_js = (rules) => {
|
||||||
|
let value = rules.new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name;
|
||||||
|
assert.equal(value, 9);
|
||||||
|
rules.new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name = value * 2;
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports._10_js = (rules) => {
|
||||||
|
let value = rules.new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name;
|
||||||
|
assert.equal(value, 10);
|
||||||
|
rules.new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name = value * 2;
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports._11_js = (rules) => {
|
||||||
|
let value = rules.new_js_name__getter_with_name__no_getter_without_name_for_field__same_getter_setter_name;
|
||||||
|
assert.equal(value, 11);
|
||||||
|
rules.new_js_name__setter_with_name__no_setter_without_name_for_field__same_getter_setter_name = value * 2;
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports._12_js = (rules) => {
|
||||||
|
let value = rules.new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name;
|
||||||
|
assert.equal(value, 12);
|
||||||
|
rules.new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name = value * 2;
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports._13_js = (rules) => {
|
||||||
|
let value = rules.new_js_name__getter_with_name__no_getter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name;
|
||||||
|
assert.equal(value, 13);
|
||||||
|
rules.new_js_name__setter_with_name__no_setter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name = value * 2;
|
||||||
|
return rules;
|
||||||
|
}
|
||||||
|
|
||||||
exports.test_getter_compute = x => {
|
exports.test_getter_compute = x => {
|
||||||
assert.equal(x.foo, 3)
|
assert.equal(x.foo, 3)
|
||||||
};
|
};
|
||||||
|
@ -12,6 +12,12 @@ extern "C" {
|
|||||||
fn _5_js(rules: Rules) -> Rules;
|
fn _5_js(rules: Rules) -> Rules;
|
||||||
fn _6_js(rules: Rules) -> Rules;
|
fn _6_js(rules: Rules) -> Rules;
|
||||||
fn _7_js(rules: Rules) -> Rules;
|
fn _7_js(rules: Rules) -> Rules;
|
||||||
|
fn _8_js(rules: Rules) -> Rules;
|
||||||
|
fn _9_js(rules: Rules) -> Rules;
|
||||||
|
fn _10_js(rules: Rules) -> Rules;
|
||||||
|
fn _11_js(rules: Rules) -> Rules;
|
||||||
|
fn _12_js(rules: Rules) -> Rules;
|
||||||
|
fn _13_js(rules: Rules) -> Rules;
|
||||||
|
|
||||||
fn test_getter_compute(x: GetterCompute);
|
fn test_getter_compute(x: GetterCompute);
|
||||||
fn test_setter_compute(x: SetterCompute);
|
fn test_setter_compute(x: SetterCompute);
|
||||||
@ -86,6 +92,106 @@ impl Rules {
|
|||||||
pub fn set_js_name__setter_with_name__no_setter_without_name_for_field(&mut self, field: i32) {
|
pub fn set_js_name__setter_with_name__no_setter_without_name_for_field(&mut self, field: i32) {
|
||||||
self.field = field;
|
self.field = field;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen(getter, js_name = new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name)]
|
||||||
|
pub fn js_name__no_getter_with_name__getter_without_name__same_getter_setter_name(
|
||||||
|
&self,
|
||||||
|
) -> i32 {
|
||||||
|
self.field
|
||||||
|
}
|
||||||
|
#[wasm_bindgen(js_name = new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name, setter)]
|
||||||
|
pub fn set_js_name__no_setter_with_name__setter_without_name__same_getter_setter_name(
|
||||||
|
&mut self,
|
||||||
|
field: i32,
|
||||||
|
) {
|
||||||
|
self.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen(getter, js_name = new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name)]
|
||||||
|
pub fn js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name(
|
||||||
|
&self,
|
||||||
|
) -> i32 {
|
||||||
|
self.field
|
||||||
|
}
|
||||||
|
#[wasm_bindgen(js_name = new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name, setter)]
|
||||||
|
pub fn set_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name(
|
||||||
|
&mut self,
|
||||||
|
field: i32,
|
||||||
|
) {
|
||||||
|
self.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen(
|
||||||
|
getter = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name,
|
||||||
|
js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name)]
|
||||||
|
pub fn js_name__getter_with_name__no_getter_without_name__same_getter_setter_name(
|
||||||
|
&self,
|
||||||
|
) -> i32 {
|
||||||
|
self.field
|
||||||
|
}
|
||||||
|
#[wasm_bindgen(
|
||||||
|
js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name,
|
||||||
|
setter = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name)]
|
||||||
|
pub fn set_js_name__setter_with_name__no_setter_without_name__same_getter_setter_name(
|
||||||
|
&mut self,
|
||||||
|
field: i32,
|
||||||
|
) {
|
||||||
|
self.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen(
|
||||||
|
getter = new_js_name__getter_with_name__no_getter_without_name_for_field__same_getter_setter_name,
|
||||||
|
js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__no_same_field_name)]
|
||||||
|
pub fn js_name__getter_with_name__no_getter_without_name__same_getter_setter_name__no_same_field_name(
|
||||||
|
&self,
|
||||||
|
) -> i32 {
|
||||||
|
self.field
|
||||||
|
}
|
||||||
|
#[wasm_bindgen(
|
||||||
|
js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__no_same_field_name,
|
||||||
|
setter = new_js_name__setter_with_name__no_setter_without_name_for_field__same_getter_setter_name)]
|
||||||
|
pub fn set_js_name__setter_with_name__no_setter_without_name__same_getter_setter_name__no_same_field_name(
|
||||||
|
&mut self,
|
||||||
|
field: i32,
|
||||||
|
) {
|
||||||
|
self.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen(
|
||||||
|
getter = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name,
|
||||||
|
js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__same_getter_setter_origin_name)]
|
||||||
|
pub fn js_name__getter_setter_with_name__no_getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name(
|
||||||
|
&self,
|
||||||
|
) -> i32 {
|
||||||
|
self.field
|
||||||
|
}
|
||||||
|
#[wasm_bindgen(
|
||||||
|
js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__same_getter_setter_origin_name,
|
||||||
|
setter = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name)]
|
||||||
|
pub fn set_js_name__getter_setter_with_name__no_getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name(
|
||||||
|
&mut self,
|
||||||
|
field: i32,
|
||||||
|
) {
|
||||||
|
self.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen(
|
||||||
|
getter = new_js_name__getter_with_name__no_getter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name,
|
||||||
|
js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__same_getter_setter_origin_name__no_same_field_name)]
|
||||||
|
pub fn js_name__getter_setter_with_name__no_getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name__no_same_field_name(
|
||||||
|
&self,
|
||||||
|
) -> i32 {
|
||||||
|
self.field
|
||||||
|
}
|
||||||
|
#[wasm_bindgen(
|
||||||
|
js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__same_getter_setter_origin_name__no_same_field_name,
|
||||||
|
setter = new_js_name__setter_with_name__no_setter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name)]
|
||||||
|
pub fn set_js_name__getter_setter_with_name__no_getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name__no_same_field_name(
|
||||||
|
&mut self,
|
||||||
|
field: i32,
|
||||||
|
) {
|
||||||
|
self.field = field;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen_test]
|
#[wasm_bindgen_test]
|
||||||
@ -130,6 +236,42 @@ fn _7_rust() {
|
|||||||
assert_eq!(rules.field, 14);
|
assert_eq!(rules.field, 14);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn _8_rust() {
|
||||||
|
let rules = _8_js(Rules { field: 8 });
|
||||||
|
assert_eq!(rules.field, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn _9_rust() {
|
||||||
|
let rules = _9_js(Rules { field: 9 });
|
||||||
|
assert_eq!(rules.field, 18);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn _10_rust() {
|
||||||
|
let rules = _10_js(Rules { field: 10 });
|
||||||
|
assert_eq!(rules.field, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn _11_rust() {
|
||||||
|
let rules = _11_js(Rules { field: 11 });
|
||||||
|
assert_eq!(rules.field, 22);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn _12_rust() {
|
||||||
|
let rules = _12_js(Rules { field: 12 });
|
||||||
|
assert_eq!(rules.field, 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn _13_rust() {
|
||||||
|
let rules = _13_js(Rules { field: 13 });
|
||||||
|
assert_eq!(rules.field, 26);
|
||||||
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
struct GetterCompute;
|
struct GetterCompute;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user