...
This commit is contained in:
@@ -24,11 +24,16 @@ public class ModuleGraph(Dictionary<string, ModuleGraph.Module> modules)
|
||||
private readonly Dictionary<string, NubType> customTypes = new();
|
||||
private readonly Dictionary<string, NubType> identifierTypes = new();
|
||||
|
||||
public List<NubType> GetCustomTypes()
|
||||
public IReadOnlyList<NubType> GetCustomTypes()
|
||||
{
|
||||
return customTypes.Values.ToList();
|
||||
}
|
||||
|
||||
public IReadOnlyDictionary<string, NubType> GetIdentifierTypes()
|
||||
{
|
||||
return identifierTypes;
|
||||
}
|
||||
|
||||
public bool TryResolveCustomType(string name, [NotNullWhen(true)] out NubType? customType)
|
||||
{
|
||||
customType = customTypes.GetValueOrDefault(name);
|
||||
@@ -61,7 +66,7 @@ public class ModuleGraph(Dictionary<string, ModuleGraph.Module> modules)
|
||||
asts.Add(ast);
|
||||
}
|
||||
|
||||
public ModuleGraph Build(out List<Diagnostic> diagnostics)
|
||||
public ModuleGraph? Build(out List<Diagnostic> diagnostics)
|
||||
{
|
||||
diagnostics = [];
|
||||
|
||||
@@ -71,24 +76,11 @@ public class ModuleGraph(Dictionary<string, ModuleGraph.Module> modules)
|
||||
// First pass: Register modules
|
||||
foreach (var ast in asts)
|
||||
{
|
||||
var moduleDefinitions = ast.Definitions.OfType<NodeDefinitionModule>().ToList();
|
||||
|
||||
if (moduleDefinitions.Count == 0)
|
||||
diagnostics.Add(Diagnostic.Error("Missing module declaration").At(ast.FileName, 1, 1, 1).Build());
|
||||
|
||||
foreach (var extraModuleDefinition in moduleDefinitions.Skip(1))
|
||||
diagnostics.Add(Diagnostic.Warning("Duplicate module declaration will be ignored").At(ast.FileName, extraModuleDefinition).Build());
|
||||
|
||||
if (moduleDefinitions.Count >= 1)
|
||||
if (!modules.ContainsKey(ast.ModuleName.Ident))
|
||||
{
|
||||
var currentModule = moduleDefinitions[0].Name.Ident;
|
||||
|
||||
if (!modules.ContainsKey(currentModule))
|
||||
{
|
||||
var module = new Module(currentModule);
|
||||
modules.Add(currentModule, module);
|
||||
astModuleCache[ast] = module;
|
||||
}
|
||||
var module = new Module(ast.ModuleName.Ident);
|
||||
modules.Add(ast.ModuleName.Ident, module);
|
||||
astModuleCache[ast] = module;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,6 +125,9 @@ public class ModuleGraph(Dictionary<string, ModuleGraph.Module> modules)
|
||||
}
|
||||
}
|
||||
|
||||
if (diagnostics.Any(x => x.Severity == DiagnosticSeverity.Error))
|
||||
return null;
|
||||
|
||||
return new ModuleGraph(modules);
|
||||
|
||||
NubType ResolveType(NodeType node)
|
||||
|
||||
Reference in New Issue
Block a user