Beispiel #1
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);
            }
        }
Beispiel #2
0
        public override void Evaluate(IScriptContext context)
        {
            _expr.Evaluate(context);
            var handler = OnHandleOperator(this, context, OperationSymbol, context.Result);

            context.Result = handler.Cancel ? handler.Result : RuntimeHost.GetUnaryOperator(OperationSymbol).Evaluate(context.Result);
        }
Beispiel #3
0
        public override void Evaluate(IScriptContext context)
        {
            if (_rightExpr != null)
            {
                _rightExpr.Evaluate(context);
            }

            context.Result = _assignOperation(context);
        }
Beispiel #4
0
        public override void Evaluate(IScriptContext context)
        {
            var result = RuntimeHost.NullValue;

            //Create local scope
            var scope = RuntimeHost.ScopeFactory.Create(ScopeTypes.Local, context.Scope);

            context.CreateScope(scope);

            try
            {
                _init.Evaluate(context);
                _cond.Evaluate(context);
                bool condBool = context.Result == null ? true : (bool)context.Result;

                while (condBool)
                {
                    _statement.Evaluate(context);
                    result = context.Result;

                    if (context.IsBreak() || context.IsReturn())
                    {
                        context.SetBreak(false);
                        break;
                    }

                    if (context.IsContinue())
                    {
                        context.SetContinue(false);
                    }


                    _next.Evaluate(context);
                    _cond.Evaluate(context);
                    condBool = context.Result == null ? true : (bool)context.Result;
                }

                context.Result = result;
            }
            finally
            {
                context.RemoveLocalScope();
            }
        }
Beispiel #5
0
        public override void Evaluate(IScriptContext context)
        {
            _conditionExpression.Evaluate(context);

#if DEBUG
            if (!(context.Result is bool))
            {
                throw new ScriptVerificationException(Strings.VerificationNonBoolean);
            }
#endif
        }
        public override void Evaluate(IScriptContext context)
        {
            var switchValue = context.Result;

            _cond.Evaluate(context);
            if (switchValue.Equals(context.Result))
            {
                _statement.Evaluate(context);
                context.SetBreak(true);
            }
            else
            {
                context.Result = switchValue;
            }
        }
Beispiel #7
0
        public override void Evaluate(IScriptContext context)
        {
            _expr.Evaluate(context);

            if (context.Result == null)
            {
                throw new NullReferenceException(string.Format(Strings.NullReferenceInCode, Code(context)));
            }

            var         enumeration = context.Result as IEnumerable;
            IEnumerator enumerator  = null;

            if (enumeration != null)
            {
                enumerator = enumeration.GetEnumerator();
            }
            else
            {
                IBinding bind = RuntimeHost.Binder.BindToMethod(context.Result, "GetEnumerator", new Type[0], new object[0]);
                if (bind != null)
                {
                    enumerator = bind.Invoke(context, null) as IEnumerator;
                }
            }

            if (enumerator == null)
            {
                throw new ScriptExecutionException(string.Format(Strings.ForEachMethodNotFound, context.Result));
            }

            enumerator.Reset();

            while (enumerator.MoveNext())
            {
                context.SetItem(_name.Text, enumerator.Current);
                _statement.Evaluate(context);
                if (context.IsBreak() || context.IsReturn())
                {
                    context.SetBreak(false);
                    break;
                }
                if (context.IsContinue())
                {
                    context.SetContinue(false);
                }
            }
        }
Beispiel #8
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);
        }
Beispiel #9
0
 public override void Evaluate(IScriptContext context)
 {
     _expr.Evaluate(context);
     context.Result = new[] { _name, context.Result };
 }