private void BinaryOperatorEasyOut(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result) { var leftType = left.Type; if ((object)leftType == null) { return; } var rightType = right.Type; if ((object)rightType == null) { return; } var easyOut = BinopEasyOut.OpKind(kind, leftType, rightType); if (easyOut == BinaryOperatorKind.Error) { return; } BinaryOperatorSignature signature = this.Compilation.builtInOperators.GetSignature(easyOut); result.Results.Add(BinaryOperatorAnalysisResult.Applicable(signature)); }
private void BinaryOperatorEasyOut(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result) { var leftType = left.Type; if (leftType is null) { return; } var rightType = right.Type; if (rightType is null) { return; } if (PossiblyUnusualConstantOperation(left, right)) { return; } var easyOut = BinopEasyOut.OpKind(kind, leftType, rightType); if (easyOut == BinaryOperatorKind.Error) { return; } BinaryOperatorSignature signature = this.Compilation.builtInOperators.GetSignature(easyOut); Conversion leftConversion = Conversions.FastClassifyConversion(leftType, signature.LeftType); Conversion rightConversion = Conversions.FastClassifyConversion(rightType, signature.RightType); Debug.Assert(leftConversion.Exists && leftConversion.IsImplicit); Debug.Assert(rightConversion.Exists && rightConversion.IsImplicit); result.Results.Add(BinaryOperatorAnalysisResult.Applicable(signature, leftConversion, rightConversion)); }