...
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user