コード例 #1
0
ファイル: Compiler.cs プロジェクト: 40a/PowerShell
        internal Expression ReduceAssignment(ISupportsAssignment left, TokenKind tokenKind, Expression right)
        {
            IAssignableValue av = left.GetAssignableValue();
            ExpressionType et = ExpressionType.Extension;
            switch (tokenKind)
            {
                case TokenKind.Equals: return av.SetValue(this, right);
                case TokenKind.PlusEquals: et = ExpressionType.Add; break;
                case TokenKind.MinusEquals: et = ExpressionType.Subtract; break;
                case TokenKind.MultiplyEquals: et = ExpressionType.Multiply; break;
                case TokenKind.DivideEquals: et = ExpressionType.Divide; break;
                case TokenKind.RemainderEquals: et = ExpressionType.Modulo; break;
            }

            var exprs = new List<Expression>();
            var temps = new List<ParameterExpression>();
            var getExpr = av.GetValue(this, exprs, temps);
            exprs.Add(av.SetValue(this, DynamicExpression.Dynamic(PSBinaryOperationBinder.Get(et), typeof(object), getExpr, right)));
            return Expression.Block(temps, exprs);
        }
コード例 #2
0
ファイル: Compiler.cs プロジェクト: nickchal/pash
        internal Expression ReduceAssignment(ISupportsAssignment left, TokenKind tokenKind, Expression right)
        {
            IAssignableValue assignableValue = left.GetAssignableValue();
            ExpressionType extension = ExpressionType.Extension;
            switch (tokenKind)
            {
                case TokenKind.Equals:
                    return assignableValue.SetValue(this, right);

                case TokenKind.PlusEquals:
                    extension = ExpressionType.Add;
                    break;

                case TokenKind.MinusEquals:
                    extension = ExpressionType.Subtract;
                    break;

                case TokenKind.MultiplyEquals:
                    extension = ExpressionType.Multiply;
                    break;

                case TokenKind.DivideEquals:
                    extension = ExpressionType.Divide;
                    break;

                case TokenKind.RemainderEquals:
                    extension = ExpressionType.Modulo;
                    break;
            }
            List<Expression> exprs = new List<Expression>();
            List<ParameterExpression> temps = new List<ParameterExpression>();
            Expression expression = assignableValue.GetValue(this, exprs, temps);
            exprs.Add(assignableValue.SetValue(this, Expression.Dynamic(PSBinaryOperationBinder.Get(extension, true, false), typeof(object), expression, right)));
            return Expression.Block((IEnumerable<ParameterExpression>) temps, (IEnumerable<Expression>) exprs);
        }