47 lines
1.6 KiB
C#
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;
|
|
}
|
|
}
|