Exemple #1
0
        public void AstDomCompiler_ForEach()
        {
            IScriptContext context = new ScriptContext();

            context.SetItem("a", new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });

            CodeProgram       domTree = AstDomCompiler.Compile(Script.Compile("sum=0; foreach(i in a) sum = sum + i;", null, false).Ast);
            ExecutableMachine vm      = CodeDomCompiler.Compile(domTree);

            vm.Execute(context);

            Assert.Equal(45, context.GetItem("sum", true));
        }
Exemple #2
0
        public void AstDomCompiler_InvokeMember3()
        {
            VM_Test1 vt1 = new VM_Test1();

            IScriptContext context = new ScriptContext();

            context.SetItem("v", vt1);

            CodeProgram       domTree = AstDomCompiler.Compile(Script.Compile("return v.Next.Next;", null, false).Ast);
            ExecutableMachine vm      = CodeDomCompiler.Compile(domTree);

            vm.Execute(context);

            Assert.Equal(2, ((VM_Test1)context.Result).Level);
        }
Exemple #3
0
        public void AstDomCompiler_InvokeMember()
        {
            int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            int[] b = new int[9];

            IScriptContext context = new ScriptContext();

            context.SetItem("a", a);
            context.SetItem("b", b);

            CodeProgram       domTree = AstDomCompiler.Compile(Script.Compile("return a.CopyTo(b, 0);", null, false).Ast);
            ExecutableMachine vm      = CodeDomCompiler.Compile(domTree);

            vm.Execute(context);

            Assert.Equal(a[4], b[4]);
        }
Exemple #4
0
        public void MachineExection()
        {
            IScriptContext context = new ScriptContext();

            //Example 0: Machine

            ExecutableMachine machine = ExecutableMachine.Create();
            SetValueOperation sv      = machine.CreateOperation <SetValueOperation>();

            sv.Id = "a";

            machine.AX = "Hello World";
            machine.CreateOperation <RetOperation>();
            machine.Execute(context);

            object rez = context.GetItem("a", true);

            Assert.Equal("Hello World", rez);
        }
Exemple #5
0
        public void Benchmark()
        {
            IScriptContext context = new ScriptContext();

            //Example 0: Machine

            ExecutableMachine machine = ExecutableMachine.Create();

            int iterations = 2;// 10000000;

            //loops = 10000000
            ValueOperation op0 = machine.CreateOperation <ValueOperation>();

            op0.Value = iterations;
            SetValueOperation op1 = machine.CreateOperation <SetValueOperation>();

            op1.Id = "loops";

            // counter = 0
            ValueOperation op2 = machine.CreateOperation <ValueOperation>();

            op2.Value = 0;
            SetValueOperation op3 = machine.CreateOperation <SetValueOperation>();

            op3.Id = "counter";

            //while (loops > 0)
            RegisterOperation op4 = machine.CreateOperation <RegisterOperation>();

            op4.Destination = MachineRegisters.BX;
            op4.Value       = 0;
            GetValueOperation op5 = machine.CreateOperation <GetValueOperation>();

            op5.Id = "loops";
            CmpOperation   op6 = machine.CreateOperation <CmpOperation>();
            JmpIfOperation op7 = machine.CreateOperation <JmpIfOperation>();

            op7.Offset = 8;
            //loops = loops -1;
            GetValueOperation op8 = machine.CreateOperation <GetValueOperation>();

            op8.Id = "loops";
            DecOperation      op9  = machine.CreateOperation <DecOperation>();
            SetValueOperation op10 = machine.CreateOperation <SetValueOperation>();

            op10.Id = "loops";

            //counter = counter + 1;
            GetValueOperation op11 = machine.CreateOperation <GetValueOperation>();

            op11.Id = "counter";
            IncOperation      op12 = machine.CreateOperation <IncOperation>();
            SetValueOperation op13 = machine.CreateOperation <SetValueOperation>();

            op13.Id = "counter";

            JmpOperation op14 = machine.CreateOperation <JmpOperation>();

            op14.Offset = -10;

            machine.CreateOperation <RetOperation>();
            machine.Execute(context);

            object rez = context.GetItem("counter", true);

            Assert.Equal(iterations, rez);
        }