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

47 lines
1.6 KiB
C#

using System.Diagnostics;
using Microsoft.CodeAnalysis.CSharp.Symbols;
namespace Microsoft.CodeAnalysis.CSharp;
internal sealed class BoundLocalFunctionStatement : BoundStatement, IBoundLambdaOrFunction
{
public BoundBlock? Body => BlockBody ?? ExpressionBody;
MethodSymbol IBoundLambdaOrFunction.Symbol => Symbol;
SyntaxNode IBoundLambdaOrFunction.Syntax => Syntax;
BoundBlock? IBoundLambdaOrFunction.Body => Body;
public LocalFunctionSymbol Symbol { get; }
public BoundBlock? BlockBody { get; }
public BoundBlock? ExpressionBody { get; }
public BoundLocalFunctionStatement(SyntaxNode syntax, LocalFunctionSymbol symbol, BoundBlock? blockBody, BoundBlock? expressionBody, bool hasErrors = false)
: base(BoundKind.LocalFunctionStatement, syntax, hasErrors || blockBody.HasErrors() || expressionBody.HasErrors())
{
Symbol = symbol;
BlockBody = blockBody;
ExpressionBody = expressionBody;
}
[DebuggerStepThrough]
public override BoundNode? Accept(BoundTreeVisitor visitor)
{
return visitor.VisitLocalFunctionStatement(this);
}
public BoundLocalFunctionStatement Update(LocalFunctionSymbol symbol, BoundBlock? blockBody, BoundBlock? expressionBody)
{
if (!SymbolEqualityComparer.ConsiderEverything.Equals(symbol, Symbol) || blockBody != BlockBody || expressionBody != ExpressionBody)
{
BoundLocalFunctionStatement boundLocalFunctionStatement = new BoundLocalFunctionStatement(Syntax, symbol, blockBody, expressionBody, base.HasErrors);
boundLocalFunctionStatement.CopyAttributes(this);
return boundLocalFunctionStatement;
}
return this;
}
}