コード例 #1
0
        private object PlusEqual(IScriptContext context)
        {
            object rez = context.Result;

            nameExpr.Evaluate(context);
            object rezName = context.Result;

            HandleOperatorArgs handling = OnHandleOperator(this, context, "+=", rezName, rez);

            if (handling.Cancel)
            {
                rez = handling.Result;
            }
            else
            {
                rez = plus.Evaluate(rezName, rez);
            }

            //TODO: Events!
            //if (!(rezName is EventInfo))
            //{
            //  rez = RuntimeHost.GetBinaryOperator("+").Evaluate(rezName, rez);
            //}

            nameExpr.Assign(rez, context);
            return(rez);
        }
コード例 #2
0
        private object MinusEqual(IScriptContext context)
        {
            object rez = context.Result;

            nameExpr.Evaluate(context);

            object rezName = context.Result;

            HandleOperatorArgs handling = OnHandleOperator(this, context, "-=", rezName, rez);

            if (handling.Cancel)
            {
                rez = handling.Result;
            }
            else
            {
                rez = minus.Evaluate(rezName, rez);
            }

            //if (!(rezName is EventInfo))
            //{
            //  rez = RuntimeHost.GetBinaryOperator("-").Evaluate(rezName, rez);
            //}
            //else
            //{
            //  rez = new RemoveDelegate((IInvokable)rez);
            //}
            nameExpr.Assign(rez, context);
            return(rez);
        }
コード例 #3
0
        private Node EvaluateUnaryExpression(Node node, IOperator @operator, IToken token)
        {
            var operand   = node.Accept(this) as LiteralNode;
            var nodeValue = _valueFactory.CreateValueFromString(operand.Value, operand.Type);

            return(new LiteralNode(token, @operator.Evaluate(nodeValue).ToString(), QLType.Undefined));
        }
コード例 #4
0
        public override void Evaluate(IScriptContext context)
        {
            // ( Expr )
            if (_typeExpr == null)
            {
                _expr.Evaluate(context);
            }
            // (Type) Expr
            else
            {
                _typeExpr.Evaluate(context);

                var type = context.Result as Type;
                if (type == null)
                {
                    //NOTE: Handling special case of unary minus operator:
                    //      (3+2)-2;
                    var unary = _expr as ScriptUnaryExpr;

                    if (unary == null || unary.OperationSymbol != "-")
                    {
                        throw new ScriptSyntaxErrorException(Strings.TypeExpressionIsNotSyntacticallyCorrect);
                    }

                    //NOTE: expr + (unary expr)
                    var left = context.Result;
                    unary.Evaluate(context);
                    context.Result = _operator.Evaluate(left, context.Result);
                    return;
                }

                _expr.Evaluate(context);
                context.Result = RuntimeHost.Binder.ConvertTo(context.Result, type);
            }
        }
コード例 #5
0
        public override void Evaluate(IScriptContext context)
        {
            // ( Expr )
            if (typeExpr == null)
            {
                expr.Evaluate(context);
            }
            // (Type) Expr
            else
            {
                typeExpr.Evaluate(context);

                Type type = context.Result as Type;
                if (type == null)
                {
                    //NOTE: Handling special case of unary minus operator:
                    //      (3+2)-2;
                    ScriptUnaryExpr unary = expr as ScriptUnaryExpr;

                    if (unary == null || unary.OperationSymbol != "-")
                    {
                        throw new ScriptException("Wrong type expression!");
                    }

                    //NOTE: expr + (unary expr)
                    object left = context.Result;
                    unary.Evaluate(context);
                    context.Result = @operator.Evaluate(left, context.Result);
                    return;
                }

                expr.Evaluate(context);
                context.Result = RuntimeHost.Binder.ConvertTo(context.Result, type);
            }
        }
コード例 #6
0
        private Node EvaluateBinaryExpression(Node leftOperandNode, Node rightOperandNode, IOperator @operator, IToken token)
        {
            var leftOperandLiteral  = leftOperandNode.Accept(this) as LiteralNode;
            var rightOperandLiteral = rightOperandNode.Accept(this) as LiteralNode;
            var leftValue           = _valueFactory.CreateValueFromString(leftOperandLiteral.Value, leftOperandLiteral.Type);
            var rightValue          = _valueFactory.CreateValueFromString(rightOperandLiteral.Value, rightOperandLiteral.Type);

            return(new LiteralNode(token, @operator.Evaluate(leftValue, rightValue).ToString(), QLType.Undefined));
        }
コード例 #7
0
        private object PlusEqual(IScriptContext context)
        {
            var rez = context.Result;

            _nameExpr.Evaluate(context);
            var rezName = context.Result;

            var handling = OnHandleOperator(this, context, "+=", rezName, rez);

            rez = handling.Cancel ? handling.Result : _plus.Evaluate(rezName, rez);

            //TODO: Events!
            //if (!(rezName is EventInfo))
            //{
            //  rez = RuntimeHost.GetBinaryOperator("+").Evaluate(rezName, rez);
            //}

            _nameExpr.Assign(rez, context);
            return(rez);
        }
コード例 #8
0
ファイル: ScriptIsExpr.cs プロジェクト: singba/SSharp
        public override void Evaluate(IScriptContext context)
        {
            left.Evaluate(context);
            var leftVal = context.Result;

            context.Result = RuntimeHost.NullValue;

            var name = (ScriptTypeExpr)right;

            name.Evaluate(context);
            var rightVal = context.Result;

            context.Result = _operator.Evaluate(leftVal, rightVal);
        }
コード例 #9
0
        private bool EvaluateNode <T>(ExpressionTreeNode node, T target, IEnumerable <IValidationCondition> validationConditions)
        {
            if (!node.Token.IsOperatorToken())
            {
                IIdentifier identifier = (IIdentifier)node.Token;

                IValidationCondition validationCondition = validationConditions.FirstOrDefault(r => r.ValidationConditionID == identifier.ID);

                return(EvaluateValidationCondition(target, validationCondition));
            }
            else
            {
                IOperator op = (IOperator)node.Token;

                return(op.Evaluate(() => EvaluateNode(node.Left, target, validationConditions),
                                   () => EvaluateNode(node.Right, target, validationConditions)));
            }
        }
コード例 #10
0
        public override void Evaluate(IScriptContext context)
        {
            object             leftVal, rightVal;
            HandleOperatorArgs handling;

            left.Evaluate(context);
            leftVal = context.Result;

            context.Result = RuntimeHost.NullValue;

            if ((oper == "&&" && false.Equals(leftVal)) || (oper == "||" && true.Equals(leftVal)))
            {
                handling = OnHandleOperator(this, context, oper, leftVal);

                if (handling.Cancel)
                {
                    context.Result = handling.Result;
                }
                else
                {
                    context.Result = leftVal;
                }

                return;
            }

            right.Evaluate(context);
            rightVal = context.Result;

            handling = OnHandleOperator(this, context, oper, leftVal, rightVal);
            if (handling.Cancel)
            {
                context.Result = handling.Result;
            }
            else
            {
                context.Result = operatorFunction.Evaluate(leftVal, rightVal);
                //RuntimeHost.GetBinaryOperator(oper).Evaluate(leftVal, rightVal);
                //RuntimeHost.GetBinaryOperator(oper).Evaluate(leftVal, rightVal);
            }
            //Context.EvaluateOperator(oper, leftVal, rightVal);
        }
コード例 #11
0
        private void CompleteEvaluate(IScriptContext context)
        {
            HandleOperatorArgs handling;

            left.Evaluate(context);
            var leftVal = context.Result;

            context.Result = RuntimeHost.NullValue;

            if ((Oper == "&&" && false.Equals(leftVal)) || (Oper == "||" && true.Equals(leftVal)))
            {
                handling       = OnHandleOperator(this, context, Oper, leftVal);
                context.Result = handling.Cancel ? handling.Result : leftVal;
                return;
            }

            right.Evaluate(context);
            var rightVal = context.Result;

            handling       = OnHandleOperator(this, context, Oper, leftVal, rightVal);
            context.Result = handling.Cancel ? handling.Result : OperatorFunction.Evaluate(leftVal, rightVal);
        }
コード例 #12
0
 public override int Execute(IScriptContext context)
 {
     _stack.Push(_operation.Evaluate(_stack.Pop(), _stack.Pop()));
     return(1);
 }