using NubLang.Parsing.Syntax; namespace NubLang.Modules; public class Module { private readonly List _structs = []; private readonly List _structTemplates = []; private readonly List _functions = []; public void RegisterStruct(bool exported, string name, List fields, List functions) { _structs.Add(new ModuleStruct(exported, name, fields, functions)); } public void RegisterStructTemplate(StructTemplateSyntax structTemplate) { _structTemplates.Add(structTemplate); } public void RegisterFunction(bool exported, string name, string? externSymbol, List parameters, TypeSyntax returnType) { _functions.Add(new ModuleFunction(exported, name, externSymbol, parameters, returnType)); } public List StructTypes(bool includePrivate) { return _structs.Where(x => x.Exported || includePrivate).ToList(); } public List Functions(bool includePrivate) { return _functions.Where(x => x.Exported || includePrivate).ToList(); } } public record ModuleStructField(string Name, TypeSyntax Type, bool HasDefaultValue); public record ModuleStructFunction(string Name, string? Hook, List Parameters, TypeSyntax ReturnType); public record ModuleStruct(bool Exported, string Name, List Fields, List Functions); public record ModuleFunctionParameter(string Name, TypeSyntax Type); public record ModuleFunction(bool Exported, string Name, string? ExternSymbol, List Parameters, TypeSyntax ReturnType);