Upsilon/Upsilon/Binder/BoundStatements/UnboundFunctionExpression.cs

38 lines
1.3 KiB
C#

using System.Collections.Generic;
using System.Collections.Immutable;
using Upsilon.Parser;
using Upsilon.Text;
namespace Upsilon.Binder
{
public class UnboundFunctionExpression : BoundFunctionExpression
{
public UnboundFunctionExpression(ImmutableArray<BoundVariableSymbol> parameters,
BlockStatementSyntax unboundBlock, TextSpan span) : base(parameters, null, span)
{
UnboundBlock = unboundBlock;
}
public override BoundKind Kind => BoundKind.BoundPromise;
public BlockStatementSyntax UnboundBlock { get; }
public override IEnumerable<BoundNode> GetNodeAtPosition(int characterPosition)
{
foreach (var parameter in Parameters)
{
if (characterPosition >= parameter.Span.Start && characterPosition <= parameter.Span.End)
foreach (var boundNode in parameter.GetNodeAtPosition(characterPosition))
yield return boundNode;
}
if (Block != null)
{
if (characterPosition >= Block.Span.Start && characterPosition <= Block.Span.End)
foreach (var boundNode in Block.GetNodeAtPosition(characterPosition))
yield return boundNode;
}
yield return this;
}
}
}