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)); }
private void _branch_false(NakoILCode code) { object v = calcStack.Pop(); if (NakoValueConveter.ToLong(v) == 0) { autoIncPos = false; runpos = Convert.ToInt32((long)code.value); } }
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("オブジェクトは論理演算できません"); }