...
This commit is contained in:
@@ -124,26 +124,23 @@ public static class Binder
|
||||
{
|
||||
return node switch
|
||||
{
|
||||
ArrayIndexAssignmentNode statement => BindArrayIndex(statement),
|
||||
AssignmentNode statement => BindAssignment(statement),
|
||||
BreakNode statement => BindBreak(statement),
|
||||
ContinueNode statement => BindContinue(statement),
|
||||
DereferenceAssignmentNode statement => BindDereferenceAssignment(statement),
|
||||
IfNode statement => BindIf(statement),
|
||||
MemberAssignmentNode statement => BindMemberAssignment(statement),
|
||||
ReturnNode statement => BindReturn(statement),
|
||||
StatementExpressionNode statement => BindStatementExpression(statement),
|
||||
VariableAssignmentNode statement => BindVariableAssignment(statement),
|
||||
VariableDeclarationNode statement => BindVariableDeclaration(statement),
|
||||
WhileNode statement => BindWhile(statement),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(node))
|
||||
};
|
||||
}
|
||||
|
||||
private static BoundArrayIndexAssignmentNode BindArrayIndex(ArrayIndexAssignmentNode statement)
|
||||
private static BoundStatementNode BindAssignment(AssignmentNode statement)
|
||||
{
|
||||
var boundArrayIndex = BindArrayIndexAccess(statement.ArrayIndexAccess);
|
||||
var elementType = ((NubArrayType)boundArrayIndex.Type).ElementType;
|
||||
return new BoundArrayIndexAssignmentNode(statement.Tokens, boundArrayIndex, BindExpression(statement.Value, elementType));
|
||||
var expression = BindExpression(statement.Expression);
|
||||
var value = BindExpression(statement.Value, expression.Type);
|
||||
return new BoundAssignmentNode(statement.Tokens, expression, value);
|
||||
}
|
||||
|
||||
private static BoundBreakNode BindBreak(BreakNode statement)
|
||||
@@ -156,13 +153,6 @@ public static class Binder
|
||||
return new BoundContinueNode(statement.Tokens);
|
||||
}
|
||||
|
||||
private static BoundDereferenceAssignmentNode BindDereferenceAssignment(DereferenceAssignmentNode statement)
|
||||
{
|
||||
var boundDereference = BindDereference(statement.Dereference);
|
||||
var dereferenceBaseType = ((NubPointerType)boundDereference.Type).BaseType;
|
||||
return new BoundDereferenceAssignmentNode(statement.Tokens, boundDereference, BindExpression(statement.Value, dereferenceBaseType));
|
||||
}
|
||||
|
||||
private static BoundIfNode BindIf(IfNode statement)
|
||||
{
|
||||
var elseStatement = Optional.Empty<Variant<BoundIfNode, BoundBlockNode>>();
|
||||
@@ -179,13 +169,6 @@ public static class Binder
|
||||
return new BoundIfNode(statement.Tokens, BindExpression(statement.Condition, NubPrimitiveType.Bool), BindBlock(statement.Body), elseStatement);
|
||||
}
|
||||
|
||||
private static BoundMemberAssignmentNode BindMemberAssignment(MemberAssignmentNode statement)
|
||||
{
|
||||
var boundMemberAccess = BindMemberAccess(statement.MemberAccess);
|
||||
var elementType = ((NubArrayType)boundMemberAccess.Type).ElementType;
|
||||
return new BoundMemberAssignmentNode(statement.Tokens, boundMemberAccess, BindExpression(statement.Value, elementType));
|
||||
}
|
||||
|
||||
private static BoundReturnNode BindReturn(ReturnNode statement)
|
||||
{
|
||||
var value = Optional.Empty<BoundExpressionNode>();
|
||||
@@ -203,12 +186,6 @@ public static class Binder
|
||||
return new BoundStatementExpressionNode(statement.Tokens, BindExpression(statement.Expression));
|
||||
}
|
||||
|
||||
private static BoundVariableAssignmentNode BindVariableAssignment(VariableAssignmentNode statement)
|
||||
{
|
||||
var variableType = _variables[statement.Identifier.Name];
|
||||
return new BoundVariableAssignmentNode(statement.Tokens, BindIdentifier(statement.Identifier), BindExpression(statement.Value, variableType));
|
||||
}
|
||||
|
||||
private static BoundVariableDeclarationNode BindVariableDeclaration(VariableDeclarationNode statement)
|
||||
{
|
||||
_variables[statement.Name] = statement.Type;
|
||||
@@ -230,7 +207,6 @@ public static class Binder
|
||||
ArrayInitializerNode expression => BindArrayInitializer(expression),
|
||||
BinaryExpressionNode expression => BindBinaryExpression(expression),
|
||||
DereferenceNode expression => BindDereference(expression),
|
||||
FixedArrayInitializerNode expression => BindFixedArrayInitializer(expression),
|
||||
FuncCallNode expression => BindFuncCall(expression),
|
||||
IdentifierNode expression => BindIdentifier(expression),
|
||||
LiteralNode expression => BindLiteral(expression, expectedType),
|
||||
@@ -243,7 +219,7 @@ public static class Binder
|
||||
|
||||
private static BoundAddressOfNode BindAddressOf(AddressOfNode expression)
|
||||
{
|
||||
var inner = (BoundLValueNode)BindExpression(expression.Expression);
|
||||
var inner = BindExpression(expression.Expression);
|
||||
return new BoundAddressOfNode(expression.Tokens, new NubPointerType(inner.Type), inner);
|
||||
}
|
||||
|
||||
@@ -291,11 +267,6 @@ public static class Binder
|
||||
return new BoundDereferenceNode(expression.Tokens, dereferencedType, boundExpression);
|
||||
}
|
||||
|
||||
private static BoundFixedArrayInitializerNode BindFixedArrayInitializer(FixedArrayInitializerNode expression)
|
||||
{
|
||||
return new BoundFixedArrayInitializerNode(expression.Tokens, new NubArrayType(expression.ElementType), expression.ElementType, expression.Capacity);
|
||||
}
|
||||
|
||||
private static BoundFuncCallNode BindFuncCall(FuncCallNode expression)
|
||||
{
|
||||
var boundExpression = BindExpression(expression.Expression);
|
||||
|
||||
Reference in New Issue
Block a user