This commit is contained in:
nub31
2025-07-05 16:25:45 +02:00
parent 5c7e12feeb
commit 5246e54ac9
7 changed files with 99 additions and 256 deletions

View File

@@ -23,34 +23,34 @@ public static class Binder
_variables = [];
_funcReturnType = null;
var definitions = new List<BoundDefinitionNode>();
var definitions = new List<BoundTopLevelNode>();
foreach (var definition in syntaxTree.Definitions)
foreach (var topLevel in syntaxTree.TopLevelNodes)
{
definitions.Add(BindDefinition(definition));
definitions.Add(BindTopLevel(topLevel));
}
diagnostics = [];
return new BoundSyntaxTree(syntaxTree.Namespace, definitions);
}
private static BoundDefinitionNode BindDefinition(DefinitionNode node)
private static BoundTopLevelNode BindTopLevel(TopLevelNode node)
{
return node switch
{
ExternFuncDefinitionNode definition => BindExternFuncDefinition(definition),
TraitImplementationDefinitionNode definition => BindTraitImplementation(definition),
TraitDefinitionNode definition => BindTraitDefinition(definition),
LocalFuncDefinitionNode definition => BindLocalFuncDefinition(definition),
StructDefinitionNode definition => BindStruct(definition),
ExternFuncNode definition => BindExternFuncDefinition(definition),
TraitImplNode definition => BindTraitImplementation(definition),
TraitNode definition => BindTraitDefinition(definition),
LocalFuncNode definition => BindLocalFuncDefinition(definition),
StructNode definition => BindStruct(definition),
_ => throw new ArgumentOutOfRangeException(nameof(node))
};
}
private static BoundTraitImplementationDefinitionNode BindTraitImplementation(TraitImplementationDefinitionNode node)
private static BoundTraitImplNode BindTraitImplementation(TraitImplNode node)
{
_variables.Clear();
var functions = new List<BoundImplementationFuncNode>();
var functions = new List<BoundTraitFuncImplNode>();
foreach (var function in node.Functions)
{
@@ -59,25 +59,25 @@ public static class Binder
_variables[parameter.Name] = parameter.Type;
}
functions.Add(new BoundImplementationFuncNode(function.Tokens, function.Name, function.Parameters, function.ReturnType, BindBlock(function.Body)));
functions.Add(new BoundTraitFuncImplNode(function.Tokens, function.Name, function.Parameters, function.ReturnType, BindBlock(function.Body)));
}
return new BoundTraitImplementationDefinitionNode(node.Tokens, node.Namespace, node.TraitType, node.ForType, functions);
return new BoundTraitImplNode(node.Tokens, node.Namespace, node.TraitType, node.ForType, functions);
}
private static BoundTraitDefinitionNode BindTraitDefinition(TraitDefinitionNode node)
private static BoundTraitNode BindTraitDefinition(TraitNode node)
{
var functions = new List<BountTraitFunc>();
var functions = new List<BoundTraitFuncNode>();
foreach (var func in node.Functions)
{
functions.Add(new BountTraitFunc(func.Name, func.Parameters, func.ReturnType));
functions.Add(new BoundTraitFuncNode(node.Tokens, func.Name, func.Parameters, func.ReturnType));
}
return new BoundTraitDefinitionNode(node.Tokens, node.Namespace, node.Name, functions);
return new BoundTraitNode(node.Tokens, node.Namespace, node.Name, functions);
}
private static BoundStructDefinitionNode BindStruct(StructDefinitionNode node)
private static BoundStructNode BindStruct(StructNode node)
{
var defOpt = _definitionTable.LookupStruct(node.Namespace, node.Name);
if (!defOpt.TryGetValue(out var definition))
@@ -85,7 +85,7 @@ public static class Binder
throw new NotImplementedException("Diagnostics not implemented");
}
var structFields = new List<BoundStructField>();
var structFields = new List<BoundStructFieldNode>();
foreach (var structField in node.Fields)
{
@@ -102,18 +102,18 @@ public static class Binder
value = BindExpression(structField.Value.Value, definitionField.Type);
}
structFields.Add(new BoundStructField(structField.Name, structField.Type, value));
structFields.Add(new BoundStructFieldNode(structField.Tokens, structField.Name, structField.Type, value));
}
return new BoundStructDefinitionNode(node.Tokens, node.Namespace, node.Name, structFields);
return new BoundStructNode(node.Tokens, node.Namespace, node.Name, structFields);
}
private static BoundExternFuncDefinitionNode BindExternFuncDefinition(ExternFuncDefinitionNode node)
private static BoundExternFuncNode BindExternFuncDefinition(ExternFuncNode node)
{
return new BoundExternFuncDefinitionNode(node.Tokens, node.Namespace, node.Name, node.CallName, node.Parameters, node.ReturnType);
return new BoundExternFuncNode(node.Tokens, node.Namespace, node.Name, node.CallName, node.Parameters, node.ReturnType);
}
private static BoundLocalFuncDefinitionNode BindLocalFuncDefinition(LocalFuncDefinitionNode node)
private static BoundLocalFuncNode BindLocalFuncDefinition(LocalFuncNode node)
{
_variables.Clear();
_funcReturnType = node.ReturnType;
@@ -125,7 +125,7 @@ public static class Binder
var body = BindBlock(node.Body);
return new BoundLocalFuncDefinitionNode(node.Tokens, node.Namespace, node.Name, node.Parameters, body, node.ReturnType, node.Exported);
return new BoundLocalFuncNode(node.Tokens, node.Namespace, node.Name, node.Parameters, body, node.ReturnType, node.Exported);
}
private static BoundBlock BindBlock(BlockNode node)