mirror of
https://github.com/google/go-jsonnet.git
synced 2025-08-06 14:27:30 +02:00
Fix field visibility in objectHas for extended objects (#737)
This commit is contained in:
parent
c159b34cd2
commit
94a40b2991
@ -1224,7 +1224,10 @@ func builtinObjectHasEx(i *interpreter, objv value, fnamev value, includeHiddenV
|
||||
return nil, err
|
||||
}
|
||||
h := withHiddenFromBool(includeHidden.value)
|
||||
hasField := objectHasField(objectBinding(obj), string(fname.getRunes()), h)
|
||||
|
||||
hide, hasField := objectFieldsVisibility(obj)[string(fname.getRunes())]
|
||||
hasField = hasField && (h == withHidden || hide != ast.ObjectFieldHidden)
|
||||
|
||||
return makeValueBoolean(hasField), nil
|
||||
}
|
||||
|
||||
|
@ -585,7 +585,7 @@ func (i *interpreter) rawevaluate(a ast.Node, tc tailCallStatus) (value, error)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
hasField := objectHasField(i.stack.getSelfBinding().super(), indexStr.getGoString(), withHidden)
|
||||
hasField := objectHasField(i.stack.getSelfBinding().super(), indexStr.getGoString())
|
||||
return makeValueBoolean(hasField), nil
|
||||
|
||||
case *ast.Function:
|
||||
|
1
testdata/std.objectHasEx5.golden
vendored
Normal file
1
testdata/std.objectHasEx5.golden
vendored
Normal file
@ -0,0 +1 @@
|
||||
false
|
1
testdata/std.objectHasEx5.jsonnet
vendored
Normal file
1
testdata/std.objectHasEx5.jsonnet
vendored
Normal file
@ -0,0 +1 @@
|
||||
std.objectHasEx({"x":: null} + {"x": null}, "x", false)
|
0
testdata/std.objectHasEx5.linter.golden
vendored
Normal file
0
testdata/std.objectHasEx5.linter.golden
vendored
Normal file
2
testdata/stdlib_smoke_test.golden
vendored
2
testdata/stdlib_smoke_test.golden
vendored
@ -88,6 +88,8 @@
|
||||
"format": "test blah 42",
|
||||
"get": [
|
||||
17,
|
||||
42,
|
||||
18,
|
||||
42
|
||||
],
|
||||
"isArray": true,
|
||||
|
2
testdata/stdlib_smoke_test.jsonnet
vendored
2
testdata/stdlib_smoke_test.jsonnet
vendored
@ -26,6 +26,8 @@
|
||||
get: [
|
||||
std.get(o={a:: 17}, f="a"),
|
||||
std.get(o={a:: 17}, f="a", default=42, inc_hidden=false),
|
||||
std.get(o={a:: 17} + {a: 18}, f="a", default=42),
|
||||
std.get(o={a:: 17} + {a: 18}, f="a", default=42, inc_hidden=false),
|
||||
],
|
||||
|
||||
// isSomething
|
||||
|
@ -150,7 +150,7 @@ func (f *plusSuperUnboundField) evaluate(i *interpreter, sb selfBinding, origBin
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if !objectHasField(sb.super(), fieldName, withHidden) {
|
||||
if !objectHasField(sb.super(), fieldName) {
|
||||
return right, nil
|
||||
}
|
||||
|
||||
|
9
value.go
9
value.go
@ -730,12 +730,9 @@ func objectIndex(i *interpreter, sb selfBinding, fieldName string) (value, error
|
||||
return val, err
|
||||
}
|
||||
|
||||
func objectHasField(sb selfBinding, fieldName string, h hidden) bool {
|
||||
found, field, _, _, _ := findField(sb.self.uncached, sb.superDepth, fieldName)
|
||||
if !found || (h == withoutHidden && field.hide == ast.ObjectFieldHidden) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
func objectHasField(sb selfBinding, fieldName string) bool {
|
||||
found, _, _, _, _ := findField(sb.self.uncached, sb.superDepth, fieldName)
|
||||
return found
|
||||
}
|
||||
|
||||
type fieldHideMap map[string]ast.ObjectFieldHide
|
||||
|
Loading…
Reference in New Issue
Block a user