in src/Compilers/CSharp/Portable/Operations/CSharpOperationFactory.cs [45:258]
private IOperation CreateInternal(BoundNode boundNode)
{
switch (boundNode.Kind)
{
case BoundKind.DeconstructValuePlaceholder:
return CreateBoundDeconstructValuePlaceholderOperation((BoundDeconstructValuePlaceholder)boundNode);
case BoundKind.DeconstructionAssignmentOperator:
return CreateBoundDeconstructionAssignmentOperator((BoundDeconstructionAssignmentOperator)boundNode);
case BoundKind.Call:
return CreateBoundCallOperation((BoundCall)boundNode);
case BoundKind.Local:
return CreateBoundLocalOperation((BoundLocal)boundNode);
case BoundKind.FieldAccess:
return CreateBoundFieldAccessOperation((BoundFieldAccess)boundNode);
case BoundKind.PropertyAccess:
return CreateBoundPropertyAccessOperation((BoundPropertyAccess)boundNode);
case BoundKind.IndexerAccess:
return CreateBoundIndexerAccessOperation((BoundIndexerAccess)boundNode);
case BoundKind.EventAccess:
return CreateBoundEventAccessOperation((BoundEventAccess)boundNode);
case BoundKind.EventAssignmentOperator:
return CreateBoundEventAssignmentOperatorOperation((BoundEventAssignmentOperator)boundNode);
case BoundKind.Parameter:
return CreateBoundParameterOperation((BoundParameter)boundNode);
case BoundKind.Literal:
return CreateBoundLiteralOperation((BoundLiteral)boundNode);
case BoundKind.DynamicInvocation:
return CreateBoundDynamicInvocationExpressionOperation((BoundDynamicInvocation)boundNode);
case BoundKind.DynamicIndexerAccess:
return CreateBoundDynamicIndexerAccessExpressionOperation((BoundDynamicIndexerAccess)boundNode);
case BoundKind.ObjectCreationExpression:
return CreateBoundObjectCreationExpressionOperation((BoundObjectCreationExpression)boundNode);
case BoundKind.DynamicObjectCreationExpression:
return CreateBoundDynamicObjectCreationExpressionOperation((BoundDynamicObjectCreationExpression)boundNode);
case BoundKind.ObjectInitializerExpression:
return CreateBoundObjectInitializerExpressionOperation((BoundObjectInitializerExpression)boundNode);
case BoundKind.CollectionInitializerExpression:
return CreateBoundCollectionInitializerExpressionOperation((BoundCollectionInitializerExpression)boundNode);
case BoundKind.ObjectInitializerMember:
return CreateBoundObjectInitializerMemberOperation((BoundObjectInitializerMember)boundNode);
case BoundKind.CollectionElementInitializer:
return CreateBoundCollectionElementInitializerOperation((BoundCollectionElementInitializer)boundNode);
case BoundKind.DynamicMemberAccess:
return CreateBoundDynamicMemberAccessOperation((BoundDynamicMemberAccess)boundNode);
case BoundKind.DynamicCollectionElementInitializer:
return CreateBoundDynamicCollectionElementInitializerOperation((BoundDynamicCollectionElementInitializer)boundNode);
case BoundKind.UnboundLambda:
return CreateUnboundLambdaOperation((UnboundLambda)boundNode);
case BoundKind.Lambda:
return CreateBoundLambdaOperation((BoundLambda)boundNode);
case BoundKind.Conversion:
return CreateBoundConversionOperation((BoundConversion)boundNode);
case BoundKind.AsOperator:
return CreateBoundAsOperatorOperation((BoundAsOperator)boundNode);
case BoundKind.IsOperator:
return CreateBoundIsOperatorOperation((BoundIsOperator)boundNode);
case BoundKind.SizeOfOperator:
return CreateBoundSizeOfOperatorOperation((BoundSizeOfOperator)boundNode);
case BoundKind.TypeOfOperator:
return CreateBoundTypeOfOperatorOperation((BoundTypeOfOperator)boundNode);
case BoundKind.ArrayCreation:
return CreateBoundArrayCreationOperation((BoundArrayCreation)boundNode);
case BoundKind.ArrayInitialization:
return CreateBoundArrayInitializationOperation((BoundArrayInitialization)boundNode);
case BoundKind.DefaultExpression:
return CreateBoundDefaultExpressionOperation((BoundDefaultExpression)boundNode);
case BoundKind.BaseReference:
return CreateBoundBaseReferenceOperation((BoundBaseReference)boundNode);
case BoundKind.ThisReference:
return CreateBoundThisReferenceOperation((BoundThisReference)boundNode);
case BoundKind.AssignmentOperator:
return CreateBoundAssignmentOperatorOrMemberInitializerOperation((BoundAssignmentOperator)boundNode);
case BoundKind.CompoundAssignmentOperator:
return CreateBoundCompoundAssignmentOperatorOperation((BoundCompoundAssignmentOperator)boundNode);
case BoundKind.IncrementOperator:
return CreateBoundIncrementOperatorOperation((BoundIncrementOperator)boundNode);
case BoundKind.BadExpression:
return CreateBoundBadExpressionOperation((BoundBadExpression)boundNode);
case BoundKind.NewT:
return CreateBoundNewTOperation((BoundNewT)boundNode);
case BoundKind.UnaryOperator:
return CreateBoundUnaryOperatorOperation((BoundUnaryOperator)boundNode);
case BoundKind.BinaryOperator:
return CreateBoundBinaryOperatorOperation((BoundBinaryOperator)boundNode);
case BoundKind.ConditionalOperator:
return CreateBoundConditionalOperatorOperation((BoundConditionalOperator)boundNode);
case BoundKind.NullCoalescingOperator:
return CreateBoundNullCoalescingOperatorOperation((BoundNullCoalescingOperator)boundNode);
case BoundKind.AwaitExpression:
return CreateBoundAwaitExpressionOperation((BoundAwaitExpression)boundNode);
case BoundKind.ArrayAccess:
return CreateBoundArrayAccessOperation((BoundArrayAccess)boundNode);
case BoundKind.NameOfOperator:
return CreateBoundNameOfOperatorOperation((BoundNameOfOperator)boundNode);
case BoundKind.ThrowExpression:
return CreateBoundThrowExpressionOperation((BoundThrowExpression)boundNode);
case BoundKind.AddressOfOperator:
return CreateBoundAddressOfOperatorOperation((BoundAddressOfOperator)boundNode);
case BoundKind.ImplicitReceiver:
return CreateBoundImplicitReceiverOperation((BoundImplicitReceiver)boundNode);
case BoundKind.ConditionalAccess:
return CreateBoundConditionalAccessOperation((BoundConditionalAccess)boundNode);
case BoundKind.ConditionalReceiver:
return CreateBoundConditionalReceiverOperation((BoundConditionalReceiver)boundNode);
case BoundKind.FieldEqualsValue:
return CreateBoundFieldEqualsValueOperation((BoundFieldEqualsValue)boundNode);
case BoundKind.PropertyEqualsValue:
return CreateBoundPropertyEqualsValueOperation((BoundPropertyEqualsValue)boundNode);
case BoundKind.ParameterEqualsValue:
return CreateBoundParameterEqualsValueOperation((BoundParameterEqualsValue)boundNode);
case BoundKind.Block:
return CreateBoundBlockOperation((BoundBlock)boundNode);
case BoundKind.ContinueStatement:
return CreateBoundContinueStatementOperation((BoundContinueStatement)boundNode);
case BoundKind.BreakStatement:
return CreateBoundBreakStatementOperation((BoundBreakStatement)boundNode);
case BoundKind.YieldBreakStatement:
return CreateBoundYieldBreakStatementOperation((BoundYieldBreakStatement)boundNode);
case BoundKind.GotoStatement:
return CreateBoundGotoStatementOperation((BoundGotoStatement)boundNode);
case BoundKind.NoOpStatement:
return CreateBoundNoOpStatementOperation((BoundNoOpStatement)boundNode);
case BoundKind.IfStatement:
return CreateBoundIfStatementOperation((BoundIfStatement)boundNode);
case BoundKind.WhileStatement:
return CreateBoundWhileStatementOperation((BoundWhileStatement)boundNode);
case BoundKind.DoStatement:
return CreateBoundDoStatementOperation((BoundDoStatement)boundNode);
case BoundKind.ForStatement:
return CreateBoundForStatementOperation((BoundForStatement)boundNode);
case BoundKind.ForEachStatement:
return CreateBoundForEachStatementOperation((BoundForEachStatement)boundNode);
case BoundKind.SwitchStatement:
return CreateBoundSwitchStatementOperation((BoundSwitchStatement)boundNode);
case BoundKind.SwitchLabel:
return CreateBoundSwitchLabelOperation((BoundSwitchLabel)boundNode);
case BoundKind.TryStatement:
return CreateBoundTryStatementOperation((BoundTryStatement)boundNode);
case BoundKind.CatchBlock:
return CreateBoundCatchBlockOperation((BoundCatchBlock)boundNode);
// https://github.com/dotnet/roslyn/issues/21281
//case BoundKind.FixedStatement:
// return CreateBoundFixedStatementOperation((BoundFixedStatement)boundNode);
case BoundKind.UsingStatement:
return CreateBoundUsingStatementOperation((BoundUsingStatement)boundNode);
case BoundKind.ThrowStatement:
return CreateBoundThrowStatementOperation((BoundThrowStatement)boundNode);
case BoundKind.ReturnStatement:
return CreateBoundReturnStatementOperation((BoundReturnStatement)boundNode);
case BoundKind.YieldReturnStatement:
return CreateBoundYieldReturnStatementOperation((BoundYieldReturnStatement)boundNode);
case BoundKind.LockStatement:
return CreateBoundLockStatementOperation((BoundLockStatement)boundNode);
case BoundKind.BadStatement:
return CreateBoundBadStatementOperation((BoundBadStatement)boundNode);
case BoundKind.LocalDeclaration:
return CreateBoundLocalDeclarationOperation((BoundLocalDeclaration)boundNode);
case BoundKind.MultipleLocalDeclarations:
return CreateBoundMultipleLocalDeclarationsOperation((BoundMultipleLocalDeclarations)boundNode);
case BoundKind.LabelStatement:
return CreateBoundLabelStatementOperation((BoundLabelStatement)boundNode);
case BoundKind.LabeledStatement:
return CreateBoundLabeledStatementOperation((BoundLabeledStatement)boundNode);
case BoundKind.ExpressionStatement:
return CreateBoundExpressionStatementOperation((BoundExpressionStatement)boundNode);
case BoundKind.TupleLiteral:
return CreateBoundTupleLiteralOperation((BoundTupleLiteral)boundNode);
case BoundKind.ConvertedTupleLiteral:
return CreateBoundConvertedTupleLiteralOperation((BoundConvertedTupleLiteral)boundNode);
case BoundKind.InterpolatedString:
return CreateBoundInterpolatedStringExpressionOperation((BoundInterpolatedString)boundNode);
case BoundKind.StringInsert:
return CreateBoundInterpolationOperation((BoundStringInsert)boundNode);
case BoundKind.LocalFunctionStatement:
return CreateBoundLocalFunctionStatementOperation((BoundLocalFunctionStatement)boundNode);
case BoundKind.AnonymousObjectCreationExpression:
return CreateBoundAnonymousObjectCreationExpressionOperation((BoundAnonymousObjectCreationExpression)boundNode);
case BoundKind.AnonymousPropertyDeclaration:
return CreateBoundAnonymousPropertyDeclarationOperation((BoundAnonymousPropertyDeclaration)boundNode);
case BoundKind.ConstantPattern:
return CreateBoundConstantPatternOperation((BoundConstantPattern)boundNode);
case BoundKind.DeclarationPattern:
return CreateBoundDeclarationPatternOperation((BoundDeclarationPattern)boundNode);
case BoundKind.WildcardPattern:
throw ExceptionUtilities.Unreachable;
case BoundKind.PatternSwitchStatement:
return CreateBoundPatternSwitchStatementOperation((BoundPatternSwitchStatement)boundNode);
case BoundKind.PatternSwitchLabel:
return CreateBoundPatternSwitchLabelOperation((BoundPatternSwitchLabel)boundNode);
case BoundKind.IsPatternExpression:
return CreateBoundIsPatternExpressionOperation((BoundIsPatternExpression)boundNode);
case BoundKind.QueryClause:
return CreateBoundQueryClauseOperation((BoundQueryClause)boundNode);
case BoundKind.DelegateCreationExpression:
return CreateBoundDelegateCreationExpressionOperation((BoundDelegateCreationExpression)boundNode);
case BoundKind.RangeVariable:
return CreateBoundRangeVariableOperation((BoundRangeVariable)boundNode);
default:
Optional<object> constantValue = ConvertToOptional((boundNode as BoundExpression)?.ConstantValue);
bool isImplicit = boundNode.WasCompilerGenerated;
if (!isImplicit)
{
switch (boundNode.Kind)
{
case BoundKind.FixedLocalCollectionInitializer:
isImplicit = true;
break;
}
}
return Operation.CreateOperationNone(_semanticModel, boundNode.Syntax, constantValue, getChildren: () => GetIOperationChildren(boundNode), isImplicit: isImplicit);
}
}