meowlang/typechecker/types/StructTypeDescription.cs

25 lines
820 B
C#
Raw Normal View History

namespace meowlang.typechecker;
public record StructTypeDescription : TypeDescription
{
private readonly List<(string Name, TypeId Type)> _members;
private readonly Dictionary<string, TypeId> _memberMap;
public Dictionary<string, TypeId> DebugGetMembers => _memberMap;
public StructTypeDescription(List<(string Name, TypeId Type)> members)
{
_members = members;
_memberMap = members.ToDictionary(x => x.Name, x => x.Type);
}
public TypeId GetTypeForMember(string name)
{
return _memberMap.TryGetValue(name, out var value) ? value : throw new UnknownStructMemberException(name);
}
public IReadOnlyList<string> MemberNames => _members.Select(x => x.Name).ToList();
public bool HasMember(string name) => _memberMap.ContainsKey(name);
};