git.delta.rocks / jrsonnet / refs/commits / 55e9769db459

difftreelog

feat(evaluator) index errors

Лач2020-06-11parent: #a18f0b6.patch.diff
in: master

2 files changed

modifiedcrates/jsonnet-evaluator/src/error.rsdiffbeforeafterboth
1616
17 FieldMustBeStringGot(ValType),17 FieldMustBeStringGot(ValType),
18
19 AttemptedIndexAnArrayWithString(String),
20 ValueIndexMustBeTypeGot(ValType, ValType, ValType),
21 CantIndexInto(ValType),
1822
19 RuntimeError(String),23 RuntimeError(String),
20 StackOverflow,24 StackOverflow,
modifiedcrates/jsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
421 create_error(crate::Error::NoSuchField(s))?421 create_error(crate::Error::NoSuchField(s))?
422 }422 }
423 }423 }
424 (Val::Obj(_), n) => create_error(crate::Error::ValueIndexMustBeTypeGot(
425 ValType::Obj,
426 ValType::Str,
427 n.value_type()?,
428 ))?,
429
424 (Val::Arr(v), Val::Num(n)) => {430 (Val::Arr(v), Val::Num(n)) => {
425 if n.fract() > f64::EPSILON {431 if n.fract() > f64::EPSILON {
430 .clone()436 .clone()
431 .unwrap_if_lazy()?437 .unwrap_if_lazy()?
432 }438 }
439 (Val::Arr(_), Val::Str(n)) => {
440 create_error(crate::Error::AttemptedIndexAnArrayWithString(n))?
441 }
442 (Val::Arr(_), n) => create_error(crate::Error::ValueIndexMustBeTypeGot(
443 ValType::Arr,
444 ValType::Num,
445 n.value_type()?,
446 ))?,
447
433 (Val::Str(s), Val::Num(n)) => {448 (Val::Str(s), Val::Num(n)) => {
434 Val::Str(s.chars().skip(n as usize).take(1).collect())449 Val::Str(s.chars().skip(n as usize).take(1).collect())
435 }450 }
451 (Val::Str(_), n) => create_error(crate::Error::ValueIndexMustBeTypeGot(
452 ValType::Str,
453 ValType::Num,
454 n.value_type()?,
455 ))?,
456
436 (v, i) => todo!("not implemented: {:?}[{:?}]", v, i.unwrap_if_lazy()),457 (v, _) => create_error(crate::Error::CantIndexInto(v.value_type()?))?,
437 }458 }
438 }459 }
439 LocalExpr(bindings, returned) => {460 LocalExpr(bindings, returned) => {