diff --git a/sjsonnet/src/sjsonnet/Error.scala b/sjsonnet/src/sjsonnet/Error.scala index 71e0f2e2..ed25709b 100644 --- a/sjsonnet/src/sjsonnet/Error.scala +++ b/sjsonnet/src/sjsonnet/Error.scala @@ -54,7 +54,8 @@ class Error(msg: String, val stack: List[Error.Frame] = Nil, underlying: Option[ private def isApplyOrBuiltin(expr: Expr): Boolean = expr match { case _: Expr.Apply | _: Expr.Apply0 | _: Expr.Apply1 | _: Expr.Apply2 | _: Expr.Apply3 | _: Expr.ApplyBuiltin | _: Expr.ApplyBuiltin0 | _: Expr.ApplyBuiltin1 | - _: Expr.ApplyBuiltin2 | _: Expr.ApplyBuiltin3 | _: Expr.ApplyBuiltin4 => + _: Expr.ApplyBuiltin2 | _: Expr.ApplyBuiltin3 | _: Expr.ApplyBuiltin4 | _: Expr.Comp | + _: Expr.ObjBody.ObjComp => true case _ => false } diff --git a/sjsonnet/src/sjsonnet/Expr.scala b/sjsonnet/src/sjsonnet/Expr.scala index cad2092d..e0710ccf 100644 --- a/sjsonnet/src/sjsonnet/Expr.scala +++ b/sjsonnet/src/sjsonnet/Expr.scala @@ -343,6 +343,7 @@ object Expr { final case class Comp(pos: Position, value: Expr, first: ForSpec, rest: Array[CompSpec]) extends Expr { final override private[sjsonnet] def tag = ExprTags.Comp + override def exprErrorString: String = "array comprehension" } final case class ObjExtend(pos: Position, base: Expr, ext: ObjBody) extends Expr { final override private[sjsonnet] def tag = ExprTags.ObjExtend @@ -371,6 +372,7 @@ object Expr { rest: List[CompSpec]) extends ObjBody { final override private[sjsonnet] def tag = ExprTags.`ObjBody.ObjComp` + override def exprErrorString: String = "object comprehension" override def toString: String = s"ObjComp($pos, ${arrStr(preLocals)}, $key, $value, ${arrStr(postLocals)}, $first, $rest)" } diff --git a/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_empty_string.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_empty_string.jsonnet.golden index 29fc6f66..410cd8c1 100644 --- a/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_empty_string.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_empty_string.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: In comprehension, can only iterate over array, not string + at [array comprehension].(array_comp_try_iterate_over_empty_string.jsonnet:1:4) at [].(array_comp_try_iterate_over_empty_string.jsonnet:1:1) diff --git a/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_obj.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_obj.jsonnet.golden index 78e1ac3e..8b9b790b 100644 --- a/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_obj.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_obj.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: In comprehension, can only iterate over array, not object + at [array comprehension].(array_comp_try_iterate_over_obj.jsonnet:1:4) at [].(array_comp_try_iterate_over_obj.jsonnet:1:1) diff --git a/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_string.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_string.jsonnet.golden index 81ac98d5..02935da9 100644 --- a/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_string.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/array_comp_try_iterate_over_string.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: In comprehension, can only iterate over array, not string + at [array comprehension].(array_comp_try_iterate_over_string.jsonnet:1:4) at [].(array_comp_try_iterate_over_string.jsonnet:1:1) diff --git a/sjsonnet/test/resources/go_test_suite/arrcomp_if6.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/arrcomp_if6.jsonnet.golden index 88288aad..79e7448e 100644 --- a/sjsonnet/test/resources/go_test_suite/arrcomp_if6.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/arrcomp_if6.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: x + at [array comprehension].(arrcomp_if6.jsonnet:1:20) at [].(arrcomp_if6.jsonnet:1:1) diff --git a/sjsonnet/test/resources/go_test_suite/arrcomp_if7.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/arrcomp_if7.jsonnet.golden index fb967e45..923676ef 100644 --- a/sjsonnet/test/resources/go_test_suite/arrcomp_if7.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/arrcomp_if7.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: Condition must be boolean, got number + at [array comprehension].(arrcomp_if7.jsonnet:1:23) at [].(arrcomp_if7.jsonnet:1:1) diff --git a/sjsonnet/test/resources/go_test_suite/object_comp_duplicate.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/object_comp_duplicate.jsonnet.golden index a944128d..f88daa16 100644 --- a/sjsonnet/test/resources/go_test_suite/object_comp_duplicate.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/object_comp_duplicate.jsonnet.golden @@ -1,3 +1,3 @@ -sjsonnet.Error: Duplicate key x in evaluated object comprehension. +sjsonnet.Error: [object comprehension] Duplicate key x in evaluated object comprehension. at [].(object_comp_duplicate.jsonnet:1:1) diff --git a/sjsonnet/test/resources/go_test_suite/object_comp_err_index.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/object_comp_err_index.jsonnet.golden index 6736b138..e4f377c7 100644 --- a/sjsonnet/test/resources/go_test_suite/object_comp_err_index.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/object_comp_err_index.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: xxx + at [object comprehension].(object_comp_err_index.jsonnet:1:4) at [].(object_comp_err_index.jsonnet:1:1) diff --git a/sjsonnet/test/resources/go_test_suite/object_comp_int_index.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/object_comp_int_index.jsonnet.golden index cdf28e06..0a733a79 100644 --- a/sjsonnet/test/resources/go_test_suite/object_comp_int_index.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/object_comp_int_index.jsonnet.golden @@ -1,3 +1,3 @@ -sjsonnet.Error: Field name must be string or null, not number +sjsonnet.Error: [object comprehension] Field name must be string or null, not number at [].(object_comp_int_index.jsonnet:1:1) diff --git a/sjsonnet/test/resources/go_test_suite/object_comp_try_iterate_over_obj.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/object_comp_try_iterate_over_obj.jsonnet.golden index 42939c2c..7edbe94e 100644 --- a/sjsonnet/test/resources/go_test_suite/object_comp_try_iterate_over_obj.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/object_comp_try_iterate_over_obj.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: In comprehension, can only iterate over array, not object + at [object comprehension].(object_comp_try_iterate_over_obj.jsonnet:1:10) at [].(object_comp_try_iterate_over_obj.jsonnet:1:1) diff --git a/sjsonnet/test/resources/go_test_suite/object_comp_try_iterate_over_string.jsonnet.golden b/sjsonnet/test/resources/go_test_suite/object_comp_try_iterate_over_string.jsonnet.golden index 8530c9ed..3bd42f25 100644 --- a/sjsonnet/test/resources/go_test_suite/object_comp_try_iterate_over_string.jsonnet.golden +++ b/sjsonnet/test/resources/go_test_suite/object_comp_try_iterate_over_string.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: In comprehension, can only iterate over array, not string + at [object comprehension].(object_comp_try_iterate_over_string.jsonnet:1:10) at [].(object_comp_try_iterate_over_string.jsonnet:1:1) diff --git a/sjsonnet/test/resources/test_suite/error.comprehension_spec_object.jsonnet.golden b/sjsonnet/test/resources/test_suite/error.comprehension_spec_object.jsonnet.golden index 31946dc8..e7e41956 100644 --- a/sjsonnet/test/resources/test_suite/error.comprehension_spec_object.jsonnet.golden +++ b/sjsonnet/test/resources/test_suite/error.comprehension_spec_object.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: In comprehension, can only iterate over array, not object + at [array comprehension].(error.comprehension_spec_object.jsonnet:17:4) at [].(error.comprehension_spec_object.jsonnet:17:1) diff --git a/sjsonnet/test/resources/test_suite/error.comprehension_spec_object2.jsonnet.golden b/sjsonnet/test/resources/test_suite/error.comprehension_spec_object2.jsonnet.golden index 59e68ab6..693f651f 100644 --- a/sjsonnet/test/resources/test_suite/error.comprehension_spec_object2.jsonnet.golden +++ b/sjsonnet/test/resources/test_suite/error.comprehension_spec_object2.jsonnet.golden @@ -1,3 +1,4 @@ sjsonnet.Error: In comprehension, can only iterate over array, not object + at [object comprehension].(error.comprehension_spec_object2.jsonnet:17:13) at [].(error.comprehension_spec_object2.jsonnet:17:1) diff --git a/sjsonnet/test/src/sjsonnet/EvaluatorTests.scala b/sjsonnet/test/src/sjsonnet/EvaluatorTests.scala index 6e692d73..8a58d070 100644 --- a/sjsonnet/test/src/sjsonnet/EvaluatorTests.scala +++ b/sjsonnet/test/src/sjsonnet/EvaluatorTests.scala @@ -215,7 +215,7 @@ object EvaluatorTests extends TestSuite { ) ==> ujson.Obj("x" -> ujson.Num(3)) // Regression test for a bug in handling of non-string field names: evalErr("{[k]: k for k in [1]}", useNewEvaluator = useNewEvaluator) ==> - """sjsonnet.Error: Field name must be string or null, not number + """sjsonnet.Error: [object comprehension] Field name must be string or null, not number |at [].(:1:1)""".stripMargin // Basic function support: eval( @@ -642,7 +642,7 @@ object EvaluatorTests extends TestSuite { """{ [x]: x for x in ["A", "A"]}""", useNewEvaluator = useNewEvaluator ) ==> - """sjsonnet.Error: Duplicate key A in evaluated object comprehension. + """sjsonnet.Error: [object comprehension] Duplicate key A in evaluated object comprehension. |at [].(:1:1)""".stripMargin } test("givenDuplicateFieldsInIndirectListComprehension_expectFailure") { @@ -652,7 +652,7 @@ object EvaluatorTests extends TestSuite { |{ [x.a]: x for x in [y, z]}""".stripMargin, useNewEvaluator = useNewEvaluator ) ==> - """sjsonnet.Error: Duplicate key A in evaluated object comprehension. + """sjsonnet.Error: [object comprehension] Duplicate key A in evaluated object comprehension. |at [].(:1:7)""".stripMargin } test("functionEqualsNull") {