public override IPExpr VisitNamedTupleBody(PParser.NamedTupleBodyContext context) { if (context._values.Count > 8) { throw handler.TupleSizeMoreThanEight(context); } var fields = context._values.Select(Visit).ToArray(); var entries = new NamedTupleEntry[fields.Length]; var names = new HashSet <string>(); for (var i = 0; i < fields.Length; i++) { var entryName = context._names[i].GetText(); if (names.Contains(entryName)) { throw handler.DuplicateNamedTupleEntry(context._names[i], entryName); } names.Add(entryName); entries[i] = new NamedTupleEntry { Name = entryName, FieldNo = i, Type = fields[i].Type }; } var type = new NamedTupleType(entries); return(new NamedTupleExpr(context, fields, type)); }
public override IPExpr VisitNamedTupleBody(PParser.NamedTupleBodyContext context) { var fields = context._values.Select(Visit).ToArray(); var entries = context._names.Zip(fields, (fieldName, value) => new NamedTupleEntry { Name = fieldName.GetText(), Type = value.Type }) .ToArray(); var type = new NamedTupleType(entries); return(new NamedTupleExpr(context, fields, type)); }