Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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));
        }