Example #1
0
        private object _ceil(INakoFuncCallInfo info)
        {
            object a  = info.StackPop();
            object b  = info.StackPop();
            int    ib = 0;

            if (b is string)
            {
                string sb = (string)b;
                if (sb.Contains("."))
                {
                    ib = GetDigitOfDecimal(sb);
                }
                else
                {
                    ib = int.Parse(sb);
                }
            }
            else
            {
                ib = NakoValueConveter.ToInt(b);
            }
            double da = NakoValueConveter.ToDouble(a);

            return(__ceil(da, ib));
        }
Example #2
0
        public void TestInterpreter1()
        {
            NakoCompiler    ns     = new NakoCompiler();
            NakoInterpreter runner = new NakoInterpreter();
            object          o;

            // 1
            ns.source = "1+2*3";
            ns.Tokenize();
            ns.ParseOnlyValue();
            runner.Run(ns.WriteIL());
            o = runner.StackTop;
            Assert.IsNotNull(o);
            Assert.IsTrue(7 == NakoValueConveter.ToLong(o));

            // 2
            ns.source = "(1+2)*3";
            ns.Tokenize();
            ns.ParseOnlyValue();
            runner.Run(ns.WriteIL());
            o = runner.StackTop;
            Assert.IsNotNull(o);
            Assert.IsTrue(9 == NakoValueConveter.ToLong(o));

            // 3
            ns.source = "1+4/2";
            ns.Tokenize();
            ns.ParseOnlyValue();
            runner.Run(ns.WriteIL());
            o = runner.StackTop;
            Assert.IsNotNull(o);
            Assert.IsTrue(3 == NakoValueConveter.ToLong(o));
        }
Example #3
0
        private void _branch_false(NakoILCode code)
        {
            object v = calcStack.Pop();

            if (NakoValueConveter.ToLong(v) == 0)
            {
                autoIncPos = false;
                runpos     = Convert.ToInt32((long)code.value);
            }
        }
Example #4
0
 private object calc_method_xor(object a, object b)
 {
     if (a is long && b is long)
     {
         return((long)a ^ (long)b);
     }
     if (a is double || b is double)
     {
         return(NakoValueConveter.ToLong(a) ^ NakoValueConveter.ToLong(b));
     }
     throw new NakoInterpreterException("オブジェクトは論理演算できません");
 }
Example #5
0
 private object calc_method_gteq(object a, object b)
 {
     if (a is long && b is long)
     {
         return((long)a >= (long)b);
     }
     if (a is string || b is string)
     {
         return(string.Compare(NakoValueConveter.ToString(a), NakoValueConveter.ToString(b)) >= 0);
     }
     if (a is double || b is double)
     {
         return(NakoValueConveter.ToDouble(a) >= NakoValueConveter.ToDouble(b));
     }
     throw new NakoInterpreterException("オブジェクトは比較できません");
 }
Example #6
0
 private object calc_method_not_eq(object a, object b)
 {
     if (a is long && b is long)
     {
         return((long)a != (long)b);
     }
     if (a is string || b is string)
     {
         return(NakoValueConveter.ToString(a) != NakoValueConveter.ToString(b));
     }
     if (a is double || b is double)
     {
         return(NakoValueConveter.ToDouble(a) != NakoValueConveter.ToDouble(b));
     }
     return(a != b);
 }
Example #7
0
        private object _mod(INakoFuncCallInfo info)
        {
            object a = info.StackPop();
            object b = info.StackPop();

            if (a is long && b is long)
            {
                return((long)a % (long)b);
            }
            else
            {
                double da = NakoValueConveter.ToDouble(a);
                double db = NakoValueConveter.ToDouble(b);
                return(da % db);
            }
        }
Example #8
0
 private double ToDouble(object v)
 {
     return(NakoValueConveter.ToDouble(v));
 }