private void VisitCall( MethodSymbol method, PropertySymbol propertyAccess, ImmutableArray <BoundExpression> arguments, ImmutableArray <RefKind> argumentRefKindsOpt, ImmutableArray <string> argumentNamesOpt, BitVector defaultArguments, BoundNode node ) { Debug.Assert((object)method != null); Debug.Assert( ((object)propertyAccess == null) || (method == propertyAccess.GetOwnOrInheritedGetMethod()) || (method == propertyAccess.GetOwnOrInheritedSetMethod()) || propertyAccess.MustCallMethodsDirectly ); CheckArguments(argumentRefKindsOpt, arguments, method); if (_inExpressionLambda) { if (method.CallsAreOmitted(node.SyntaxTree)) { Error(ErrorCode.ERR_PartialMethodInExpressionTree, node); } else if ( (object)propertyAccess != null && propertyAccess.IsIndexedProperty() && !propertyAccess.IsIndexer ) { Error(ErrorCode.ERR_ExpressionTreeContainsIndexedProperty, node); } else if (hasDefaultArgument(arguments, defaultArguments)) { Error(ErrorCode.ERR_ExpressionTreeContainsOptionalArgument, node); } else if (!argumentNamesOpt.IsDefaultOrEmpty) { Error(ErrorCode.ERR_ExpressionTreeContainsNamedArgument, node); } else if (IsComCallWithRefOmitted(method, arguments, argumentRefKindsOpt)) { Error(ErrorCode.ERR_ComRefCallInExpressionTree, node); } else if (method.MethodKind == MethodKind.LocalFunction) { Error(ErrorCode.ERR_ExpressionTreeContainsLocalFunction, node); } else if (method.RefKind != RefKind.None) { Error(ErrorCode.ERR_RefReturningCallInExpressionTree, node); } }
private void VisitCall( MethodSymbol method, PropertySymbol propertyAccess, ImmutableArray <BoundExpression> arguments, ImmutableArray <RefKind> argumentRefKindsOpt, ImmutableArray <string> argumentNamesOpt, bool expanded, BoundNode node) { Debug.Assert((object)method != null); Debug.Assert(((object)propertyAccess == null) || (method == propertyAccess.GetOwnOrInheritedGetMethod()) || (method == propertyAccess.GetOwnOrInheritedSetMethod()) || propertyAccess.MustCallMethodsDirectly); CheckArguments(argumentRefKindsOpt, arguments, method); if (_inExpressionLambda) { if (method.CallsAreOmitted(node.SyntaxTree)) { Error(ErrorCode.ERR_PartialMethodInExpressionTree, node); } else if ((object)propertyAccess != null && propertyAccess.IsIndexedProperty() && !propertyAccess.IsIndexer) { Error(ErrorCode.ERR_ExpressionTreeContainsIndexedProperty, node); } else if (arguments.Length < (((object)propertyAccess != null) ? propertyAccess.ParameterCount : method.ParameterCount) + (expanded ? -1 : 0)) { Error(ErrorCode.ERR_ExpressionTreeContainsOptionalArgument, node); } else if (!argumentNamesOpt.IsDefault) { Error(ErrorCode.ERR_ExpressionTreeContainsNamedArgument, node); } else if (IsComCallWithRefOmitted(method, arguments, argumentRefKindsOpt)) { Error(ErrorCode.ERR_ComRefCallInExpressionTree, node); } } }