Ejemplo n.º 1
0
        private void CGStat(FuncInfo funcInfo, StatNode node)
        {
            switch (node.Type)
            {
            case GrammarNodeType.FunctionCallStat:
                CGFuncCallStat(funcInfo, node as FuncCallStatNode);
                break;

            case GrammarNodeType.BreakStat:
                int pc = funcInfo.EmitJMP(0, 0);
                funcInfo.AddBreakJmp(pc);
                break;

            case GrammarNodeType.DoStat:
                CGDoStat(funcInfo, node as DoStatNode);
                break;

            case GrammarNodeType.RepeatStat:
                CGRepeatStat(funcInfo, node as RepeatStatNode);
                break;

            case GrammarNodeType.WhileStat:
                CGWhileStat(funcInfo, node as WhileStatNode);
                break;

            case GrammarNodeType.ForInStat:
                CGWhileStat(funcInfo, node as WhileStatNode);
                break;

            case GrammarNodeType.IfStat:
                CGIfStat(funcInfo, node as IfStatNode);
                break;

            case GrammarNodeType.ForNumStat:
                CGForNumStat(funcInfo, node as ForNumStatNode);
                break;

            case GrammarNodeType.LocalVarDecStat:
                CGLocalVarDefStat(funcInfo, node as LocalVarDecStatNode);
                break;

            case GrammarNodeType.LocalFuncDefStat:
                CGLocalFuncDefStat(funcInfo, node as LoacalFuncDefStatNode);
                break;

            case GrammarNodeType.AssignStat:
                CGAssignStat(funcInfo, node as AssignStatNode);
                break;
            }
        }