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; } }