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)); } }
/// <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)); }
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) { }
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)); }
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); }