diff --git a/analyzer/literal.go b/analyzer/literal.go index c223336..c9e9104 100644 --- a/analyzer/literal.go +++ b/analyzer/literal.go @@ -54,21 +54,29 @@ func (this *Tree) analyzeLiteralArray ( entity.Expression, error, ) { - base, ok := this.reduceToBase(into).(*entity.TypeArray) - if !ok { + into = this.reduceToBase(into) + var elementType entity.Type + switch into.(type) { + case *entity.TypeArray: + into := into.(*entity.TypeArray) + if into.Length != len(literal.Elements) { + return nil, participle.Errorf ( + literal.Pos, "expected %v elements", + into.Length) + } + elementType = into.Element + + case *entity.TypeSlice: + into := into.(*entity.TypeSlice) + elementType = into.Element + default: return nil, participle.Errorf ( literal.Pos, "cannot use array literal as %v", into) } - if base.Length != len(literal.Elements) { - return nil, participle.Errorf ( - literal.Pos, "expected %v elements", - base.Length) - } - for index, element := range literal.Elements { - element, err := this.analyzeExpression(base.Element, strict, element) + element, err := this.analyzeExpression(elementType, strict, element) if err != nil { return nil, err } literal.Elements[index] = element }