Esempio n. 1
0
        public ExpSyntaxTree c; // if c == null then exp = a ? b, 并且这儿 a 只判断是否是nil,专门用于默认值语法的。

        protected override List <object> _GetResults(Frame frame)
        {
            if (c == null)
            {
                var aa = a.GetResults(frame);
                if (aa.Count == 0 || aa[0] == null)
                {
                    return(b.GetResults(frame));
                }
                else
                {
                    return(aa);
                }
            }
            else
            {
                var aa = a.GetBool(frame);
                return(aa ? b.GetResults(frame) : c.GetResults(frame));
            }
        }
Esempio n. 2
0
        protected override List <object> _GetResults(Frame frame)
        {
            object ret = null;

            if (op.Match('-'))
            {
                ret = exp.GetValidNumber(frame);
            }
            else if (op.Match(TokenType.NOT))
            {
                ret = !exp.GetBool(frame);
            }
            else
            {
                Debug.Assert(false);
            }
            return(new List <object>()
            {
                ret
            });
        }
Esempio n. 3
0
        protected override List <object> _GetResults(Frame frame)
        {
            object ret = null;

            if (op.Match(TokenType.AND))
            {
                ret = left.GetBool(frame) && right.GetBool(frame);
            }
            else if (op.Match(TokenType.OR))
            {
                ret = left.GetBool(frame) || right.GetBool(frame);
            }
            else
            {
                if (op.Match('+'))
                {
                    ret = left.GetValidNumber(frame) + right.GetValidNumber(frame);
                }
                else if (op.Match('-'))
                {
                    ret = left.GetValidNumber(frame) - right.GetValidNumber(frame);
                }
                else if (op.Match('*'))
                {
                    ret = left.GetValidNumber(frame) * right.GetValidNumber(frame);
                }
                else if (op.Match('/'))
                {
                    ret = left.GetValidNumber(frame) / right.GetValidNumber(frame);
                }
                else if (op.Match('%'))
                {
                    ret = left.GetValidNumber(frame) % right.GetValidNumber(frame);
                }
                else if (op.Match('<'))
                {
                    var l = left.GetOneResult(frame);
                    var r = right.GetOneResult(frame);
                    ret = Utils.Compare(l, r) < 0;
                }
                else if (op.Match('>'))
                {
                    var l = left.GetOneResult(frame);
                    var r = right.GetOneResult(frame);
                    ret = Utils.Compare(l, r) > 0;
                }
                else if (op.Match(TokenType.LE))
                {
                    var l = left.GetOneResult(frame);
                    var r = right.GetOneResult(frame);
                    ret = Utils.Compare(l, r) <= 0;
                }
                else if (op.Match(TokenType.GE))
                {
                    var l = left.GetOneResult(frame);
                    var r = right.GetOneResult(frame);
                    ret = Utils.Compare(l, r) >= 0;
                }
                else if (op.Match(TokenType.EQ))
                {
                    var l = left.GetOneResult(frame);
                    var r = right.GetOneResult(frame);
                    ret = Utils.CheckEquals(l, r);
                }
                else if (op.Match(TokenType.NE))
                {
                    var l = left.GetOneResult(frame);
                    var r = right.GetOneResult(frame);
                    ret = !Utils.CheckEquals(l, r);
                }
                else if (op.Match(TokenType.CONCAT))
                {
                    ret = left.GetString(frame) + right.GetString(frame);
                }
                else
                {
                    Debug.Assert(false);
                }
            }

            return(new List <object>()
            {
                ret
            });
        }