//TODO: Добавление уровня - неправильный путь борьбы с рекурсивными типами, но пока ... //TODO: А еще я похоже "напортачил" с вариантом (растущих) последовательностей ... public object ToPObject(int level) { if (level < 0) { return(null); } switch (this.vid) { case PTypeEnumeration.fstring: { return(new object[] { PType.ToInt(this.vid), ((PTypeFString)this).Size }); } case PTypeEnumeration.record: { PTypeRecord ptr = (PTypeRecord)this; var query = ptr.Fields.Select(pair => new object[] { pair.Name, pair.Type.ToPObject(level - 1) }).ToArray(); return(new object[] { PType.ToInt(this.vid), query }); } case PTypeEnumeration.sequence: { PTypeSequence pts = (PTypeSequence)this; return(new object[] { PType.ToInt(this.vid), new object[] { new object[] { "growing", new object[] { PType.ToInt(PTypeEnumeration.boolean), null } }, new object[] { "Type", pts.ElementType.ToPObject(level - 1) } } }); } case PTypeEnumeration.union: { PTypeUnion ptu = (PTypeUnion)this; var query = ptu.Variants.Select(pair => new object[] { pair.Name, pair.Type.ToPObject(level - 1) }).ToArray(); return(new object[] { PType.ToInt(this.vid), query }); } default: return(new object[] { PType.ToInt(this.vid), null }); } }