mirror of
https://github.com/google/go-jsonnet.git
synced 2026-05-05 20:16:12 +02:00
Perform lookups from obj locals with right sb
When object fields are evaluated the locals from the object are added to the environment. These locals should have the same environment as the field, in particular they should be at the same inheritance level. Instead they were evaluated as if they were on the level from which original field lookup was performed, resulting in subtle and hard to debug issues.
This commit is contained in:
parent
83ed0b939f
commit
591b119591
3
testdata/obj_local_right_level.golden
vendored
Normal file
3
testdata/obj_local_right_level.golden
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"bar": 1
|
||||
}
|
||||
6
testdata/obj_local_right_level.jsonnet
vendored
Normal file
6
testdata/obj_local_right_level.jsonnet
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
bar: 0
|
||||
} + {
|
||||
local foo = super.bar + 1,
|
||||
bar: foo
|
||||
} + {} + {} + {}
|
||||
4
testdata/obj_local_right_level2.golden
vendored
Normal file
4
testdata/obj_local_right_level2.golden
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"answer": "right",
|
||||
"bar": "right"
|
||||
}
|
||||
7
testdata/obj_local_right_level2.jsonnet
vendored
Normal file
7
testdata/obj_local_right_level2.jsonnet
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
local foo = self.bar,
|
||||
bar: "wrong",
|
||||
answer: foo
|
||||
} + {
|
||||
bar: "right"
|
||||
}
|
||||
4
testdata/obj_local_right_level3.golden
vendored
Normal file
4
testdata/obj_local_right_level3.golden
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"answer": "right",
|
||||
"bar": "wrong2"
|
||||
}
|
||||
9
testdata/obj_local_right_level3.jsonnet
vendored
Normal file
9
testdata/obj_local_right_level3.jsonnet
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
bar: "right",
|
||||
} + {
|
||||
local foo = super.bar,
|
||||
bar: "wrong1",
|
||||
answer: foo,
|
||||
} + {
|
||||
bar: "wrong2"
|
||||
}
|
||||
2
value.go
2
value.go
@ -648,7 +648,7 @@ func objectIndex(i *interpreter, trace TraceElement, sb selfBinding, fieldName s
|
||||
}
|
||||
|
||||
fieldSelfBinding := selfBinding{self: sb.self, superDepth: foundAt}
|
||||
fieldUpValues := prepareFieldUpvalues(sb, upValues, locals)
|
||||
fieldUpValues := prepareFieldUpvalues(fieldSelfBinding, upValues, locals)
|
||||
|
||||
return field.field.evaluate(i, trace, fieldSelfBinding, fieldUpValues, fieldName)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user