コード例 #1
0
        private static BoundObjectInitializerExpressionBase UpdateInitializers(
            BoundObjectInitializerExpressionBase initializerExpression,
            ImmutableArray <BoundExpression> newInitializers
            )
        {
            switch (initializerExpression)
            {
            case BoundObjectInitializerExpression objectInitializer:
                return(objectInitializer.Update(
                           objectInitializer.Placeholder,
                           newInitializers,
                           initializerExpression.Type
                           ));

            case BoundCollectionInitializerExpression collectionInitializer:
                return(collectionInitializer.Update(
                           collectionInitializer.Placeholder,
                           newInitializers,
                           initializerExpression.Type
                           ));

            default:
                throw ExceptionUtilities.UnexpectedValue(initializerExpression.Kind);
            }
        }
 private static BoundObjectInitializerExpressionBase UpdateInitializers(BoundObjectInitializerExpressionBase initializerExpression, ImmutableArray <BoundExpression> newInitializers)
 {
     if (initializerExpression.Kind == BoundKind.ObjectInitializerExpression)
     {
         return(((BoundObjectInitializerExpression)initializerExpression).Update(newInitializers, initializerExpression.Type));
     }
     else
     {
         return(((BoundCollectionInitializerExpression)initializerExpression).Update(newInitializers, initializerExpression.Type));
     }
 }
コード例 #3
0
 /// <summary>
 /// Build an object creation expression without performing any rewriting
 /// </summary>
 internal BoundObjectCreationExpression UpdateArgumentsAndInitializer(
     ImmutableArray <BoundExpression> newArguments,
     ImmutableArray <RefKind> newRefKinds,
     BoundObjectInitializerExpressionBase newInitializerExpression,
     TypeSymbol changeTypeOpt = null)
 {
     return(Update(
                constructor: Constructor,
                arguments: newArguments,
                argumentNamesOpt: default(ImmutableArray <string>),
                argumentRefKindsOpt: newRefKinds,
                expanded: false,
                argsToParamsOpt: default(ImmutableArray <int>),
                constantValueOpt: ConstantValueOpt,
                initializerExpressionOpt: newInitializerExpression,
                binderOpt: BinderOpt,
                type: changeTypeOpt ?? Type));
 }
コード例 #4
0
 public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray <BoundExpression> arguments, ImmutableArray <string> argumentNamesOpt,
                                      ImmutableArray <RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray <int> argsToParamsOpt, ConstantValue constantValueOpt,
                                      BoundObjectInitializerExpressionBase initializerExpressionOpt, Binder binderOpt, TypeSymbol type, bool hasErrors = false)
     : this(syntax, constructor, ImmutableArray <MethodSymbol> .Empty, arguments, argumentNamesOpt, argumentRefKindsOpt, expanded, argsToParamsOpt, constantValueOpt, initializerExpressionOpt, binderOpt, type, hasErrors)
 {
 }
コード例 #5
0
 public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray <BoundExpression> arguments, ImmutableArray <string> argumentNamesOpt, ImmutableArray <RefKind> argumentRefKindsOpt, bool expanded,
                                             ImmutableArray <int> argsToParamsOpt, ConstantValue constantValueOpt, BoundObjectInitializerExpressionBase initializerExpressionOpt, Binder binderOpt, TypeSymbol type)
 {
     return(this.Update(constructor, ImmutableArray <MethodSymbol> .Empty, arguments, argumentNamesOpt, argumentRefKindsOpt, expanded, argsToParamsOpt, constantValueOpt, initializerExpressionOpt, binderOpt, type));
 }
コード例 #6
0
        private BoundObjectInitializerExpressionBase MakeObjectCreationInitializerForExpressionTree(BoundObjectInitializerExpressionBase initializerExpressionOpt)
        {
            if (initializerExpressionOpt != null && !initializerExpressionOpt.HasErrors)
            {
                // We may need to MakeArguments for collection initializer add method call if the method has a param array parameter.
                var rewrittenInitializers = MakeObjectOrCollectionInitializersForExpressionTree(initializerExpressionOpt);
                return(UpdateInitializers(initializerExpressionOpt, rewrittenInitializers));
            }

            return(null);
        }