git.delta.rocks / jrsonnet / refs/commits / 0843f20516c9

difftreelog

fix infinite recursion false positive on cached error

Yaroslav Bolyukin2022-04-22parent: #ab1fc1b.patch.diff
in: master

1 file changed

modifiedcrates/jrsonnet-evaluator/src/obj.rsdiffbeforeafterboth
390 .value_cache390 .value_cache
391 .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.0
395 .value_cache
396 .borrow_mut()
397 .insert(cache_key.clone(), CacheValue::Errored(e.clone()));
398 e
399 };
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 = self
406 .evaluate_this(s.clone(), k, real_this)
407 .map_err(fill_error)?;
397 if k.add {408 if k.add {
398 super_obj409 super_obj
399 .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.0
414 .value_cache
415 .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 {