コード例 #1
0
ファイル: CodeGenerator.cs プロジェクト: xiaoxiaofish/LuaVM
        public Prototype GenPrototype(BlockNode block)
        {
            var mainFunc = new FuncdefExpNode();

            mainFunc.Block    = block;
            mainFunc.IsVararg = false;
            mainFunc.ParList  = new List <ConstExpNode>();
            FuncInfo funcInfo = new FuncInfo();

            funcInfo.UpVarDic.Add("_ENV", new UpValInfo(-1, 0, 0));
            paser.CGBlock(funcInfo, block);
            VM.LuaVM vm = new VM.LuaVM();
            //vm.e

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            var p = ToPrototype(funcInfo);

            watch.Start();  //开始监视代码运行时间
            // try
            // {
            vm.LuaMain(p);
            //  }
            //  catch(Exception e)
            //  {
//
            //  }
            watch.Stop();                                                        //停止监视
            TimeSpan timespan = watch.Elapsed;                                   //获取当前实例测量得出的总时间

            Console.WriteLine("打开窗口代码执行时间:{0}(毫秒)", timespan.TotalMilliseconds); //总毫秒数
            Console.WriteLine("生成完毕!");
            return(null);
        }
コード例 #2
0
ファイル: SyntaxTreePaser.cs プロジェクト: xiaoxiaofish/LuaVM
        public void CGFuncDefExp(FuncInfo funcInfo, FuncdefExpNode node, int a)
        {
            FuncInfo newFuncInfo = new FuncInfo();

            newFuncInfo.NParam = node.ParList.Count;
            funcInfo.ChildFunc.Add(newFuncInfo);
            foreach (var param in node.ParList)
            {
                newFuncInfo.AddLocalVar(param.name);
            }

            CGBlock(newFuncInfo, node.Block);
            newFuncInfo.ExitScope();
            newFuncInfo.EmitReturn(0, 0);
            int bx = funcInfo.ChildFunc.Count - 1;

            funcInfo.EmitClosure(a, bx);
        }