lang/funcs: short-circuit with unknown index and tuple collection
Since we need to know the index to know the result type for a tuple, we need a special case here to deal with that situation and return cty.DynamicVal; we can't predict the result type exactly until we know the element type.
This commit is contained in:
parent
d5d8596bb1
commit
db58b88c2d
|
@ -29,6 +29,12 @@ var ElementFunc = function.New(&function.Spec{
|
|||
case listTy.IsListType():
|
||||
return listTy.ElementType(), nil
|
||||
case listTy.IsTupleType():
|
||||
if !args[1].IsKnown() {
|
||||
// If the index isn't known yet then we can't predict the
|
||||
// result type since each tuple element can have its own type.
|
||||
return cty.DynamicPseudoType, nil
|
||||
}
|
||||
|
||||
etys := listTy.TupleElementTypes()
|
||||
var index int
|
||||
err := gocty.FromCtyValue(args[1], &index)
|
||||
|
|
|
@ -90,6 +90,24 @@ func TestElement(t *testing.T) {
|
|||
cty.NumberIntVal(2),
|
||||
cty.StringVal("hello"),
|
||||
},
|
||||
{
|
||||
cty.TupleVal([]cty.Value{
|
||||
cty.StringVal("hello"),
|
||||
cty.StringVal("bonjour"),
|
||||
}),
|
||||
cty.UnknownVal(cty.Number),
|
||||
cty.DynamicVal,
|
||||
},
|
||||
{
|
||||
cty.UnknownVal(cty.Tuple([]cty.Type{cty.String, cty.Bool})),
|
||||
cty.NumberIntVal(1),
|
||||
cty.UnknownVal(cty.Bool),
|
||||
},
|
||||
{
|
||||
cty.UnknownVal(cty.Tuple([]cty.Type{cty.String, cty.String})),
|
||||
cty.UnknownVal(cty.Number),
|
||||
cty.DynamicVal,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
|
|
Loading…
Reference in New Issue