diff --git a/core/vm.cpp b/core/vm.cpp index 21418c475..62966e1d0 100644 --- a/core/vm.cpp +++ b/core/vm.cpp @@ -748,7 +748,7 @@ class Interpreter { } else if (auto *obj = dynamic_cast(obj_)) { for (const auto &f : obj->compValues) - r[f.first] = ObjectField::VISIBLE; + r[f.first] = ObjectField::INHERIT; } return r; } diff --git a/test_suite/object.jsonnet b/test_suite/object.jsonnet index 096bac402..5ed939600 100644 --- a/test_suite/object.jsonnet +++ b/test_suite/object.jsonnet @@ -80,6 +80,11 @@ local obj = { std.assertEqual(obj, { ["f" + x + y + z]: { x: x, y: y, z: z } for x in [1, 2, 3] for y in [1, 4, 6] if x + 2 < y for z in [true, false] }) && +// Tests for #1111 - object comprehension fields should use "inherit" visibility. +std.assertEqual(std.objectFields({ x: 1 } + { [k]: 2 for k in ['x'] }), ['x']) && +std.assertEqual(std.objectFields({ x:: 1 } + { [k]: 2 for k in ['x'] }), []) && +std.assertEqual(std.objectFields({ x::: 1 } + { [k]: 2 for k in ['x'] }), ['x']) && + std.assertEqual({ f: { foo: 7, bar: 1 } { [self.name]+: 3, name:: "foo" }, name:: "bar" }, { f: { foo: 7, bar: 4 } }) && diff --git a/test_suite/object.jsonnet.fmt.golden b/test_suite/object.jsonnet.fmt.golden index 64055f64a..85f9119b1 100644 --- a/test_suite/object.jsonnet.fmt.golden +++ b/test_suite/object.jsonnet.fmt.golden @@ -80,6 +80,11 @@ local obj = { std.assertEqual(obj, { ['f' + x + y + z]: { x: x, y: y, z: z } for x in [1, 2, 3] for y in [1, 4, 6] if x + 2 < y for z in [true, false] }) && +// Tests for #1111 - object comprehension fields should use "inherit" visibility. +std.assertEqual(std.objectFields({ x: 1 } + { [k]: 2 for k in ['x'] }), ['x']) && +std.assertEqual(std.objectFields({ x:: 1 } + { [k]: 2 for k in ['x'] }), []) && +std.assertEqual(std.objectFields({ x::: 1 } + { [k]: 2 for k in ['x'] }), ['x']) && + std.assertEqual({ f: { foo: 7, bar: 1 } { [self.name]+: 3, name:: 'foo' }, name:: 'bar' }, { f: { foo: 7, bar: 4 } }) &&