private BoundExpression BindAssignmentExpression(AssignmentExpressionSyntax syntax) { var name = syntax.IdentifierToken.Text; var boundExpression = BindExpression(syntax.Expression); if (!_scope.TryLookupVariable(name, out var variable)) { _diagnostics.ReportUndefinedName(syntax.IdentifierToken.Span, name); return(new BoundErrorExpression()); } if (variable.IsReadOnly) { _diagnostics.ReportCannotAssign(syntax.IdentifierToken.Span, name); return(new BoundErrorExpression()); } if (variable.Type != boundExpression.Type) { _diagnostics.ReportTypeMismatch(syntax.Expression.Span, boundExpression.Type, variable.Type); return(new BoundErrorExpression()); } return(new BoundAssignmentExpression(variable, boundExpression)); }
private BoundExpression BindAssignmentExpression(AssignmentExpressionSyntax syntax) { var name = syntax.IdentifierToken.Text; var boundExpression = BindExpression(syntax.Expression); if (!_scope.TryLookupVariable(name, out var variable)) { _diagnostics.ReportUndefinedName(syntax.IdentifierToken.Span, name); return(boundExpression); } if (variable.IsReadOnly) { _diagnostics.ReportCannotAssign(syntax.EqualsToken.Span, name); } var convertedExpression = BindConversion(syntax.Expression.Span, boundExpression, variable.Type); return(new BoundAssignmentExpression(variable, convertedExpression)); }