difftreelog
perf use pointer equality in std.equals
in: master
2 files changed
crates/jrsonnet-evaluator/src/obj.rsdiffbeforeafterboth140 .evaluate()?)140 .evaluate()?)141 }141 }142143 pub fn ptr_eq(a: &ObjValue, b: &ObjValue) -> bool {144 Rc::ptr_eq(&a.0, &b.0)145 }142}146}143impl PartialEq for ObjValue {147impl PartialEq for ObjValue {144 fn eq(&self, other: &Self) -> bool {148 fn eq(&self, other: &Self) -> bool {crates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth254 }254 }255 }255 }256257 pub fn ptr_eq(a: &ArrValue, b: &ArrValue) -> bool {258 match (a, b) {259 (ArrValue::Lazy(a), ArrValue::Lazy(b)) => Rc::ptr_eq(a, b),260 (ArrValue::Eager(a), ArrValue::Eager(b)) => Rc::ptr_eq(a, b),261 _ => false,262 }263 }256}264}257265258impl From<Vec<LazyVal>> for ArrValue {266impl From<Vec<LazyVal>> for ArrValue {533 return Ok(false);541 return Ok(false);534 }542 }535 match (val_a, val_b) {543 match (val_a, val_b) {536 // Cant test for ptr equality, because all fields needs to be evaluated537 (Val::Arr(a), Val::Arr(b)) => {544 (Val::Arr(a), Val::Arr(b)) => {545 if ArrValue::ptr_eq(a, b) {546 return Ok(true);547 }538 if a.len() != b.len() {548 if a.len() != b.len() {539 return Ok(false);549 return Ok(false);540 }550 }546 Ok(true)556 Ok(true)547 }557 }548 (Val::Obj(a), Val::Obj(b)) => {558 (Val::Obj(a), Val::Obj(b)) => {559 if ObjValue::ptr_eq(a, b) {560 return Ok(true);561 }549 let fields = a.visible_fields();562 let fields = a.visible_fields();550 if fields != b.visible_fields() {563 if fields != b.visible_fields() {551 return Ok(false);564 return Ok(false);