git.delta.rocks / jrsonnet / refs/commits / ced22d8710e3

difftreelog

refactor Option<&ExprLocation> -> &Option<_>

Yaroslav Bolyukin2021-01-24parent: #a16a15d.patch.diff
in: master

6 files changed

modifiedcrates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth
2222
23fn std_format(str: IStr, vals: Val) -> Result<Val> {23fn std_format(str: IStr, vals: Val) -> Result<Val> {
24 push(24 push(
25 &Some(ExprLocation(Rc::from(PathBuf::from("std.jsonnet")), 0, 0)),25 Some(&ExprLocation(Rc::from(PathBuf::from("std.jsonnet")), 0, 0)),
26 || format!("std.format of {}", str),26 || format!("std.format of {}", str),
27 || {27 || {
28 Ok(match vals {28 Ok(match vals {
34 )34 )
35}35}
3636
37type Builtin = fn(context: Context, loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val>;37type Builtin = fn(context: Context, loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val>;
3838
39type BuiltinsType = HashMap<Box<str>, Builtin>;39type BuiltinsType = HashMap<Box<str>, Builtin>;
4040
78 };78 };
79}79}
8080
81fn builtin_length(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {81fn builtin_length(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
82 parse_args!(context, "length", args, 1, [82 parse_args!(context, "length", args, 1, [
83 0, x: ty!((string | object | array));83 0, x: ty!((string | object | array));
84 ], {84 ], {
96 })96 })
97}97}
9898
99fn builtin_type(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {99fn builtin_type(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
100 parse_args!(context, "type", args, 1, [100 parse_args!(context, "type", args, 1, [
101 0, x: ty!(any);101 0, x: ty!(any);
102 ], {102 ], {
106106
107fn builtin_make_array(107fn builtin_make_array(
108 context: Context,108 context: Context,
109 _loc: &Option<ExprLocation>,109 _loc: Option<&ExprLocation>,
110 args: &ArgsDesc,110 args: &ArgsDesc,
111) -> Result<Val> {111) -> Result<Val> {
112 parse_args!(context, "makeArray", args, 2, [112 parse_args!(context, "makeArray", args, 2, [
126126
127fn builtin_codepoint(127fn builtin_codepoint(
128 context: Context,128 context: Context,
129 _loc: &Option<ExprLocation>,129 _loc: Option<&ExprLocation>,
130 args: &ArgsDesc,130 args: &ArgsDesc,
131) -> Result<Val> {131) -> Result<Val> {
132 parse_args!(context, "codepoint", args, 1, [132 parse_args!(context, "codepoint", args, 1, [
138138
139fn builtin_object_fields_ex(139fn builtin_object_fields_ex(
140 context: Context,140 context: Context,
141 _loc: &Option<ExprLocation>,141 _loc: Option<&ExprLocation>,
142 args: &ArgsDesc,142 args: &ArgsDesc,
143) -> Result<Val> {143) -> Result<Val> {
144 parse_args!(context, "objectFieldsEx", args, 2, [144 parse_args!(context, "objectFieldsEx", args, 2, [
157157
158fn builtin_object_has_ex(158fn builtin_object_has_ex(
159 context: Context,159 context: Context,
160 _loc: &Option<ExprLocation>,160 _loc: Option<&ExprLocation>,
161 args: &ArgsDesc,161 args: &ArgsDesc,
162) -> Result<Val> {162) -> Result<Val> {
163 parse_args!(context, "objectHasEx", args, 3, [163 parse_args!(context, "objectHasEx", args, 3, [
175}175}
176176
177// faster177// faster
178fn builtin_slice(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {178fn builtin_slice(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
179 parse_args!(context, "slice", args, 4, [179 parse_args!(context, "slice", args, 4, [
180 0, indexable: ty!((string | array));180 0, indexable: ty!((string | array));
181 1, index: ty!((number | null));181 1, index: ty!((number | null));
216// faster216// faster
217fn builtin_primitive_equals(217fn builtin_primitive_equals(
218 context: Context,218 context: Context,
219 _loc: &Option<ExprLocation>,219 _loc: Option<&ExprLocation>,
220 args: &ArgsDesc,220 args: &ArgsDesc,
221) -> Result<Val> {221) -> Result<Val> {
222 parse_args!(context, "primitiveEquals", args, 2, [222 parse_args!(context, "primitiveEquals", args, 2, [
228}228}
229229
230// faster230// faster
231fn builtin_equals(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {231fn builtin_equals(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
232 parse_args!(context, "equals", args, 2, [232 parse_args!(context, "equals", args, 2, [
233 0, a: ty!(any);233 0, a: ty!(any);
234 1, b: ty!(any);234 1, b: ty!(any);
237 })237 })
238}238}
239239
240fn builtin_modulo(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {240fn builtin_modulo(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
241 parse_args!(context, "modulo", args, 2, [241 parse_args!(context, "modulo", args, 2, [
242 0, a: ty!(number) => Val::Num;242 0, a: ty!(number) => Val::Num;
243 1, b: ty!(number) => Val::Num;243 1, b: ty!(number) => Val::Num;
246 })246 })
247}247}
248248
249fn builtin_mod(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {249fn builtin_mod(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
250 parse_args!(context, "mod", args, 2, [250 parse_args!(context, "mod", args, 2, [
251 0, a: ty!((number | string));251 0, a: ty!((number | string));
252 1, b: ty!(any);252 1, b: ty!(any);
259 })259 })
260}260}
261261
262fn builtin_floor(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {262fn builtin_floor(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
263 parse_args!(context, "floor", args, 1, [263 parse_args!(context, "floor", args, 1, [
264 0, x: ty!(number) => Val::Num;264 0, x: ty!(number) => Val::Num;
265 ], {265 ], {
266 Ok(Val::Num(x.floor()))266 Ok(Val::Num(x.floor()))
267 })267 })
268}268}
269269
270fn builtin_log(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {270fn builtin_log(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
271 parse_args!(context, "log", args, 1, [271 parse_args!(context, "log", args, 1, [
272 0, n: ty!(number) => Val::Num;272 0, n: ty!(number) => Val::Num;
273 ], {273 ], {
274 Ok(Val::Num(n.ln()))274 Ok(Val::Num(n.ln()))
275 })275 })
276}276}
277277
278fn builtin_pow(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {278fn builtin_pow(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
279 parse_args!(context, "pow", args, 2, [279 parse_args!(context, "pow", args, 2, [
280 0, x: ty!(number) => Val::Num;280 0, x: ty!(number) => Val::Num;
281 1, n: ty!(number) => Val::Num;281 1, n: ty!(number) => Val::Num;
284 })284 })
285}285}
286286
287fn builtin_ext_var(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {287fn builtin_ext_var(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
288 parse_args!(context, "extVar", args, 1, [288 parse_args!(context, "extVar", args, 1, [
289 0, x: ty!(string) => Val::Str;289 0, x: ty!(string) => Val::Str;
290 ], {290 ], {
291 Ok(with_state(|s| s.settings().ext_vars.get(&x).cloned()).ok_or(UndefinedExternalVariable(x))?)291 Ok(with_state(|s| s.settings().ext_vars.get(&x).cloned()).ok_or(UndefinedExternalVariable(x))?)
292 })292 })
293}293}
294294
295fn builtin_native(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {295fn builtin_native(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
296 parse_args!(context, "native", args, 1, [296 parse_args!(context, "native", args, 1, [
297 0, x: ty!(string) => Val::Str;297 0, x: ty!(string) => Val::Str;
298 ], {298 ], {
299 Ok(with_state(|s| s.settings().ext_natives.get(&x).cloned()).map(|v| Val::Func(Rc::new(FuncVal::NativeExt(x.clone(), v)))).ok_or(UndefinedExternalFunction(x))?)299 Ok(with_state(|s| s.settings().ext_natives.get(&x).cloned()).map(|v| Val::Func(Rc::new(FuncVal::NativeExt(x.clone(), v)))).ok_or(UndefinedExternalFunction(x))?)
300 })300 })
301}301}
302302
303fn builtin_filter(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {303fn builtin_filter(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
304 parse_args!(context, "filter", args, 2, [304 parse_args!(context, "filter", args, 2, [
305 0, func: ty!(function) => Val::Func;305 0, func: ty!(function) => Val::Func;
306 1, arr: ty!(array) => Val::Arr;306 1, arr: ty!(array) => Val::Arr;
318 })318 })
319}319}
320320
321fn builtin_foldl(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {321fn builtin_foldl(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
322 parse_args!(context, "foldl", args, 3, [322 parse_args!(context, "foldl", args, 3, [
323 0, func: ty!(function) => Val::Func;323 0, func: ty!(function) => Val::Func;
324 1, arr: ty!(array) => Val::Arr;324 1, arr: ty!(array) => Val::Arr;
332 })332 })
333}333}
334334
335fn builtin_foldr(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {335fn builtin_foldr(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
336 parse_args!(context, "foldr", args, 3, [336 parse_args!(context, "foldr", args, 3, [
337 0, func: ty!(function) => Val::Func;337 0, func: ty!(function) => Val::Func;
338 1, arr: ty!(array) => Val::Arr;338 1, arr: ty!(array) => Val::Arr;
349#[allow(non_snake_case)]349#[allow(non_snake_case)]
350fn builtin_sort_impl(350fn builtin_sort_impl(
351 context: Context,351 context: Context,
352 _loc: &Option<ExprLocation>,352 _loc: Option<&ExprLocation>,
353 args: &ArgsDesc,353 args: &ArgsDesc,
354) -> Result<Val> {354) -> Result<Val> {
355 parse_args!(context, "sort", args, 2, [355 parse_args!(context, "sort", args, 2, [
364}364}
365365
366// faster366// faster
367fn builtin_format(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {367fn builtin_format(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
368 parse_args!(context, "format", args, 2, [368 parse_args!(context, "format", args, 2, [
369 0, str: ty!(string) => Val::Str;369 0, str: ty!(string) => Val::Str;
370 1, vals: ty!(any)370 1, vals: ty!(any)
373 })373 })
374}374}
375375
376fn builtin_range(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {376fn builtin_range(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
377 parse_args!(context, "range", args, 2, [377 parse_args!(context, "range", args, 2, [
378 0, from: ty!(number) => Val::Num;378 0, from: ty!(number) => Val::Num;
379 1, to: ty!(number) => Val::Num;379 1, to: ty!(number) => Val::Num;
386 })386 })
387}387}
388388
389fn builtin_char(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {389fn builtin_char(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
390 parse_args!(context, "char", args, 1, [390 parse_args!(context, "char", args, 1, [
391 0, n: ty!(number) => Val::Num;391 0, n: ty!(number) => Val::Num;
392 ], {392 ], {
400400
401fn builtin_encode_utf8(401fn builtin_encode_utf8(
402 context: Context,402 context: Context,
403 _loc: &Option<ExprLocation>,403 _loc: Option<&ExprLocation>,
404 args: &ArgsDesc,404 args: &ArgsDesc,
405) -> Result<Val> {405) -> Result<Val> {
406 parse_args!(context, "encodeUTF8", args, 1, [406 parse_args!(context, "encodeUTF8", args, 1, [
410 })410 })
411}411}
412412
413fn builtin_md5(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {413fn builtin_md5(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
414 parse_args!(context, "md5", args, 1, [414 parse_args!(context, "md5", args, 1, [
415 0, str: ty!(string) => Val::Str;415 0, str: ty!(string) => Val::Str;
416 ], {416 ], {
417 Ok(Val::Str(format!("{:x}", md5::compute(&str.as_bytes())).into()))417 Ok(Val::Str(format!("{:x}", md5::compute(&str.as_bytes())).into()))
418 })418 })
419}419}
420420
421fn builtin_trace(context: Context, loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {421fn builtin_trace(context: Context, loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
422 parse_args!(context, "trace", args, 2, [422 parse_args!(context, "trace", args, 2, [
423 0, str: ty!(string) => Val::Str;423 0, str: ty!(string) => Val::Str;
424 1, rest: ty!(any);424 1, rest: ty!(any);
435 })435 })
436}436}
437437
438fn builtin_base64(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {438fn builtin_base64(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
439 parse_args!(context, "base64", args, 1, [439 parse_args!(context, "base64", args, 1, [
440 0, input: ty!((string | (Array<number>)));440 0, input: ty!((string | (Array<number>)));
441 ], {441 ], {
453 })453 })
454}454}
455455
456fn builtin_join(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {456fn builtin_join(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
457 parse_args!(context, "join", args, 2, [457 parse_args!(context, "join", args, 2, [
458 0, sep: ty!((string | array));458 0, sep: ty!((string | array));
459 1, arr: ty!(array) => Val::Arr;459 1, arr: ty!(array) => Val::Arr;
513// faster513// faster
514fn builtin_escape_string_json(514fn builtin_escape_string_json(
515 context: Context,515 context: Context,
516 _loc: &Option<ExprLocation>,516 _loc: Option<&ExprLocation>,
517 args: &ArgsDesc,517 args: &ArgsDesc,
518) -> Result<Val> {518) -> Result<Val> {
519 parse_args!(context, "escapeStringJson", args, 1, [519 parse_args!(context, "escapeStringJson", args, 1, [
526// faster526// faster
527fn builtin_manifest_json_ex(527fn builtin_manifest_json_ex(
528 context: Context,528 context: Context,
529 _loc: &Option<ExprLocation>,529 _loc: Option<&ExprLocation>,
530 args: &ArgsDesc,530 args: &ArgsDesc,
531) -> Result<Val> {531) -> Result<Val> {
532 parse_args!(context, "manifestJsonEx", args, 2, [532 parse_args!(context, "manifestJsonEx", args, 2, [
541}541}
542542
543// faster543// faster
544fn builtin_reverse(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {544fn builtin_reverse(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
545 parse_args!(context, "reverse", args, 1, [545 parse_args!(context, "reverse", args, 1, [
546 0, value: ty!(array) => Val::Arr;546 0, value: ty!(array) => Val::Arr;
547 ], {547 ], {
548 Ok(Val::Arr(value.reversed()))548 Ok(Val::Arr(value.reversed()))
549 })549 })
550}550}
551551
552fn builtin_id(context: Context, _loc: &Option<ExprLocation>, args: &ArgsDesc) -> Result<Val> {552fn builtin_id(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
553 parse_args!(context, "id", args, 1, [553 parse_args!(context, "id", args, 1, [
554 0, v: ty!(any);554 0, v: ty!(any);
555 ], {555 ], {
560// faster560// faster
561fn builtin_str_replace(561fn builtin_str_replace(
562 context: Context,562 context: Context,
563 _loc: &Option<ExprLocation>,563 _loc: Option<&ExprLocation>,
564 args: &ArgsDesc,564 args: &ArgsDesc,
565) -> Result<Val> {565) -> Result<Val> {
566 parse_args!(context, "strReplace", args, 3, [566 parse_args!(context, "strReplace", args, 3, [
583 })583 })
584}584}
585585
586#[allow(clippy::cognitive_complexity)]
587pub fn call_builtin(586pub fn call_builtin(
588 context: Context,587 context: Context,
589 loc: &Option<ExprLocation>,588 loc: Option<&ExprLocation>,
590 name: &str,589 name: &str,
591 args: &ArgsDesc,590 args: &ArgsDesc,
592) -> Result<Val> {591) -> Result<Val> {
modifiedcrates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/evaluate.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate.rs
@@ -385,7 +385,7 @@
 	context: Context,
 	value: &LocExpr,
 	args: &ArgsDesc,
-	loc: &Option<ExprLocation>,
+	loc: Option<&ExprLocation>,
 	tailstrict: bool,
 ) -> Result<Val> {
 	let value = evaluate(context.clone(), value)?;
@@ -430,7 +430,7 @@
 		BinaryOp(v1, o, v2) => evaluate_binary_op_special(context, v1, *o, v2)?,
 		UnaryOp(o, v) => evaluate_unary_op(*o, &evaluate(context, v)?)?,
 		Var(name) => push(
-			loc,
+			loc.as_ref(),
 			|| format!("variable <{}>", name),
 			|| Ok(context.binding(name.clone())?.evaluate()?),
 		)?,
@@ -448,7 +448,7 @@
 				(Val::Obj(v), Val::Str(s)) => {
 					let sn = s.clone();
 					push(
-						loc,
+						loc.as_ref(),
 						|| format!("field <{}> access", sn),
 						|| {
 							if let Some(v) = v.get(s.clone())? {
@@ -540,14 +540,14 @@
 			&evaluate(context.clone(), s)?,
 			&Val::Obj(evaluate_object(context, t)?),
 		)?,
-		Apply(value, args, tailstrict) => evaluate_apply(context, value, args, loc, *tailstrict)?,
+		Apply(value, args, tailstrict) => evaluate_apply(context, value, args, loc.as_ref(), *tailstrict)?,
 		Function(params, body) => {
 			evaluate_method(context, "anonymous".into(), params.clone(), body.clone())
 		}
 		Intrinsic(name) => Val::Func(Rc::new(FuncVal::Intrinsic(name.clone()))),
 		AssertExpr(AssertStmt(value, msg), returned) => {
 			let assertion_result = push(
-				&value.1,
+				value.1.as_ref(),
 				|| "assertion condition".to_owned(),
 				|| {
 					evaluate(context.clone(), value)?
@@ -558,7 +558,7 @@
 				evaluate(context, returned)?
 			} else {
 				push(
-					&value.1,
+					value.1.as_ref(),
 					|| "assertion failure".to_owned(),
 					|| {
 						if let Some(msg) = msg {
@@ -571,7 +571,7 @@
 			}
 		}
 		ErrorStmt(e) => push(
-			loc,
+			loc.as_ref(),
 			|| "error statement".to_owned(),
 			|| {
 				throw!(RuntimeError(
@@ -585,7 +585,7 @@
 			cond_else,
 		} => {
 			if push(
-				loc,
+				loc.as_ref(),
 				|| "if condition".to_owned(),
 				|| evaluate(context.clone(), &cond.0)?.try_cast_bool("in if condition"),
 			)? {
@@ -605,7 +605,7 @@
 			let import_location = Rc::make_mut(&mut tmp);
 			import_location.pop();
 			push(
-				loc,
+				loc.as_ref(),
 				|| format!("import {:?}", path),
 				|| with_state(|s| s.import_file(import_location, path)),
 			)?
modifiedcrates/jrsonnet-evaluator/src/function.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/function.rs
+++ b/crates/jrsonnet-evaluator/src/function.rs
@@ -160,7 +160,7 @@
 					throw!(IntrinsicArgumentReorderingIsNotSupportedYet);
 				}
 			}
-			let $name = push(&None, || format!("evaluating argument"), || {
+			let $name = push(None, || format!("evaluating argument"), || {
 				let value = evaluate($ctx.clone(), &$name.1)?;
 				$ty.check(&value)?;
 				Ok(value)
modifiedcrates/jrsonnet-evaluator/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/lib.rs
+++ b/crates/jrsonnet-evaluator/src/lib.rs
@@ -128,7 +128,7 @@
 	EVAL_STATE.with(|s| f(s.borrow().as_ref().unwrap()))
 }
 pub(crate) fn push<T>(
-	e: &Option<ExprLocation>,
+	e: Option<&ExprLocation>,
 	frame_desc: impl FnOnce() -> String,
 	f: impl FnOnce() -> Result<T>,
 ) -> Result<T> {
modifiedcrates/jrsonnet-evaluator/src/typed.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/typed.rs
+++ b/crates/jrsonnet-evaluator/src/typed.rs
@@ -78,7 +78,7 @@
 }
 
 fn push_type(
-	location: &Option<ExprLocation>,
+	location: Option<&ExprLocation>,
 	error_reason: impl Fn() -> String,
 	path: impl Fn() -> ValuePathItem,
 	item: impl Fn() -> Result<()>,
@@ -162,7 +162,7 @@
 				Val::Arr(a) => {
 					for (i, item) in a.iter().enumerate() {
 						push_type(
-							&None,
+							None,
 							|| format!("array index {}", i),
 							|| ValuePathItem::Index(i as u64),
 							|| Ok(elem_type.check(&item.clone()?)?),
@@ -176,7 +176,7 @@
 				Val::Arr(a) => {
 					for (i, item) in a.iter().enumerate() {
 						push_type(
-							&None,
+							None,
 							|| format!("array index {}", i),
 							|| ValuePathItem::Index(i as u64),
 							|| Ok(elem_type.check(&item.clone()?)?),
@@ -191,7 +191,7 @@
 					for (k, v) in elems.iter() {
 						if let Some(got_v) = obj.get((*k).into())? {
 							push_type(
-								&None,
+								None,
 								|| format!("property {}", k),
 								|| ValuePathItem::Field((*k).into()),
 								|| v.check(&got_v),
modifiedcrates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/val.rs
+++ b/crates/jrsonnet-evaluator/src/val.rs
@@ -102,7 +102,7 @@
 	pub fn evaluate(
 		&self,
 		call_ctx: Context,
-		loc: &Option<ExprLocation>,
+		loc: Option<&ExprLocation>,
 		args: &ArgsDesc,
 		tailstrict: bool,
 	) -> Result<Val> {