Esempio n. 1
0
        public BoundUnaryExpression Update(UnaryOperatorKind operatorKind, OverloadResolutionResult <UnaryOperatorSignature> result, BoundExpression expression)
        {
            if (operatorKind == OperatorKind && result == Result && expression == Expression)
            {
                return(this);
            }

            return(new BoundUnaryExpression(operatorKind, result, expression));
        }
Esempio n. 2
0
        private static BoundExpression BindArgument <T>(BoundExpression expression, OverloadResolutionResult <T> result, int argumentIndex) where T : Signature
        {
            var selected = result.Selected;

            if (selected == null)
            {
                return(expression);
            }

            var targetType = selected.Signature.GetParameterType(argumentIndex);
            var conversion = selected.ArgumentConversions[argumentIndex];

            // TODO: We need check for ambiguous conversions here as well.

            return(conversion.IsIdentity
                       ? expression
                       : new BoundConversionExpression(expression, targetType, conversion));
        }
Esempio n. 3
0
        public BoundMethodInvocationExpression Update(BoundExpression target, IEnumerable <BoundExpression> arguments, OverloadResolutionResult <MethodSymbolSignature> result)
        {
            var newArguments = arguments.ToImmutableArray();

            if (target == Target && newArguments == Arguments && result == Result)
            {
                return(this);
            }

            return(new BoundMethodInvocationExpression(target, newArguments, result));
        }
Esempio n. 4
0
 public BoundMethodInvocationExpression(BoundExpression target, IEnumerable <BoundExpression> arguments, OverloadResolutionResult <MethodSymbolSignature> result)
 {
     Target    = target;
     Arguments = arguments.ToImmutableArray();
     Result    = result;
 }
        public BoundFunctionInvocationExpression Update(IEnumerable <BoundExpression> arguments, OverloadResolutionResult <FunctionSymbolSignature> result)
        {
            var newArguments = arguments.ToImmutableArray();

            if (newArguments == Arguments && result == Result)
            {
                return(this);
            }

            return(new BoundFunctionInvocationExpression(newArguments, result));
        }
 public BoundFunctionInvocationExpression(IEnumerable <BoundExpression> arguments, OverloadResolutionResult <FunctionSymbolSignature> result)
 {
     Arguments = arguments.ToImmutableArray();
     Result    = result;
 }
Esempio n. 7
0
 public BoundUnaryExpression(UnaryOperatorKind operatorKind, OverloadResolutionResult <UnaryOperatorSignature> result, BoundExpression expression)
 {
     OperatorKind = operatorKind;
     Expression   = expression;
     Result       = result;
 }
 public BoundBinaryExpression(BoundExpression left, BinaryOperatorKind operatorKind, OverloadResolutionResult <BinaryOperatorSignature> result, BoundExpression right)
 {
     Left         = left;
     OperatorKind = operatorKind;
     Result       = result;
     Right        = right;
 }
        public BoundBinaryExpression Update(BoundExpression left, BinaryOperatorKind operatorKind, OverloadResolutionResult <BinaryOperatorSignature> result, BoundExpression right)
        {
            if (left == Left && operatorKind == OperatorKind && result == Result && right == Right)
            {
                return(this);
            }

            return(new BoundBinaryExpression(left, operatorKind, result, right));
        }