using System.Collections.Generic; using System.Collections.Immutable; using Upsilon.Binder.VariableSymbols; using Upsilon.Text; namespace Upsilon.Binder { public class BoundGenericForStatement : BoundStatement { public ImmutableArray Variables { get; } public BoundExpression BoundEnumerableExpression { get; } public BoundStatement Block { get; } public BoundGenericForStatement(ImmutableArray variables, BoundExpression boundEnumerableExpression, BoundStatement block, TextSpan span) : base(span) { Variables = variables; BoundEnumerableExpression = boundEnumerableExpression; Block = block; } public override BoundKind Kind => BoundKind.BoundGenericForStatement; public override IEnumerable 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; } } }