25 lines
820 B
C#
25 lines
820 B
C#
|
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);
|
||
|
};
|