using System; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using Microsoft.CodeAnalysis.CSharp.Syntax; namespace Microsoft.CodeAnalysis.CSharp; internal abstract class BoundTreeVisitor { public virtual R Visit(BoundNode node, A arg) { if (node == null) { return default(R); } return node.Kind switch { BoundKind.TypeExpression => VisitTypeExpression(node as BoundTypeExpression, arg), BoundKind.NamespaceExpression => VisitNamespaceExpression(node as BoundNamespaceExpression, arg), BoundKind.UnaryOperator => VisitUnaryOperator(node as BoundUnaryOperator, arg), BoundKind.IncrementOperator => VisitIncrementOperator(node as BoundIncrementOperator, arg), BoundKind.BinaryOperator => VisitBinaryOperator(node as BoundBinaryOperator, arg), BoundKind.CompoundAssignmentOperator => VisitCompoundAssignmentOperator(node as BoundCompoundAssignmentOperator, arg), BoundKind.AssignmentOperator => VisitAssignmentOperator(node as BoundAssignmentOperator, arg), BoundKind.NullCoalescingOperator => VisitNullCoalescingOperator(node as BoundNullCoalescingOperator, arg), BoundKind.ConditionalOperator => VisitConditionalOperator(node as BoundConditionalOperator, arg), BoundKind.ArrayAccess => VisitArrayAccess(node as BoundArrayAccess, arg), BoundKind.TypeOfOperator => VisitTypeOfOperator(node as BoundTypeOfOperator, arg), BoundKind.DefaultLiteral => VisitDefaultLiteral(node as BoundDefaultLiteral, arg), BoundKind.DefaultExpression => VisitDefaultExpression(node as BoundDefaultExpression, arg), BoundKind.IsOperator => VisitIsOperator(node as BoundIsOperator, arg), BoundKind.AsOperator => VisitAsOperator(node as BoundAsOperator, arg), BoundKind.Conversion => VisitConversion(node as BoundConversion, arg), BoundKind.SequencePointExpression => VisitSequencePointExpression(node as BoundSequencePointExpression, arg), BoundKind.SequencePoint => VisitSequencePoint(node as BoundSequencePoint, arg), BoundKind.SequencePointWithSpan => VisitSequencePointWithSpan(node as BoundSequencePointWithSpan, arg), BoundKind.Block => VisitBlock(node as BoundBlock, arg), BoundKind.LocalDeclaration => VisitLocalDeclaration(node as BoundLocalDeclaration, arg), BoundKind.MultipleLocalDeclarations => VisitMultipleLocalDeclarations(node as BoundMultipleLocalDeclarations, arg), BoundKind.Sequence => VisitSequence(node as BoundSequence, arg), BoundKind.NoOpStatement => VisitNoOpStatement(node as BoundNoOpStatement, arg), BoundKind.ReturnStatement => VisitReturnStatement(node as BoundReturnStatement, arg), BoundKind.ThrowStatement => VisitThrowStatement(node as BoundThrowStatement, arg), BoundKind.ExpressionStatement => VisitExpressionStatement(node as BoundExpressionStatement, arg), BoundKind.BreakStatement => VisitBreakStatement(node as BoundBreakStatement, arg), BoundKind.ContinueStatement => VisitContinueStatement(node as BoundContinueStatement, arg), BoundKind.IfStatement => VisitIfStatement(node as BoundIfStatement, arg), BoundKind.ForEachStatement => VisitForEachStatement(node as BoundForEachStatement, arg), BoundKind.TryStatement => VisitTryStatement(node as BoundTryStatement, arg), BoundKind.Literal => VisitLiteral(node as BoundLiteral, arg), BoundKind.ThisReference => VisitThisReference(node as BoundThisReference, arg), BoundKind.Local => VisitLocal(node as BoundLocal, arg), BoundKind.Parameter => VisitParameter(node as BoundParameter, arg), BoundKind.LabelStatement => VisitLabelStatement(node as BoundLabelStatement, arg), BoundKind.GotoStatement => VisitGotoStatement(node as BoundGotoStatement, arg), BoundKind.LabeledStatement => VisitLabeledStatement(node as BoundLabeledStatement, arg), BoundKind.StatementList => VisitStatementList(node as BoundStatementList, arg), BoundKind.ConditionalGoto => VisitConditionalGoto(node as BoundConditionalGoto, arg), BoundKind.Call => VisitCall(node as BoundCall, arg), BoundKind.ObjectCreationExpression => VisitObjectCreationExpression(node as BoundObjectCreationExpression, arg), BoundKind.DelegateCreationExpression => VisitDelegateCreationExpression(node as BoundDelegateCreationExpression, arg), BoundKind.FieldAccess => VisitFieldAccess(node as BoundFieldAccess, arg), BoundKind.PropertyAccess => VisitPropertyAccess(node as BoundPropertyAccess, arg), BoundKind.Lambda => VisitLambda(node as BoundLambda, arg), BoundKind.NameOfOperator => VisitNameOfOperator(node as BoundNameOfOperator, arg), _ => VisitInternal(node, arg), }; } public virtual R DefaultVisit(BoundNode node, A arg) { return default(R); } [MethodImpl(MethodImplOptions.NoInlining)] [DebuggerStepThrough] internal R VisitInternal(BoundNode node, A arg) { return node.Kind switch { BoundKind.FieldEqualsValue => VisitFieldEqualsValue((BoundFieldEqualsValue)node, arg), BoundKind.PropertyEqualsValue => VisitPropertyEqualsValue((BoundPropertyEqualsValue)node, arg), BoundKind.ParameterEqualsValue => VisitParameterEqualsValue((BoundParameterEqualsValue)node, arg), BoundKind.GlobalStatementInitializer => VisitGlobalStatementInitializer((BoundGlobalStatementInitializer)node, arg), BoundKind.ValuePlaceholder => VisitValuePlaceholder((BoundValuePlaceholder)node, arg), BoundKind.CapturedReceiverPlaceholder => VisitCapturedReceiverPlaceholder((BoundCapturedReceiverPlaceholder)node, arg), BoundKind.DeconstructValuePlaceholder => VisitDeconstructValuePlaceholder((BoundDeconstructValuePlaceholder)node, arg), BoundKind.TupleOperandPlaceholder => VisitTupleOperandPlaceholder((BoundTupleOperandPlaceholder)node, arg), BoundKind.AwaitableValuePlaceholder => VisitAwaitableValuePlaceholder((BoundAwaitableValuePlaceholder)node, arg), BoundKind.DisposableValuePlaceholder => VisitDisposableValuePlaceholder((BoundDisposableValuePlaceholder)node, arg), BoundKind.ObjectOrCollectionValuePlaceholder => VisitObjectOrCollectionValuePlaceholder((BoundObjectOrCollectionValuePlaceholder)node, arg), BoundKind.ImplicitIndexerValuePlaceholder => VisitImplicitIndexerValuePlaceholder((BoundImplicitIndexerValuePlaceholder)node, arg), BoundKind.ImplicitIndexerReceiverPlaceholder => VisitImplicitIndexerReceiverPlaceholder((BoundImplicitIndexerReceiverPlaceholder)node, arg), BoundKind.ListPatternReceiverPlaceholder => VisitListPatternReceiverPlaceholder((BoundListPatternReceiverPlaceholder)node, arg), BoundKind.ListPatternIndexPlaceholder => VisitListPatternIndexPlaceholder((BoundListPatternIndexPlaceholder)node, arg), BoundKind.SlicePatternReceiverPlaceholder => VisitSlicePatternReceiverPlaceholder((BoundSlicePatternReceiverPlaceholder)node, arg), BoundKind.SlicePatternRangePlaceholder => VisitSlicePatternRangePlaceholder((BoundSlicePatternRangePlaceholder)node, arg), BoundKind.Dup => VisitDup((BoundDup)node, arg), BoundKind.PassByCopy => VisitPassByCopy((BoundPassByCopy)node, arg), BoundKind.BadExpression => VisitBadExpression((BoundBadExpression)node, arg), BoundKind.BadStatement => VisitBadStatement((BoundBadStatement)node, arg), BoundKind.ExtractedFinallyBlock => VisitExtractedFinallyBlock((BoundExtractedFinallyBlock)node, arg), BoundKind.TypeExpression => VisitTypeExpression((BoundTypeExpression)node, arg), BoundKind.TypeOrValueExpression => VisitTypeOrValueExpression((BoundTypeOrValueExpression)node, arg), BoundKind.NamespaceExpression => VisitNamespaceExpression((BoundNamespaceExpression)node, arg), BoundKind.UnaryOperator => VisitUnaryOperator((BoundUnaryOperator)node, arg), BoundKind.IncrementOperator => VisitIncrementOperator((BoundIncrementOperator)node, arg), BoundKind.AddressOfOperator => VisitAddressOfOperator((BoundAddressOfOperator)node, arg), BoundKind.UnconvertedAddressOfOperator => VisitUnconvertedAddressOfOperator((BoundUnconvertedAddressOfOperator)node, arg), BoundKind.FunctionPointerLoad => VisitFunctionPointerLoad((BoundFunctionPointerLoad)node, arg), BoundKind.PointerIndirectionOperator => VisitPointerIndirectionOperator((BoundPointerIndirectionOperator)node, arg), BoundKind.PointerElementAccess => VisitPointerElementAccess((BoundPointerElementAccess)node, arg), BoundKind.FunctionPointerInvocation => VisitFunctionPointerInvocation((BoundFunctionPointerInvocation)node, arg), BoundKind.RefTypeOperator => VisitRefTypeOperator((BoundRefTypeOperator)node, arg), BoundKind.MakeRefOperator => VisitMakeRefOperator((BoundMakeRefOperator)node, arg), BoundKind.RefValueOperator => VisitRefValueOperator((BoundRefValueOperator)node, arg), BoundKind.FromEndIndexExpression => VisitFromEndIndexExpression((BoundFromEndIndexExpression)node, arg), BoundKind.RangeExpression => VisitRangeExpression((BoundRangeExpression)node, arg), BoundKind.BinaryOperator => VisitBinaryOperator((BoundBinaryOperator)node, arg), BoundKind.TupleBinaryOperator => VisitTupleBinaryOperator((BoundTupleBinaryOperator)node, arg), BoundKind.UserDefinedConditionalLogicalOperator => VisitUserDefinedConditionalLogicalOperator((BoundUserDefinedConditionalLogicalOperator)node, arg), BoundKind.CompoundAssignmentOperator => VisitCompoundAssignmentOperator((BoundCompoundAssignmentOperator)node, arg), BoundKind.AssignmentOperator => VisitAssignmentOperator((BoundAssignmentOperator)node, arg), BoundKind.DeconstructionAssignmentOperator => VisitDeconstructionAssignmentOperator((BoundDeconstructionAssignmentOperator)node, arg), BoundKind.NullCoalescingOperator => VisitNullCoalescingOperator((BoundNullCoalescingOperator)node, arg), BoundKind.NullCoalescingAssignmentOperator => VisitNullCoalescingAssignmentOperator((BoundNullCoalescingAssignmentOperator)node, arg), BoundKind.UnconvertedConditionalOperator => VisitUnconvertedConditionalOperator((BoundUnconvertedConditionalOperator)node, arg), BoundKind.ConditionalOperator => VisitConditionalOperator((BoundConditionalOperator)node, arg), BoundKind.ArrayAccess => VisitArrayAccess((BoundArrayAccess)node, arg), BoundKind.ArrayLength => VisitArrayLength((BoundArrayLength)node, arg), BoundKind.AwaitableInfo => VisitAwaitableInfo((BoundAwaitableInfo)node, arg), BoundKind.AwaitExpression => VisitAwaitExpression((BoundAwaitExpression)node, arg), BoundKind.TypeOfOperator => VisitTypeOfOperator((BoundTypeOfOperator)node, arg), BoundKind.BlockInstrumentation => VisitBlockInstrumentation((BoundBlockInstrumentation)node, arg), BoundKind.MethodDefIndex => VisitMethodDefIndex((BoundMethodDefIndex)node, arg), BoundKind.LocalId => VisitLocalId((BoundLocalId)node, arg), BoundKind.ParameterId => VisitParameterId((BoundParameterId)node, arg), BoundKind.StateMachineInstanceId => VisitStateMachineInstanceId((BoundStateMachineInstanceId)node, arg), BoundKind.MaximumMethodDefIndex => VisitMaximumMethodDefIndex((BoundMaximumMethodDefIndex)node, arg), BoundKind.InstrumentationPayloadRoot => VisitInstrumentationPayloadRoot((BoundInstrumentationPayloadRoot)node, arg), BoundKind.ModuleVersionId => VisitModuleVersionId((BoundModuleVersionId)node, arg), BoundKind.ModuleVersionIdString => VisitModuleVersionIdString((BoundModuleVersionIdString)node, arg), BoundKind.SourceDocumentIndex => VisitSourceDocumentIndex((BoundSourceDocumentIndex)node, arg), BoundKind.MethodInfo => VisitMethodInfo((BoundMethodInfo)node, arg), BoundKind.FieldInfo => VisitFieldInfo((BoundFieldInfo)node, arg), BoundKind.DefaultLiteral => VisitDefaultLiteral((BoundDefaultLiteral)node, arg), BoundKind.DefaultExpression => VisitDefaultExpression((BoundDefaultExpression)node, arg), BoundKind.IsOperator => VisitIsOperator((BoundIsOperator)node, arg), BoundKind.AsOperator => VisitAsOperator((BoundAsOperator)node, arg), BoundKind.SizeOfOperator => VisitSizeOfOperator((BoundSizeOfOperator)node, arg), BoundKind.Conversion => VisitConversion((BoundConversion)node, arg), BoundKind.ReadOnlySpanFromArray => VisitReadOnlySpanFromArray((BoundReadOnlySpanFromArray)node, arg), BoundKind.ArgList => VisitArgList((BoundArgList)node, arg), BoundKind.ArgListOperator => VisitArgListOperator((BoundArgListOperator)node, arg), BoundKind.FixedLocalCollectionInitializer => VisitFixedLocalCollectionInitializer((BoundFixedLocalCollectionInitializer)node, arg), BoundKind.SequencePoint => VisitSequencePoint((BoundSequencePoint)node, arg), BoundKind.SequencePointWithSpan => VisitSequencePointWithSpan((BoundSequencePointWithSpan)node, arg), BoundKind.SavePreviousSequencePoint => VisitSavePreviousSequencePoint((BoundSavePreviousSequencePoint)node, arg), BoundKind.RestorePreviousSequencePoint => VisitRestorePreviousSequencePoint((BoundRestorePreviousSequencePoint)node, arg), BoundKind.StepThroughSequencePoint => VisitStepThroughSequencePoint((BoundStepThroughSequencePoint)node, arg), BoundKind.Block => VisitBlock((BoundBlock)node, arg), BoundKind.Scope => VisitScope((BoundScope)node, arg), BoundKind.StateMachineScope => VisitStateMachineScope((BoundStateMachineScope)node, arg), BoundKind.LocalDeclaration => VisitLocalDeclaration((BoundLocalDeclaration)node, arg), BoundKind.MultipleLocalDeclarations => VisitMultipleLocalDeclarations((BoundMultipleLocalDeclarations)node, arg), BoundKind.UsingLocalDeclarations => VisitUsingLocalDeclarations((BoundUsingLocalDeclarations)node, arg), BoundKind.LocalFunctionStatement => VisitLocalFunctionStatement((BoundLocalFunctionStatement)node, arg), BoundKind.NoOpStatement => VisitNoOpStatement((BoundNoOpStatement)node, arg), BoundKind.ReturnStatement => VisitReturnStatement((BoundReturnStatement)node, arg), BoundKind.YieldReturnStatement => VisitYieldReturnStatement((BoundYieldReturnStatement)node, arg), BoundKind.YieldBreakStatement => VisitYieldBreakStatement((BoundYieldBreakStatement)node, arg), BoundKind.ThrowStatement => VisitThrowStatement((BoundThrowStatement)node, arg), BoundKind.ExpressionStatement => VisitExpressionStatement((BoundExpressionStatement)node, arg), BoundKind.BreakStatement => VisitBreakStatement((BoundBreakStatement)node, arg), BoundKind.ContinueStatement => VisitContinueStatement((BoundContinueStatement)node, arg), BoundKind.SwitchStatement => VisitSwitchStatement((BoundSwitchStatement)node, arg), BoundKind.SwitchDispatch => VisitSwitchDispatch((BoundSwitchDispatch)node, arg), BoundKind.IfStatement => VisitIfStatement((BoundIfStatement)node, arg), BoundKind.DoStatement => VisitDoStatement((BoundDoStatement)node, arg), BoundKind.WhileStatement => VisitWhileStatement((BoundWhileStatement)node, arg), BoundKind.ForStatement => VisitForStatement((BoundForStatement)node, arg), BoundKind.ForEachStatement => VisitForEachStatement((BoundForEachStatement)node, arg), BoundKind.ForEachDeconstructStep => VisitForEachDeconstructStep((BoundForEachDeconstructStep)node, arg), BoundKind.UsingStatement => VisitUsingStatement((BoundUsingStatement)node, arg), BoundKind.FixedStatement => VisitFixedStatement((BoundFixedStatement)node, arg), BoundKind.LockStatement => VisitLockStatement((BoundLockStatement)node, arg), BoundKind.TryStatement => VisitTryStatement((BoundTryStatement)node, arg), BoundKind.CatchBlock => VisitCatchBlock((BoundCatchBlock)node, arg), BoundKind.Literal => VisitLiteral((BoundLiteral)node, arg), BoundKind.Utf8String => VisitUtf8String((BoundUtf8String)node, arg), BoundKind.ThisReference => VisitThisReference((BoundThisReference)node, arg), BoundKind.PreviousSubmissionReference => VisitPreviousSubmissionReference((BoundPreviousSubmissionReference)node, arg), BoundKind.HostObjectMemberReference => VisitHostObjectMemberReference((BoundHostObjectMemberReference)node, arg), BoundKind.BaseReference => VisitBaseReference((BoundBaseReference)node, arg), BoundKind.Local => VisitLocal((BoundLocal)node, arg), BoundKind.PseudoVariable => VisitPseudoVariable((BoundPseudoVariable)node, arg), BoundKind.RangeVariable => VisitRangeVariable((BoundRangeVariable)node, arg), BoundKind.Parameter => VisitParameter((BoundParameter)node, arg), BoundKind.LabelStatement => VisitLabelStatement((BoundLabelStatement)node, arg), BoundKind.GotoStatement => VisitGotoStatement((BoundGotoStatement)node, arg), BoundKind.LabeledStatement => VisitLabeledStatement((BoundLabeledStatement)node, arg), BoundKind.Label => VisitLabel((BoundLabel)node, arg), BoundKind.StatementList => VisitStatementList((BoundStatementList)node, arg), BoundKind.ConditionalGoto => VisitConditionalGoto((BoundConditionalGoto)node, arg), BoundKind.SwitchExpressionArm => VisitSwitchExpressionArm((BoundSwitchExpressionArm)node, arg), BoundKind.UnconvertedSwitchExpression => VisitUnconvertedSwitchExpression((BoundUnconvertedSwitchExpression)node, arg), BoundKind.ConvertedSwitchExpression => VisitConvertedSwitchExpression((BoundConvertedSwitchExpression)node, arg), BoundKind.DecisionDag => VisitDecisionDag((BoundDecisionDag)node, arg), BoundKind.EvaluationDecisionDagNode => VisitEvaluationDecisionDagNode((BoundEvaluationDecisionDagNode)node, arg), BoundKind.TestDecisionDagNode => VisitTestDecisionDagNode((BoundTestDecisionDagNode)node, arg), BoundKind.WhenDecisionDagNode => VisitWhenDecisionDagNode((BoundWhenDecisionDagNode)node, arg), BoundKind.LeafDecisionDagNode => VisitLeafDecisionDagNode((BoundLeafDecisionDagNode)node, arg), BoundKind.DagTemp => VisitDagTemp((BoundDagTemp)node, arg), BoundKind.DagTypeTest => VisitDagTypeTest((BoundDagTypeTest)node, arg), BoundKind.DagNonNullTest => VisitDagNonNullTest((BoundDagNonNullTest)node, arg), BoundKind.DagExplicitNullTest => VisitDagExplicitNullTest((BoundDagExplicitNullTest)node, arg), BoundKind.DagValueTest => VisitDagValueTest((BoundDagValueTest)node, arg), BoundKind.DagRelationalTest => VisitDagRelationalTest((BoundDagRelationalTest)node, arg), BoundKind.DagDeconstructEvaluation => VisitDagDeconstructEvaluation((BoundDagDeconstructEvaluation)node, arg), BoundKind.DagTypeEvaluation => VisitDagTypeEvaluation((BoundDagTypeEvaluation)node, arg), BoundKind.DagFieldEvaluation => VisitDagFieldEvaluation((BoundDagFieldEvaluation)node, arg), BoundKind.DagPropertyEvaluation => VisitDagPropertyEvaluation((BoundDagPropertyEvaluation)node, arg), BoundKind.DagIndexEvaluation => VisitDagIndexEvaluation((BoundDagIndexEvaluation)node, arg), BoundKind.DagIndexerEvaluation => VisitDagIndexerEvaluation((BoundDagIndexerEvaluation)node, arg), BoundKind.DagSliceEvaluation => VisitDagSliceEvaluation((BoundDagSliceEvaluation)node, arg), BoundKind.DagAssignmentEvaluation => VisitDagAssignmentEvaluation((BoundDagAssignmentEvaluation)node, arg), BoundKind.SwitchSection => VisitSwitchSection((BoundSwitchSection)node, arg), BoundKind.SwitchLabel => VisitSwitchLabel((BoundSwitchLabel)node, arg), BoundKind.SequencePointExpression => VisitSequencePointExpression((BoundSequencePointExpression)node, arg), BoundKind.Sequence => VisitSequence((BoundSequence)node, arg), BoundKind.SpillSequence => VisitSpillSequence((BoundSpillSequence)node, arg), BoundKind.DynamicMemberAccess => VisitDynamicMemberAccess((BoundDynamicMemberAccess)node, arg), BoundKind.DynamicInvocation => VisitDynamicInvocation((BoundDynamicInvocation)node, arg), BoundKind.ConditionalAccess => VisitConditionalAccess((BoundConditionalAccess)node, arg), BoundKind.LoweredConditionalAccess => VisitLoweredConditionalAccess((BoundLoweredConditionalAccess)node, arg), BoundKind.ConditionalReceiver => VisitConditionalReceiver((BoundConditionalReceiver)node, arg), BoundKind.ComplexConditionalReceiver => VisitComplexConditionalReceiver((BoundComplexConditionalReceiver)node, arg), BoundKind.MethodGroup => VisitMethodGroup((BoundMethodGroup)node, arg), BoundKind.PropertyGroup => VisitPropertyGroup((BoundPropertyGroup)node, arg), BoundKind.Call => VisitCall((BoundCall)node, arg), BoundKind.EventAssignmentOperator => VisitEventAssignmentOperator((BoundEventAssignmentOperator)node, arg), BoundKind.Attribute => VisitAttribute((BoundAttribute)node, arg), BoundKind.UnconvertedObjectCreationExpression => VisitUnconvertedObjectCreationExpression((BoundUnconvertedObjectCreationExpression)node, arg), BoundKind.ObjectCreationExpression => VisitObjectCreationExpression((BoundObjectCreationExpression)node, arg), BoundKind.UnconvertedCollectionExpression => VisitUnconvertedCollectionExpression((BoundUnconvertedCollectionExpression)node, arg), BoundKind.CollectionExpression => VisitCollectionExpression((BoundCollectionExpression)node, arg), BoundKind.CollectionExpressionSpreadExpressionPlaceholder => VisitCollectionExpressionSpreadExpressionPlaceholder((BoundCollectionExpressionSpreadExpressionPlaceholder)node, arg), BoundKind.CollectionExpressionSpreadElement => VisitCollectionExpressionSpreadElement((BoundCollectionExpressionSpreadElement)node, arg), BoundKind.TupleLiteral => VisitTupleLiteral((BoundTupleLiteral)node, arg), BoundKind.ConvertedTupleLiteral => VisitConvertedTupleLiteral((BoundConvertedTupleLiteral)node, arg), BoundKind.DynamicObjectCreationExpression => VisitDynamicObjectCreationExpression((BoundDynamicObjectCreationExpression)node, arg), BoundKind.NoPiaObjectCreationExpression => VisitNoPiaObjectCreationExpression((BoundNoPiaObjectCreationExpression)node, arg), BoundKind.ObjectInitializerExpression => VisitObjectInitializerExpression((BoundObjectInitializerExpression)node, arg), BoundKind.ObjectInitializerMember => VisitObjectInitializerMember((BoundObjectInitializerMember)node, arg), BoundKind.DynamicObjectInitializerMember => VisitDynamicObjectInitializerMember((BoundDynamicObjectInitializerMember)node, arg), BoundKind.CollectionInitializerExpression => VisitCollectionInitializerExpression((BoundCollectionInitializerExpression)node, arg), BoundKind.CollectionElementInitializer => VisitCollectionElementInitializer((BoundCollectionElementInitializer)node, arg), BoundKind.DynamicCollectionElementInitializer => VisitDynamicCollectionElementInitializer((BoundDynamicCollectionElementInitializer)node, arg), BoundKind.ImplicitReceiver => VisitImplicitReceiver((BoundImplicitReceiver)node, arg), BoundKind.AnonymousObjectCreationExpression => VisitAnonymousObjectCreationExpression((BoundAnonymousObjectCreationExpression)node, arg), BoundKind.AnonymousPropertyDeclaration => VisitAnonymousPropertyDeclaration((BoundAnonymousPropertyDeclaration)node, arg), BoundKind.NewT => VisitNewT((BoundNewT)node, arg), BoundKind.DelegateCreationExpression => VisitDelegateCreationExpression((BoundDelegateCreationExpression)node, arg), BoundKind.ArrayCreation => VisitArrayCreation((BoundArrayCreation)node, arg), BoundKind.ArrayInitialization => VisitArrayInitialization((BoundArrayInitialization)node, arg), BoundKind.StackAllocArrayCreation => VisitStackAllocArrayCreation((BoundStackAllocArrayCreation)node, arg), BoundKind.ConvertedStackAllocExpression => VisitConvertedStackAllocExpression((BoundConvertedStackAllocExpression)node, arg), BoundKind.FieldAccess => VisitFieldAccess((BoundFieldAccess)node, arg), BoundKind.HoistedFieldAccess => VisitHoistedFieldAccess((BoundHoistedFieldAccess)node, arg), BoundKind.PropertyAccess => VisitPropertyAccess((BoundPropertyAccess)node, arg), BoundKind.EventAccess => VisitEventAccess((BoundEventAccess)node, arg), BoundKind.IndexerAccess => VisitIndexerAccess((BoundIndexerAccess)node, arg), BoundKind.ImplicitIndexerAccess => VisitImplicitIndexerAccess((BoundImplicitIndexerAccess)node, arg), BoundKind.InlineArrayAccess => VisitInlineArrayAccess((BoundInlineArrayAccess)node, arg), BoundKind.DynamicIndexerAccess => VisitDynamicIndexerAccess((BoundDynamicIndexerAccess)node, arg), BoundKind.Lambda => VisitLambda((BoundLambda)node, arg), BoundKind.UnboundLambda => VisitUnboundLambda((UnboundLambda)node, arg), BoundKind.QueryClause => VisitQueryClause((BoundQueryClause)node, arg), BoundKind.TypeOrInstanceInitializers => VisitTypeOrInstanceInitializers((BoundTypeOrInstanceInitializers)node, arg), BoundKind.NameOfOperator => VisitNameOfOperator((BoundNameOfOperator)node, arg), BoundKind.UnconvertedInterpolatedString => VisitUnconvertedInterpolatedString((BoundUnconvertedInterpolatedString)node, arg), BoundKind.InterpolatedString => VisitInterpolatedString((BoundInterpolatedString)node, arg), BoundKind.InterpolatedStringHandlerPlaceholder => VisitInterpolatedStringHandlerPlaceholder((BoundInterpolatedStringHandlerPlaceholder)node, arg), BoundKind.InterpolatedStringArgumentPlaceholder => VisitInterpolatedStringArgumentPlaceholder((BoundInterpolatedStringArgumentPlaceholder)node, arg), BoundKind.StringInsert => VisitStringInsert((BoundStringInsert)node, arg), BoundKind.IsPatternExpression => VisitIsPatternExpression((BoundIsPatternExpression)node, arg), BoundKind.ConstantPattern => VisitConstantPattern((BoundConstantPattern)node, arg), BoundKind.DiscardPattern => VisitDiscardPattern((BoundDiscardPattern)node, arg), BoundKind.DeclarationPattern => VisitDeclarationPattern((BoundDeclarationPattern)node, arg), BoundKind.RecursivePattern => VisitRecursivePattern((BoundRecursivePattern)node, arg), BoundKind.ListPattern => VisitListPattern((BoundListPattern)node, arg), BoundKind.SlicePattern => VisitSlicePattern((BoundSlicePattern)node, arg), BoundKind.ITuplePattern => VisitITuplePattern((BoundITuplePattern)node, arg), BoundKind.PositionalSubpattern => VisitPositionalSubpattern((BoundPositionalSubpattern)node, arg), BoundKind.PropertySubpattern => VisitPropertySubpattern((BoundPropertySubpattern)node, arg), BoundKind.PropertySubpatternMember => VisitPropertySubpatternMember((BoundPropertySubpatternMember)node, arg), BoundKind.TypePattern => VisitTypePattern((BoundTypePattern)node, arg), BoundKind.BinaryPattern => VisitBinaryPattern((BoundBinaryPattern)node, arg), BoundKind.NegatedPattern => VisitNegatedPattern((BoundNegatedPattern)node, arg), BoundKind.RelationalPattern => VisitRelationalPattern((BoundRelationalPattern)node, arg), BoundKind.DiscardExpression => VisitDiscardExpression((BoundDiscardExpression)node, arg), BoundKind.ThrowExpression => VisitThrowExpression((BoundThrowExpression)node, arg), BoundKind.OutVariablePendingInference => VisitOutVariablePendingInference((OutVariablePendingInference)node, arg), BoundKind.DeconstructionVariablePendingInference => VisitDeconstructionVariablePendingInference((DeconstructionVariablePendingInference)node, arg), BoundKind.OutDeconstructVarPendingInference => VisitOutDeconstructVarPendingInference((OutDeconstructVarPendingInference)node, arg), BoundKind.NonConstructorMethodBody => VisitNonConstructorMethodBody((BoundNonConstructorMethodBody)node, arg), BoundKind.ConstructorMethodBody => VisitConstructorMethodBody((BoundConstructorMethodBody)node, arg), BoundKind.ExpressionWithNullability => VisitExpressionWithNullability((BoundExpressionWithNullability)node, arg), BoundKind.WithExpression => VisitWithExpression((BoundWithExpression)node, arg), _ => default(R), }; } public virtual R VisitFieldEqualsValue(BoundFieldEqualsValue node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPropertyEqualsValue(BoundPropertyEqualsValue node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitParameterEqualsValue(BoundParameterEqualsValue node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitGlobalStatementInitializer(BoundGlobalStatementInitializer node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitValuePlaceholder(BoundValuePlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitCapturedReceiverPlaceholder(BoundCapturedReceiverPlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDeconstructValuePlaceholder(BoundDeconstructValuePlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTupleOperandPlaceholder(BoundTupleOperandPlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitAwaitableValuePlaceholder(BoundAwaitableValuePlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDisposableValuePlaceholder(BoundDisposableValuePlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitObjectOrCollectionValuePlaceholder(BoundObjectOrCollectionValuePlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitImplicitIndexerValuePlaceholder(BoundImplicitIndexerValuePlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitImplicitIndexerReceiverPlaceholder(BoundImplicitIndexerReceiverPlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitListPatternReceiverPlaceholder(BoundListPatternReceiverPlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitListPatternIndexPlaceholder(BoundListPatternIndexPlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSlicePatternReceiverPlaceholder(BoundSlicePatternReceiverPlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSlicePatternRangePlaceholder(BoundSlicePatternRangePlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDup(BoundDup node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPassByCopy(BoundPassByCopy node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitBadExpression(BoundBadExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitBadStatement(BoundBadStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitExtractedFinallyBlock(BoundExtractedFinallyBlock node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTypeExpression(BoundTypeExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTypeOrValueExpression(BoundTypeOrValueExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitNamespaceExpression(BoundNamespaceExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUnaryOperator(BoundUnaryOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitIncrementOperator(BoundIncrementOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitAddressOfOperator(BoundAddressOfOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUnconvertedAddressOfOperator(BoundUnconvertedAddressOfOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitFunctionPointerLoad(BoundFunctionPointerLoad node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPointerIndirectionOperator(BoundPointerIndirectionOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPointerElementAccess(BoundPointerElementAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitFunctionPointerInvocation(BoundFunctionPointerInvocation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitRefTypeOperator(BoundRefTypeOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitMakeRefOperator(BoundMakeRefOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitRefValueOperator(BoundRefValueOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitFromEndIndexExpression(BoundFromEndIndexExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitRangeExpression(BoundRangeExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitBinaryOperator(BoundBinaryOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTupleBinaryOperator(BoundTupleBinaryOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUserDefinedConditionalLogicalOperator(BoundUserDefinedConditionalLogicalOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitCompoundAssignmentOperator(BoundCompoundAssignmentOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitAssignmentOperator(BoundAssignmentOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDeconstructionAssignmentOperator(BoundDeconstructionAssignmentOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitNullCoalescingOperator(BoundNullCoalescingOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitNullCoalescingAssignmentOperator(BoundNullCoalescingAssignmentOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUnconvertedConditionalOperator(BoundUnconvertedConditionalOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConditionalOperator(BoundConditionalOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitArrayAccess(BoundArrayAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitArrayLength(BoundArrayLength node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitAwaitableInfo(BoundAwaitableInfo node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitAwaitExpression(BoundAwaitExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTypeOfOperator(BoundTypeOfOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitBlockInstrumentation(BoundBlockInstrumentation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitMethodDefIndex(BoundMethodDefIndex node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLocalId(BoundLocalId node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitParameterId(BoundParameterId node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitStateMachineInstanceId(BoundStateMachineInstanceId node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitMaximumMethodDefIndex(BoundMaximumMethodDefIndex node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitInstrumentationPayloadRoot(BoundInstrumentationPayloadRoot node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitModuleVersionId(BoundModuleVersionId node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitModuleVersionIdString(BoundModuleVersionIdString node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSourceDocumentIndex(BoundSourceDocumentIndex node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitMethodInfo(BoundMethodInfo node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitFieldInfo(BoundFieldInfo node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDefaultLiteral(BoundDefaultLiteral node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDefaultExpression(BoundDefaultExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitIsOperator(BoundIsOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitAsOperator(BoundAsOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSizeOfOperator(BoundSizeOfOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConversion(BoundConversion node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitReadOnlySpanFromArray(BoundReadOnlySpanFromArray node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitArgList(BoundArgList node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitArgListOperator(BoundArgListOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitFixedLocalCollectionInitializer(BoundFixedLocalCollectionInitializer node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSequencePoint(BoundSequencePoint node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSequencePointWithSpan(BoundSequencePointWithSpan node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSavePreviousSequencePoint(BoundSavePreviousSequencePoint node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitRestorePreviousSequencePoint(BoundRestorePreviousSequencePoint node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitStepThroughSequencePoint(BoundStepThroughSequencePoint node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitBlock(BoundBlock node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitScope(BoundScope node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitStateMachineScope(BoundStateMachineScope node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLocalDeclaration(BoundLocalDeclaration node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitMultipleLocalDeclarations(BoundMultipleLocalDeclarations node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUsingLocalDeclarations(BoundUsingLocalDeclarations node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLocalFunctionStatement(BoundLocalFunctionStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitNoOpStatement(BoundNoOpStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitReturnStatement(BoundReturnStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitYieldReturnStatement(BoundYieldReturnStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitYieldBreakStatement(BoundYieldBreakStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitThrowStatement(BoundThrowStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitExpressionStatement(BoundExpressionStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitBreakStatement(BoundBreakStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitContinueStatement(BoundContinueStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSwitchStatement(BoundSwitchStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSwitchDispatch(BoundSwitchDispatch node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitIfStatement(BoundIfStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDoStatement(BoundDoStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitWhileStatement(BoundWhileStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitForStatement(BoundForStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitForEachStatement(BoundForEachStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitForEachDeconstructStep(BoundForEachDeconstructStep node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUsingStatement(BoundUsingStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitFixedStatement(BoundFixedStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLockStatement(BoundLockStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTryStatement(BoundTryStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitCatchBlock(BoundCatchBlock node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLiteral(BoundLiteral node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUtf8String(BoundUtf8String node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitThisReference(BoundThisReference node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPreviousSubmissionReference(BoundPreviousSubmissionReference node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitHostObjectMemberReference(BoundHostObjectMemberReference node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitBaseReference(BoundBaseReference node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLocal(BoundLocal node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPseudoVariable(BoundPseudoVariable node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitRangeVariable(BoundRangeVariable node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitParameter(BoundParameter node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLabelStatement(BoundLabelStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitGotoStatement(BoundGotoStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLabeledStatement(BoundLabeledStatement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLabel(BoundLabel node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitStatementList(BoundStatementList node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConditionalGoto(BoundConditionalGoto node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSwitchExpressionArm(BoundSwitchExpressionArm node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUnconvertedSwitchExpression(BoundUnconvertedSwitchExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConvertedSwitchExpression(BoundConvertedSwitchExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDecisionDag(BoundDecisionDag node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitEvaluationDecisionDagNode(BoundEvaluationDecisionDagNode node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTestDecisionDagNode(BoundTestDecisionDagNode node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitWhenDecisionDagNode(BoundWhenDecisionDagNode node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLeafDecisionDagNode(BoundLeafDecisionDagNode node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagTemp(BoundDagTemp node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagTypeTest(BoundDagTypeTest node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagNonNullTest(BoundDagNonNullTest node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagExplicitNullTest(BoundDagExplicitNullTest node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagValueTest(BoundDagValueTest node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagRelationalTest(BoundDagRelationalTest node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagDeconstructEvaluation(BoundDagDeconstructEvaluation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagTypeEvaluation(BoundDagTypeEvaluation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagFieldEvaluation(BoundDagFieldEvaluation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagPropertyEvaluation(BoundDagPropertyEvaluation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagIndexEvaluation(BoundDagIndexEvaluation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagIndexerEvaluation(BoundDagIndexerEvaluation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagSliceEvaluation(BoundDagSliceEvaluation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDagAssignmentEvaluation(BoundDagAssignmentEvaluation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSwitchSection(BoundSwitchSection node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSwitchLabel(BoundSwitchLabel node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSequencePointExpression(BoundSequencePointExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSequence(BoundSequence node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSpillSequence(BoundSpillSequence node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDynamicMemberAccess(BoundDynamicMemberAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDynamicInvocation(BoundDynamicInvocation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConditionalAccess(BoundConditionalAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLoweredConditionalAccess(BoundLoweredConditionalAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConditionalReceiver(BoundConditionalReceiver node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitComplexConditionalReceiver(BoundComplexConditionalReceiver node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitMethodGroup(BoundMethodGroup node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPropertyGroup(BoundPropertyGroup node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitCall(BoundCall node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitEventAssignmentOperator(BoundEventAssignmentOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitAttribute(BoundAttribute node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUnconvertedObjectCreationExpression(BoundUnconvertedObjectCreationExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitObjectCreationExpression(BoundObjectCreationExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUnconvertedCollectionExpression(BoundUnconvertedCollectionExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitCollectionExpression(BoundCollectionExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitCollectionExpressionSpreadExpressionPlaceholder(BoundCollectionExpressionSpreadExpressionPlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitCollectionExpressionSpreadElement(BoundCollectionExpressionSpreadElement node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTupleLiteral(BoundTupleLiteral node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConvertedTupleLiteral(BoundConvertedTupleLiteral node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDynamicObjectCreationExpression(BoundDynamicObjectCreationExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitNoPiaObjectCreationExpression(BoundNoPiaObjectCreationExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitObjectInitializerExpression(BoundObjectInitializerExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitObjectInitializerMember(BoundObjectInitializerMember node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDynamicObjectInitializerMember(BoundDynamicObjectInitializerMember node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitCollectionInitializerExpression(BoundCollectionInitializerExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitCollectionElementInitializer(BoundCollectionElementInitializer node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDynamicCollectionElementInitializer(BoundDynamicCollectionElementInitializer node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitImplicitReceiver(BoundImplicitReceiver node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitAnonymousObjectCreationExpression(BoundAnonymousObjectCreationExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitAnonymousPropertyDeclaration(BoundAnonymousPropertyDeclaration node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitNewT(BoundNewT node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDelegateCreationExpression(BoundDelegateCreationExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitArrayCreation(BoundArrayCreation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitArrayInitialization(BoundArrayInitialization node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitStackAllocArrayCreation(BoundStackAllocArrayCreation node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConvertedStackAllocExpression(BoundConvertedStackAllocExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitFieldAccess(BoundFieldAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitHoistedFieldAccess(BoundHoistedFieldAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPropertyAccess(BoundPropertyAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitEventAccess(BoundEventAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitIndexerAccess(BoundIndexerAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitImplicitIndexerAccess(BoundImplicitIndexerAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitInlineArrayAccess(BoundInlineArrayAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDynamicIndexerAccess(BoundDynamicIndexerAccess node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitLambda(BoundLambda node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUnboundLambda(UnboundLambda node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitQueryClause(BoundQueryClause node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTypeOrInstanceInitializers(BoundTypeOrInstanceInitializers node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitNameOfOperator(BoundNameOfOperator node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitUnconvertedInterpolatedString(BoundUnconvertedInterpolatedString node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitInterpolatedString(BoundInterpolatedString node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitInterpolatedStringHandlerPlaceholder(BoundInterpolatedStringHandlerPlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitInterpolatedStringArgumentPlaceholder(BoundInterpolatedStringArgumentPlaceholder node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitStringInsert(BoundStringInsert node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitIsPatternExpression(BoundIsPatternExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConstantPattern(BoundConstantPattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDiscardPattern(BoundDiscardPattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDeclarationPattern(BoundDeclarationPattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitRecursivePattern(BoundRecursivePattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitListPattern(BoundListPattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitSlicePattern(BoundSlicePattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitITuplePattern(BoundITuplePattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPositionalSubpattern(BoundPositionalSubpattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPropertySubpattern(BoundPropertySubpattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitPropertySubpatternMember(BoundPropertySubpatternMember node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitTypePattern(BoundTypePattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitBinaryPattern(BoundBinaryPattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitNegatedPattern(BoundNegatedPattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitRelationalPattern(BoundRelationalPattern node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDiscardExpression(BoundDiscardExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitThrowExpression(BoundThrowExpression node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitOutVariablePendingInference(OutVariablePendingInference node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitDeconstructionVariablePendingInference(DeconstructionVariablePendingInference node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitOutDeconstructVarPendingInference(OutDeconstructVarPendingInference node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitNonConstructorMethodBody(BoundNonConstructorMethodBody node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitConstructorMethodBody(BoundConstructorMethodBody node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitExpressionWithNullability(BoundExpressionWithNullability node, A arg) { return DefaultVisit(node, arg); } public virtual R VisitWithExpression(BoundWithExpression node, A arg) { return DefaultVisit(node, arg); } } internal abstract class BoundTreeVisitor { public class CancelledByStackGuardException : Exception { public readonly BoundNode Node; public CancelledByStackGuardException(Exception inner, BoundNode node) : base(inner.Message, inner) { Node = node; } public void AddAnError(DiagnosticBag diagnostics) { diagnostics.Add(ErrorCode.ERR_InsufficientStack, GetTooLongOrComplexExpressionErrorLocation(Node)); } public void AddAnError(BindingDiagnosticBag diagnostics) { diagnostics.Add(ErrorCode.ERR_InsufficientStack, GetTooLongOrComplexExpressionErrorLocation(Node)); } public static Location GetTooLongOrComplexExpressionErrorLocation(BoundNode node) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) SyntaxNode val = node.Syntax; if (!(val is ExpressionSyntax)) { val = (SyntaxNode)(((object)val.DescendantNodes((Func)((SyntaxNode n) => !(n is ExpressionSyntax)), false).OfType().FirstOrDefault()) ?? ((object)val)); } SyntaxToken firstToken = val.GetFirstToken(false, false, false, false); return ((SyntaxToken)(ref firstToken)).GetLocation(); } } [DebuggerHidden] public virtual BoundNode Visit(BoundNode node) { return node?.Accept(this); } [DebuggerHidden] public virtual BoundNode DefaultVisit(BoundNode node) { return null; } [DebuggerStepThrough] protected BoundExpression VisitExpressionWithStackGuard(ref int recursionDepth, BoundExpression node) { recursionDepth++; BoundExpression result; if (recursionDepth > 1 || !ConvertInsufficientExecutionStackExceptionToCancelledByStackGuardException()) { EnsureSufficientExecutionStack(recursionDepth); result = VisitExpressionWithoutStackGuard(node); } else { result = VisitExpressionWithStackGuard(node); } recursionDepth--; return result; } protected virtual void EnsureSufficientExecutionStack(int recursionDepth) { StackGuard.EnsureSufficientExecutionStack(recursionDepth); } protected virtual bool ConvertInsufficientExecutionStackExceptionToCancelledByStackGuardException() { return true; } [DebuggerStepThrough] private BoundExpression? VisitExpressionWithStackGuard(BoundExpression node) { try { return VisitExpressionWithoutStackGuard(node); } catch (InsufficientExecutionStackException inner) { throw new CancelledByStackGuardException(inner, node); } } protected abstract BoundExpression? VisitExpressionWithoutStackGuard(BoundExpression node); public virtual BoundNode? VisitFieldEqualsValue(BoundFieldEqualsValue node) { return DefaultVisit(node); } public virtual BoundNode? VisitPropertyEqualsValue(BoundPropertyEqualsValue node) { return DefaultVisit(node); } public virtual BoundNode? VisitParameterEqualsValue(BoundParameterEqualsValue node) { return DefaultVisit(node); } public virtual BoundNode? VisitGlobalStatementInitializer(BoundGlobalStatementInitializer node) { return DefaultVisit(node); } public virtual BoundNode? VisitValuePlaceholder(BoundValuePlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitCapturedReceiverPlaceholder(BoundCapturedReceiverPlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitDeconstructValuePlaceholder(BoundDeconstructValuePlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitTupleOperandPlaceholder(BoundTupleOperandPlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitAwaitableValuePlaceholder(BoundAwaitableValuePlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitDisposableValuePlaceholder(BoundDisposableValuePlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitObjectOrCollectionValuePlaceholder(BoundObjectOrCollectionValuePlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitImplicitIndexerValuePlaceholder(BoundImplicitIndexerValuePlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitImplicitIndexerReceiverPlaceholder(BoundImplicitIndexerReceiverPlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitListPatternReceiverPlaceholder(BoundListPatternReceiverPlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitListPatternIndexPlaceholder(BoundListPatternIndexPlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitSlicePatternReceiverPlaceholder(BoundSlicePatternReceiverPlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitSlicePatternRangePlaceholder(BoundSlicePatternRangePlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitDup(BoundDup node) { return DefaultVisit(node); } public virtual BoundNode? VisitPassByCopy(BoundPassByCopy node) { return DefaultVisit(node); } public virtual BoundNode? VisitBadExpression(BoundBadExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitBadStatement(BoundBadStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitExtractedFinallyBlock(BoundExtractedFinallyBlock node) { return DefaultVisit(node); } public virtual BoundNode? VisitTypeExpression(BoundTypeExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitTypeOrValueExpression(BoundTypeOrValueExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitNamespaceExpression(BoundNamespaceExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitUnaryOperator(BoundUnaryOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitIncrementOperator(BoundIncrementOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitAddressOfOperator(BoundAddressOfOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitUnconvertedAddressOfOperator(BoundUnconvertedAddressOfOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitFunctionPointerLoad(BoundFunctionPointerLoad node) { return DefaultVisit(node); } public virtual BoundNode? VisitPointerIndirectionOperator(BoundPointerIndirectionOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitPointerElementAccess(BoundPointerElementAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitFunctionPointerInvocation(BoundFunctionPointerInvocation node) { return DefaultVisit(node); } public virtual BoundNode? VisitRefTypeOperator(BoundRefTypeOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitMakeRefOperator(BoundMakeRefOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitRefValueOperator(BoundRefValueOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitFromEndIndexExpression(BoundFromEndIndexExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitRangeExpression(BoundRangeExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitBinaryOperator(BoundBinaryOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitTupleBinaryOperator(BoundTupleBinaryOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitUserDefinedConditionalLogicalOperator(BoundUserDefinedConditionalLogicalOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitCompoundAssignmentOperator(BoundCompoundAssignmentOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitAssignmentOperator(BoundAssignmentOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitDeconstructionAssignmentOperator(BoundDeconstructionAssignmentOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitNullCoalescingOperator(BoundNullCoalescingOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitNullCoalescingAssignmentOperator(BoundNullCoalescingAssignmentOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitUnconvertedConditionalOperator(BoundUnconvertedConditionalOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitConditionalOperator(BoundConditionalOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitArrayAccess(BoundArrayAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitArrayLength(BoundArrayLength node) { return DefaultVisit(node); } public virtual BoundNode? VisitAwaitableInfo(BoundAwaitableInfo node) { return DefaultVisit(node); } public virtual BoundNode? VisitAwaitExpression(BoundAwaitExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitTypeOfOperator(BoundTypeOfOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitBlockInstrumentation(BoundBlockInstrumentation node) { return DefaultVisit(node); } public virtual BoundNode? VisitMethodDefIndex(BoundMethodDefIndex node) { return DefaultVisit(node); } public virtual BoundNode? VisitLocalId(BoundLocalId node) { return DefaultVisit(node); } public virtual BoundNode? VisitParameterId(BoundParameterId node) { return DefaultVisit(node); } public virtual BoundNode? VisitStateMachineInstanceId(BoundStateMachineInstanceId node) { return DefaultVisit(node); } public virtual BoundNode? VisitMaximumMethodDefIndex(BoundMaximumMethodDefIndex node) { return DefaultVisit(node); } public virtual BoundNode? VisitInstrumentationPayloadRoot(BoundInstrumentationPayloadRoot node) { return DefaultVisit(node); } public virtual BoundNode? VisitModuleVersionId(BoundModuleVersionId node) { return DefaultVisit(node); } public virtual BoundNode? VisitModuleVersionIdString(BoundModuleVersionIdString node) { return DefaultVisit(node); } public virtual BoundNode? VisitSourceDocumentIndex(BoundSourceDocumentIndex node) { return DefaultVisit(node); } public virtual BoundNode? VisitMethodInfo(BoundMethodInfo node) { return DefaultVisit(node); } public virtual BoundNode? VisitFieldInfo(BoundFieldInfo node) { return DefaultVisit(node); } public virtual BoundNode? VisitDefaultLiteral(BoundDefaultLiteral node) { return DefaultVisit(node); } public virtual BoundNode? VisitDefaultExpression(BoundDefaultExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitIsOperator(BoundIsOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitAsOperator(BoundAsOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitSizeOfOperator(BoundSizeOfOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitConversion(BoundConversion node) { return DefaultVisit(node); } public virtual BoundNode? VisitReadOnlySpanFromArray(BoundReadOnlySpanFromArray node) { return DefaultVisit(node); } public virtual BoundNode? VisitArgList(BoundArgList node) { return DefaultVisit(node); } public virtual BoundNode? VisitArgListOperator(BoundArgListOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitFixedLocalCollectionInitializer(BoundFixedLocalCollectionInitializer node) { return DefaultVisit(node); } public virtual BoundNode? VisitSequencePoint(BoundSequencePoint node) { return DefaultVisit(node); } public virtual BoundNode? VisitSequencePointWithSpan(BoundSequencePointWithSpan node) { return DefaultVisit(node); } public virtual BoundNode? VisitSavePreviousSequencePoint(BoundSavePreviousSequencePoint node) { return DefaultVisit(node); } public virtual BoundNode? VisitRestorePreviousSequencePoint(BoundRestorePreviousSequencePoint node) { return DefaultVisit(node); } public virtual BoundNode? VisitStepThroughSequencePoint(BoundStepThroughSequencePoint node) { return DefaultVisit(node); } public virtual BoundNode? VisitBlock(BoundBlock node) { return DefaultVisit(node); } public virtual BoundNode? VisitScope(BoundScope node) { return DefaultVisit(node); } public virtual BoundNode? VisitStateMachineScope(BoundStateMachineScope node) { return DefaultVisit(node); } public virtual BoundNode? VisitLocalDeclaration(BoundLocalDeclaration node) { return DefaultVisit(node); } public virtual BoundNode? VisitMultipleLocalDeclarations(BoundMultipleLocalDeclarations node) { return DefaultVisit(node); } public virtual BoundNode? VisitUsingLocalDeclarations(BoundUsingLocalDeclarations node) { return DefaultVisit(node); } public virtual BoundNode? VisitLocalFunctionStatement(BoundLocalFunctionStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitNoOpStatement(BoundNoOpStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitReturnStatement(BoundReturnStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitYieldReturnStatement(BoundYieldReturnStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitYieldBreakStatement(BoundYieldBreakStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitThrowStatement(BoundThrowStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitExpressionStatement(BoundExpressionStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitBreakStatement(BoundBreakStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitContinueStatement(BoundContinueStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitSwitchStatement(BoundSwitchStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitSwitchDispatch(BoundSwitchDispatch node) { return DefaultVisit(node); } public virtual BoundNode? VisitIfStatement(BoundIfStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitDoStatement(BoundDoStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitWhileStatement(BoundWhileStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitForStatement(BoundForStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitForEachStatement(BoundForEachStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitForEachDeconstructStep(BoundForEachDeconstructStep node) { return DefaultVisit(node); } public virtual BoundNode? VisitUsingStatement(BoundUsingStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitFixedStatement(BoundFixedStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitLockStatement(BoundLockStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitTryStatement(BoundTryStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitCatchBlock(BoundCatchBlock node) { return DefaultVisit(node); } public virtual BoundNode? VisitLiteral(BoundLiteral node) { return DefaultVisit(node); } public virtual BoundNode? VisitUtf8String(BoundUtf8String node) { return DefaultVisit(node); } public virtual BoundNode? VisitThisReference(BoundThisReference node) { return DefaultVisit(node); } public virtual BoundNode? VisitPreviousSubmissionReference(BoundPreviousSubmissionReference node) { return DefaultVisit(node); } public virtual BoundNode? VisitHostObjectMemberReference(BoundHostObjectMemberReference node) { return DefaultVisit(node); } public virtual BoundNode? VisitBaseReference(BoundBaseReference node) { return DefaultVisit(node); } public virtual BoundNode? VisitLocal(BoundLocal node) { return DefaultVisit(node); } public virtual BoundNode? VisitPseudoVariable(BoundPseudoVariable node) { return DefaultVisit(node); } public virtual BoundNode? VisitRangeVariable(BoundRangeVariable node) { return DefaultVisit(node); } public virtual BoundNode? VisitParameter(BoundParameter node) { return DefaultVisit(node); } public virtual BoundNode? VisitLabelStatement(BoundLabelStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitGotoStatement(BoundGotoStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitLabeledStatement(BoundLabeledStatement node) { return DefaultVisit(node); } public virtual BoundNode? VisitLabel(BoundLabel node) { return DefaultVisit(node); } public virtual BoundNode? VisitStatementList(BoundStatementList node) { return DefaultVisit(node); } public virtual BoundNode? VisitConditionalGoto(BoundConditionalGoto node) { return DefaultVisit(node); } public virtual BoundNode? VisitSwitchExpressionArm(BoundSwitchExpressionArm node) { return DefaultVisit(node); } public virtual BoundNode? VisitUnconvertedSwitchExpression(BoundUnconvertedSwitchExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitConvertedSwitchExpression(BoundConvertedSwitchExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitDecisionDag(BoundDecisionDag node) { return DefaultVisit(node); } public virtual BoundNode? VisitEvaluationDecisionDagNode(BoundEvaluationDecisionDagNode node) { return DefaultVisit(node); } public virtual BoundNode? VisitTestDecisionDagNode(BoundTestDecisionDagNode node) { return DefaultVisit(node); } public virtual BoundNode? VisitWhenDecisionDagNode(BoundWhenDecisionDagNode node) { return DefaultVisit(node); } public virtual BoundNode? VisitLeafDecisionDagNode(BoundLeafDecisionDagNode node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagTemp(BoundDagTemp node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagTypeTest(BoundDagTypeTest node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagNonNullTest(BoundDagNonNullTest node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagExplicitNullTest(BoundDagExplicitNullTest node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagValueTest(BoundDagValueTest node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagRelationalTest(BoundDagRelationalTest node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagDeconstructEvaluation(BoundDagDeconstructEvaluation node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagTypeEvaluation(BoundDagTypeEvaluation node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagFieldEvaluation(BoundDagFieldEvaluation node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagPropertyEvaluation(BoundDagPropertyEvaluation node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagIndexEvaluation(BoundDagIndexEvaluation node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagIndexerEvaluation(BoundDagIndexerEvaluation node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagSliceEvaluation(BoundDagSliceEvaluation node) { return DefaultVisit(node); } public virtual BoundNode? VisitDagAssignmentEvaluation(BoundDagAssignmentEvaluation node) { return DefaultVisit(node); } public virtual BoundNode? VisitSwitchSection(BoundSwitchSection node) { return DefaultVisit(node); } public virtual BoundNode? VisitSwitchLabel(BoundSwitchLabel node) { return DefaultVisit(node); } public virtual BoundNode? VisitSequencePointExpression(BoundSequencePointExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitSequence(BoundSequence node) { return DefaultVisit(node); } public virtual BoundNode? VisitSpillSequence(BoundSpillSequence node) { return DefaultVisit(node); } public virtual BoundNode? VisitDynamicMemberAccess(BoundDynamicMemberAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitDynamicInvocation(BoundDynamicInvocation node) { return DefaultVisit(node); } public virtual BoundNode? VisitConditionalAccess(BoundConditionalAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitLoweredConditionalAccess(BoundLoweredConditionalAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitConditionalReceiver(BoundConditionalReceiver node) { return DefaultVisit(node); } public virtual BoundNode? VisitComplexConditionalReceiver(BoundComplexConditionalReceiver node) { return DefaultVisit(node); } public virtual BoundNode? VisitMethodGroup(BoundMethodGroup node) { return DefaultVisit(node); } public virtual BoundNode? VisitPropertyGroup(BoundPropertyGroup node) { return DefaultVisit(node); } public virtual BoundNode? VisitCall(BoundCall node) { return DefaultVisit(node); } public virtual BoundNode? VisitEventAssignmentOperator(BoundEventAssignmentOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitAttribute(BoundAttribute node) { return DefaultVisit(node); } public virtual BoundNode? VisitUnconvertedObjectCreationExpression(BoundUnconvertedObjectCreationExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitObjectCreationExpression(BoundObjectCreationExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitUnconvertedCollectionExpression(BoundUnconvertedCollectionExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitCollectionExpression(BoundCollectionExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitCollectionExpressionSpreadExpressionPlaceholder(BoundCollectionExpressionSpreadExpressionPlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitCollectionExpressionSpreadElement(BoundCollectionExpressionSpreadElement node) { return DefaultVisit(node); } public virtual BoundNode? VisitTupleLiteral(BoundTupleLiteral node) { return DefaultVisit(node); } public virtual BoundNode? VisitConvertedTupleLiteral(BoundConvertedTupleLiteral node) { return DefaultVisit(node); } public virtual BoundNode? VisitDynamicObjectCreationExpression(BoundDynamicObjectCreationExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitNoPiaObjectCreationExpression(BoundNoPiaObjectCreationExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitObjectInitializerExpression(BoundObjectInitializerExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitObjectInitializerMember(BoundObjectInitializerMember node) { return DefaultVisit(node); } public virtual BoundNode? VisitDynamicObjectInitializerMember(BoundDynamicObjectInitializerMember node) { return DefaultVisit(node); } public virtual BoundNode? VisitCollectionInitializerExpression(BoundCollectionInitializerExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitCollectionElementInitializer(BoundCollectionElementInitializer node) { return DefaultVisit(node); } public virtual BoundNode? VisitDynamicCollectionElementInitializer(BoundDynamicCollectionElementInitializer node) { return DefaultVisit(node); } public virtual BoundNode? VisitImplicitReceiver(BoundImplicitReceiver node) { return DefaultVisit(node); } public virtual BoundNode? VisitAnonymousObjectCreationExpression(BoundAnonymousObjectCreationExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitAnonymousPropertyDeclaration(BoundAnonymousPropertyDeclaration node) { return DefaultVisit(node); } public virtual BoundNode? VisitNewT(BoundNewT node) { return DefaultVisit(node); } public virtual BoundNode? VisitDelegateCreationExpression(BoundDelegateCreationExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitArrayCreation(BoundArrayCreation node) { return DefaultVisit(node); } public virtual BoundNode? VisitArrayInitialization(BoundArrayInitialization node) { return DefaultVisit(node); } public virtual BoundNode? VisitStackAllocArrayCreation(BoundStackAllocArrayCreation node) { return DefaultVisit(node); } public virtual BoundNode? VisitConvertedStackAllocExpression(BoundConvertedStackAllocExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitFieldAccess(BoundFieldAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitHoistedFieldAccess(BoundHoistedFieldAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitPropertyAccess(BoundPropertyAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitEventAccess(BoundEventAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitIndexerAccess(BoundIndexerAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitImplicitIndexerAccess(BoundImplicitIndexerAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitInlineArrayAccess(BoundInlineArrayAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitDynamicIndexerAccess(BoundDynamicIndexerAccess node) { return DefaultVisit(node); } public virtual BoundNode? VisitLambda(BoundLambda node) { return DefaultVisit(node); } public virtual BoundNode? VisitUnboundLambda(UnboundLambda node) { return DefaultVisit(node); } public virtual BoundNode? VisitQueryClause(BoundQueryClause node) { return DefaultVisit(node); } public virtual BoundNode? VisitTypeOrInstanceInitializers(BoundTypeOrInstanceInitializers node) { return DefaultVisit(node); } public virtual BoundNode? VisitNameOfOperator(BoundNameOfOperator node) { return DefaultVisit(node); } public virtual BoundNode? VisitUnconvertedInterpolatedString(BoundUnconvertedInterpolatedString node) { return DefaultVisit(node); } public virtual BoundNode? VisitInterpolatedString(BoundInterpolatedString node) { return DefaultVisit(node); } public virtual BoundNode? VisitInterpolatedStringHandlerPlaceholder(BoundInterpolatedStringHandlerPlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitInterpolatedStringArgumentPlaceholder(BoundInterpolatedStringArgumentPlaceholder node) { return DefaultVisit(node); } public virtual BoundNode? VisitStringInsert(BoundStringInsert node) { return DefaultVisit(node); } public virtual BoundNode? VisitIsPatternExpression(BoundIsPatternExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitConstantPattern(BoundConstantPattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitDiscardPattern(BoundDiscardPattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitDeclarationPattern(BoundDeclarationPattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitRecursivePattern(BoundRecursivePattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitListPattern(BoundListPattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitSlicePattern(BoundSlicePattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitITuplePattern(BoundITuplePattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitPositionalSubpattern(BoundPositionalSubpattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitPropertySubpattern(BoundPropertySubpattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitPropertySubpatternMember(BoundPropertySubpatternMember node) { return DefaultVisit(node); } public virtual BoundNode? VisitTypePattern(BoundTypePattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitBinaryPattern(BoundBinaryPattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitNegatedPattern(BoundNegatedPattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitRelationalPattern(BoundRelationalPattern node) { return DefaultVisit(node); } public virtual BoundNode? VisitDiscardExpression(BoundDiscardExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitThrowExpression(BoundThrowExpression node) { return DefaultVisit(node); } public virtual BoundNode? VisitOutVariablePendingInference(OutVariablePendingInference node) { return DefaultVisit(node); } public virtual BoundNode? VisitDeconstructionVariablePendingInference(DeconstructionVariablePendingInference node) { return DefaultVisit(node); } public virtual BoundNode? VisitOutDeconstructVarPendingInference(OutDeconstructVarPendingInference node) { return DefaultVisit(node); } public virtual BoundNode? VisitNonConstructorMethodBody(BoundNonConstructorMethodBody node) { return DefaultVisit(node); } public virtual BoundNode? VisitConstructorMethodBody(BoundConstructorMethodBody node) { return DefaultVisit(node); } public virtual BoundNode? VisitExpressionWithNullability(BoundExpressionWithNullability node) { return DefaultVisit(node); } public virtual BoundNode? VisitWithExpression(BoundWithExpression node) { return DefaultVisit(node); } }