meowlang/typechecker/types/StructTypeDescription.cs
Gwendolyn d6bdd08002 loooots of stuff
the typechecker project can collect all the top level types from a file, which is pretty cool I think
(except for pointers, those aren't implemented yet...)
2022-02-13 02:41:16 +01:00

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);
};