Fix bug in property setter op-assignment.

This commit is contained in:
Stephen Chung
2021-04-03 11:12:35 +08:00
parent a738f750f9
commit b089d5b8f4
7 changed files with 306 additions and 226 deletions

View File

@@ -128,3 +128,36 @@ fn test_get_set_chain() -> Result<(), Box<EvalAltResult>> {
Ok(())
}
#[test]
fn test_get_set_op_assignment() -> Result<(), Box<EvalAltResult>> {
#[derive(Clone, Debug, Eq, PartialEq)]
struct Num(INT);
impl Num {
fn get(&mut self) -> INT {
self.0
}
fn set(&mut self, x: INT) {
self.0 = x;
}
}
let mut engine = Engine::new();
engine
.register_type::<Num>()
.register_fn("new_ts", || Num(40))
.register_get_set("v", Num::get, Num::set);
assert_eq!(
engine.eval::<Num>("let a = new_ts(); a.v = a.v + 2; a")?,
Num(42)
);
assert_eq!(
engine.eval::<Num>("let a = new_ts(); a.v += 2; a")?,
Num(42)
);
Ok(())
}