mirror of
https://github.com/google/go-jsonnet.git
synced 2025-08-07 06:47:16 +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
|
return nil, err
|
||||||
}
|
}
|
||||||
h := withHiddenFromBool(includeHidden.value)
|
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
|
return makeValueBoolean(hasField), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -585,7 +585,7 @@ func (i *interpreter) rawevaluate(a ast.Node, tc tailCallStatus) (value, error)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
hasField := objectHasField(i.stack.getSelfBinding().super(), indexStr.getGoString(), withHidden)
|
hasField := objectHasField(i.stack.getSelfBinding().super(), indexStr.getGoString())
|
||||||
return makeValueBoolean(hasField), nil
|
return makeValueBoolean(hasField), nil
|
||||||
|
|
||||||
case *ast.Function:
|
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",
|
"format": "test blah 42",
|
||||||
"get": [
|
"get": [
|
||||||
17,
|
17,
|
||||||
|
42,
|
||||||
|
18,
|
||||||
42
|
42
|
||||||
],
|
],
|
||||||
"isArray": true,
|
"isArray": true,
|
||||||
|
2
testdata/stdlib_smoke_test.jsonnet
vendored
2
testdata/stdlib_smoke_test.jsonnet
vendored
@ -26,6 +26,8 @@
|
|||||||
get: [
|
get: [
|
||||||
std.get(o={a:: 17}, f="a"),
|
std.get(o={a:: 17}, f="a"),
|
||||||
std.get(o={a:: 17}, f="a", default=42, inc_hidden=false),
|
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
|
// isSomething
|
||||||
|
@ -150,7 +150,7 @@ func (f *plusSuperUnboundField) evaluate(i *interpreter, sb selfBinding, origBin
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !objectHasField(sb.super(), fieldName, withHidden) {
|
if !objectHasField(sb.super(), fieldName) {
|
||||||
return right, nil
|
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
|
return val, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func objectHasField(sb selfBinding, fieldName string, h hidden) bool {
|
func objectHasField(sb selfBinding, fieldName string) bool {
|
||||||
found, field, _, _, _ := findField(sb.self.uncached, sb.superDepth, fieldName)
|
found, _, _, _, _ := findField(sb.self.uncached, sb.superDepth, fieldName)
|
||||||
if !found || (h == withoutHidden && field.hide == ast.ObjectFieldHidden) {
|
return found
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type fieldHideMap map[string]ast.ObjectFieldHide
|
type fieldHideMap map[string]ast.ObjectFieldHide
|
||||||
|
Loading…
Reference in New Issue
Block a user