// parentEnum is nil if not in enum func (v *TypeCheck) CheckTupleLiteral(s *SemanticAnalyzer, lit *ast.TupleLiteral) { tupleType, ok := lit.GetType().BaseType.ActualType().(ast.TupleType) if !ok { panic("Type of tuple literal was not `TupleType`") } memberTypes := tupleType.Members if len(lit.Members) != len(memberTypes) { s.Err(lit, "Invalid amount of entries in tuple") } var gcon *ast.GenericContext if lit.ParentEnumLiteral != nil { gcon = ast.NewGenericContext(lit.ParentEnumLiteral.GetType().BaseType.ActualType().(ast.EnumType).GenericParameters, lit.ParentEnumLiteral.Type.GenericArguments) } else { gcon = ast.NewGenericContext(nil, nil) } for idx, mem := range lit.Members { expectType(s, mem, gcon.Get(memberTypes[idx]), &mem) } }