difftreelog
fix infinite recursion false positive on cached error
in: master
1 file changed
crates/jrsonnet-evaluator/src/obj.rsdiffbeforeafterboth390 .value_cache390 .value_cache391 .borrow_mut()391 .borrow_mut()392 .insert(cache_key.clone(), CacheValue::Pending);392 .insert(cache_key.clone(), CacheValue::Pending);393 let fill_error = |e: LocError| {394 self.0395 .value_cache396 .borrow_mut()397 .insert(cache_key.clone(), CacheValue::Errored(e.clone()));398 e399 };393 let value = match (self.0.this_entries.get(&key), &self.0.super_obj) {400 let value = match (self.0.this_entries.get(&key), &self.0.super_obj) {394 (Some(k), None) => Ok(Some(self.evaluate_this(s, k, real_this)?)),401 (Some(k), None) => Ok(Some(402 self.evaluate_this(s, k, real_this).map_err(fill_error)?,403 )),395 (Some(k), Some(super_obj)) => {404 (Some(k), Some(super_obj)) => {396 let our = self.evaluate_this(s.clone(), k, real_this)?;405 let our = self406 .evaluate_this(s.clone(), k, real_this)407 .map_err(fill_error)?;397 if k.add {408 if k.add {398 super_obj409 super_obj399 .get_raw(s.clone(), key, Some(real_this))?410 .get_raw(s.clone(), key, Some(real_this))411 .map_err(fill_error)?400 .map_or(Ok(Some(our.clone())), |v| {412 .map_or(Ok(Some(our.clone())), |v| {401 Ok(Some(evaluate_add_op(s.clone(), &v, &our)?))413 Ok(Some(evaluate_add_op(s.clone(), &v, &our)?))402 })414 })407 (None, Some(super_obj)) => super_obj.get_raw(s, key, Some(real_this)),419 (None, Some(super_obj)) => super_obj.get_raw(s, key, Some(real_this)),408 (None, None) => Ok(None),420 (None, None) => Ok(None),409 };421 }410 let value = match value {422 .map_err(fill_error)?;411 Ok(v) => v,412 Err(e) => {413 self.0414 .value_cache415 .borrow_mut()416 .insert(cache_key, CacheValue::Errored(e.clone()));417 return Err(e);418 }419 };420 self.0.value_cache.borrow_mut().insert(423 self.0.value_cache.borrow_mut().insert(421 cache_key,424 cache_key,422 match &value {425 match &value {