36 lines
1.4 KiB
C#
36 lines
1.4 KiB
C#
using System.Collections.Generic;
|
|
using System.Collections.Immutable;
|
|
using Upsilon.Binder.VariableSymbols;
|
|
using Upsilon.Text;
|
|
|
|
namespace Upsilon.Binder
|
|
{
|
|
public class BoundGenericForStatement : BoundStatement
|
|
{
|
|
public ImmutableArray<VariableSymbol> Variables { get; }
|
|
public BoundExpression BoundEnumerableExpression { get; }
|
|
public BoundStatement Block { get; }
|
|
|
|
public BoundGenericForStatement(ImmutableArray<VariableSymbol> variables,
|
|
BoundExpression boundEnumerableExpression, BoundStatement block, TextSpan span) : base(span)
|
|
{
|
|
Variables = variables;
|
|
BoundEnumerableExpression = boundEnumerableExpression;
|
|
Block = block;
|
|
}
|
|
|
|
public override BoundKind Kind => BoundKind.BoundGenericForStatement;
|
|
public override IEnumerable<BoundNode> GetNodeAtPosition(int characterPosition)
|
|
{
|
|
if (characterPosition >= BoundEnumerableExpression.Span.Start && characterPosition <= BoundEnumerableExpression.Span.End)
|
|
foreach (var boundNode in BoundEnumerableExpression.GetNodeAtPosition(characterPosition))
|
|
yield return boundNode;
|
|
|
|
if (characterPosition >= Block.Span.Start && characterPosition <= Block.Span.End)
|
|
foreach (var boundNode in Block.GetNodeAtPosition(characterPosition))
|
|
yield return boundNode;
|
|
|
|
yield return this;
|
|
}
|
|
}
|
|
} |