示例#1
0
 public string Generate(CodeFrame frame)
 {
     var gen = new EilGenerator(frame);
     gen.OmitOffsets = !PrintOffsets;
     gen.IgnoreDebugInfo = IgnoreDebugInfo;
     return gen.Generate();
 }
示例#2
0
        public string Generate(CodeFrame frame)
        {
            var gen = new EilGenerator(frame);

            gen.OmitOffsets     = !PrintOffsets;
            gen.IgnoreDebugInfo = IgnoreDebugInfo;
            return(gen.Generate());
        }
示例#3
0
        private static int Execute(CodeAssembly asm, bool interactive)
        {
            var mod = asm.GetRootModule();

            if (opt.ShowEil)
            {
                var gen = new EilGenerator(mod);
                Console.WriteLine("EIL ({0}-{1}):", lastOffset, mod.Ops.Count - 1);
                Console.Write(gen.Generate(lastOffset));
                lastOffset = mod.Ops.Count;
            }
            else if (opt.ShowSymbols != SymTables.None)
            {
                var gen = new DebugReader(mod.Symbols);
                helper.PrintSymTables(gen);
                lastOffset = mod.Ops.Count;
            }
            else
            {
                try
                {
                    if (vm == null)
                    {
                        vm = new ElaMachine(asm);
                        vm.AddTracePointListener(new TracePointListener());
                    }
                    else
                    {
                        vm.RefreshState();
                        vm.Recover();
                    }

                    if (opt.ShowTime != 0 && !interactive)
                    {
                        Warmup(asm); //GIT
                    }
                    var os = lastOffset;
                    lastOffset = mod.Ops.Count;
                    var sw = new Stopwatch();
                    sw.Start();
                    var exer = default(ExecutionResult);

                    if (opt.ShowTime != 0)
                    {
                        for (var i = 0; i < opt.ShowTime; i++)
                        {
                            exer = vm.Run(os);
                        }

                        sw.Stop();
                    }
                    else
                    {
                        exer = vm.Run(os);
                    }

                    if (opt.ShowTime != 0 && !interactive)
                    {
                        Console.WriteLine("Executed: {0} time(s). Execution time: {1}", opt.ShowTime, sw.Elapsed);
                    }

                    if (exer.ReturnValue.TypeCode != ElaTypeCode.None && exer.ReturnValue.TypeCode != ElaTypeCode.Unit)
                    {
                        Console.WriteLine(vm.PrintValue(exer.ReturnValue));
                    }
                }
                catch (ElaException ex)
                {
                    helper.PrintError(ex.ToString());
                    return(R_ERR);
                }
            }

            return(R_OK);
        }
示例#4
0
        private static int Execute(CodeAssembly asm, bool interactive)
        {
            var mod = asm.GetRootModule();

            if (opt.ShowEil)
            {
                var gen = new EilGenerator(mod);
                Console.WriteLine("EIL ({0}-{1}):", lastOffset, mod.Ops.Count - 1);
                Console.Write(gen.Generate(lastOffset));
                lastOffset = mod.Ops.Count;
            }
            else if (opt.ShowSymbols != SymTables.None)
            {
                var gen = new DebugReader(mod.Symbols);
                helper.PrintSymTables(gen);
                lastOffset = mod.Ops.Count;
            }
            else
            {
                try
                {
                    if (vm == null)
                        vm = new ElaMachine(asm);
                    else
                    {
                        vm.RefreshState();
                        vm.Recover();
                    }

                    if (opt.ShowTime && !interactive)
                        Warmup(asm); //GIT

                    var os = lastOffset;
                    lastOffset = mod.Ops.Count;
                    var sw = new Stopwatch();
                    sw.Start();
                    var exer = vm.Run(os);
                    sw.Stop();

                    if (opt.ShowTime && !interactive)
                        Console.WriteLine("Execution time: {0}", sw.Elapsed);

                    if (exer.ReturnValue.TypeCode != ElaTypeCode.None && exer.ReturnValue.TypeCode != ElaTypeCode.Unit)
                        Console.WriteLine(vm.PrintValue(exer.ReturnValue));
                }
                catch (ElaException ex)
                {
                    helper.PrintError(ex.ToString());
                    return R_ERR;
                }
            }

            return R_OK;
        }