zclsyntax: evaluation of relative traversal and index nodes
This commit is contained in:
parent
b604827bb2
commit
ace387f5f9
@ -83,7 +83,10 @@ func (e *RelativeTraversalExpr) walkChildNodes(w internalWalkFunc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (e *RelativeTraversalExpr) Value(ctx *zcl.EvalContext) (cty.Value, zcl.Diagnostics) {
|
func (e *RelativeTraversalExpr) Value(ctx *zcl.EvalContext) (cty.Value, zcl.Diagnostics) {
|
||||||
panic("RelativeTraversalExpr.Value not yet implemented")
|
src, diags := e.Source.Value(ctx)
|
||||||
|
ret, travDiags := e.Traversal.TraverseRel(src)
|
||||||
|
diags = append(diags, travDiags...)
|
||||||
|
return ret, diags
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *RelativeTraversalExpr) Range() zcl.Range {
|
func (e *RelativeTraversalExpr) Range() zcl.Range {
|
||||||
@ -413,7 +416,13 @@ func (e *IndexExpr) walkChildNodes(w internalWalkFunc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (e *IndexExpr) Value(ctx *zcl.EvalContext) (cty.Value, zcl.Diagnostics) {
|
func (e *IndexExpr) Value(ctx *zcl.EvalContext) (cty.Value, zcl.Diagnostics) {
|
||||||
panic("IndexExpr.Value not yet implemented")
|
var diags zcl.Diagnostics
|
||||||
|
coll, collDiags := e.Collection.Value(ctx)
|
||||||
|
key, keyDiags := e.Key.Value(ctx)
|
||||||
|
diags = append(diags, collDiags...)
|
||||||
|
diags = append(diags, keyDiags...)
|
||||||
|
|
||||||
|
return zcl.Index(coll, key, &e.SrcRange)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *IndexExpr) Range() zcl.Range {
|
func (e *IndexExpr) Range() zcl.Range {
|
||||||
|
@ -272,6 +272,45 @@ upper(
|
|||||||
}),
|
}),
|
||||||
0,
|
0,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
`["hello"][0]`,
|
||||||
|
nil,
|
||||||
|
cty.StringVal("hello"),
|
||||||
|
0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
`[][0]`,
|
||||||
|
nil,
|
||||||
|
cty.DynamicVal,
|
||||||
|
1, // invalid index
|
||||||
|
},
|
||||||
|
{
|
||||||
|
`["hello"][negate(0)]`,
|
||||||
|
&zcl.EvalContext{
|
||||||
|
Functions: map[string]function.Function{
|
||||||
|
"negate": stdlib.NegateFunc,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cty.StringVal("hello"),
|
||||||
|
0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
`[][negate(0)]`,
|
||||||
|
&zcl.EvalContext{
|
||||||
|
Functions: map[string]function.Function{
|
||||||
|
"negate": stdlib.NegateFunc,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cty.DynamicVal,
|
||||||
|
1, // invalid index
|
||||||
|
},
|
||||||
|
{
|
||||||
|
`["hello"]["0"]`, // key gets converted to number
|
||||||
|
nil,
|
||||||
|
cty.StringVal("hello"),
|
||||||
|
0,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
Loading…
Reference in New Issue
Block a user