public SerializedType VisitEnum(EnumeratorTypeSpec e) { if (e.Tag == null || !symbolTable.EnumsSeen.TryGetValue(e.Tag, out var _)) { var en = new SerializedEnumType { Name = e.Tag ?? string.Format("enum_{0}", symbolTable.EnumsSeen.Count) }; symbolTable.EnumsSeen.Add(en.Name, en); var enumEvaluator = new EnumEvaluator(new CConstantEvaluator(platform, symbolTable.Constants)); var listMembers = new List <SerializedEnumValue>(); foreach (var item in e.Enums) { var ee = new SerializedEnumValue { Name = item.Name, Value = enumEvaluator.GetValue(item.Value), }; symbolTable.Constants.Add(ee.Name, ee.Value); listMembers.Add(ee); } en.Values = listMembers.ToArray(); symbolTable.Types.Add(en); return(new SerializedEnumType { Name = en.Name }); } else { return(new SerializedEnumType { Name = e.Tag }); } }
public SerializedType VisitEnum(EnumeratorTypeSpec e) { SerializedEnumType en; if (e.Tag == null || !converter.EnumsSeen.TryGetValue(e.Tag, out en)) { en = new SerializedEnumType { Name = e.Tag != null ? e.Tag : string.Format("enum_{0}", converter.EnumsSeen.Count) }; converter.EnumsSeen.Add(en.Name, en); var enumEvaluator = new EnumEvaluator(new CConstantEvaluator(converter.Constants)); var listMembers = new List <SerializedEnumValue>(); foreach (var item in e.Enums) { var ee = new SerializedEnumValue { Name = item.Name, Value = enumEvaluator.GetValue(item.Value), }; converter.Constants.Add(ee.Name, ee.Value); listMembers.Add(ee); } en.Values = listMembers.ToArray(); converter.Types.Add(en); en = new SerializedEnumType { Name = en.Name }; } else { en = new SerializedEnumType { Name = e.Tag }; } return(en); }