Files
2026-08-27 10:56:38 -06:00

46 lines
1.8 KiB
C#

using System.Collections.Immutable;
using System.Diagnostics;
using Microsoft.CodeAnalysis.CSharp.Symbols;
namespace Microsoft.CodeAnalysis.CSharp;
internal sealed class BoundLocalDeclaration : BoundStatement
{
public LocalSymbol LocalSymbol { get; }
public BoundTypeExpression? DeclaredTypeOpt { get; }
public BoundExpression? InitializerOpt { get; }
public ImmutableArray<BoundExpression> ArgumentsOpt { get; }
public bool InferredType { get; }
public BoundLocalDeclaration(SyntaxNode syntax, LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType, bool hasErrors = false)
: base(BoundKind.LocalDeclaration, syntax, hasErrors || declaredTypeOpt.HasErrors() || initializerOpt.HasErrors() || argumentsOpt.HasErrors())
{
LocalSymbol = localSymbol;
DeclaredTypeOpt = declaredTypeOpt;
InitializerOpt = initializerOpt;
ArgumentsOpt = argumentsOpt;
InferredType = inferredType;
}
[DebuggerStepThrough]
public override BoundNode? Accept(BoundTreeVisitor visitor)
{
return visitor.VisitLocalDeclaration(this);
}
public BoundLocalDeclaration Update(LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType)
{
if (!SymbolEqualityComparer.ConsiderEverything.Equals(localSymbol, LocalSymbol) || declaredTypeOpt != DeclaredTypeOpt || initializerOpt != InitializerOpt || argumentsOpt != ArgumentsOpt || inferredType != InferredType)
{
BoundLocalDeclaration boundLocalDeclaration = new BoundLocalDeclaration(Syntax, localSymbol, declaredTypeOpt, initializerOpt, argumentsOpt, inferredType, base.HasErrors);
boundLocalDeclaration.CopyAttributes(this);
return boundLocalDeclaration;
}
return this;
}
}