using System.Collections.Immutable; using System.Diagnostics; using Microsoft.CodeAnalysis.CSharp.Symbols; namespace Microsoft.CodeAnalysis.CSharp; internal sealed class BoundSequence : BoundExpression { protected override ImmutableArray Children => StaticCast.From(SideEffects.Add(Value)); public new TypeSymbol Type => base.Type; public ImmutableArray Locals { get; } public ImmutableArray SideEffects { get; } public BoundExpression Value { get; } public BoundSequence(SyntaxNode syntax, ImmutableArray locals, ImmutableArray sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false) : base(BoundKind.Sequence, syntax, type, hasErrors || sideEffects.HasErrors() || value.HasErrors()) { Locals = locals; SideEffects = sideEffects; Value = value; } [DebuggerStepThrough] public override BoundNode? Accept(BoundTreeVisitor visitor) { return visitor.VisitSequence(this); } public BoundSequence Update(ImmutableArray locals, ImmutableArray sideEffects, BoundExpression value, TypeSymbol type) { if (locals != Locals || sideEffects != SideEffects || value != Value || !TypeSymbol.Equals(type, Type, (TypeCompareKind)0)) { BoundSequence boundSequence = new BoundSequence(Syntax, locals, sideEffects, value, type, base.HasErrors); boundSequence.CopyAttributes(this); return boundSequence; } return this; } }