private void CGForInStat(FuncInfo funcInfo, ForInStatNode node) { funcInfo.EnterScope(true); LocalVarDecStatNode varDecStatNode = new LocalVarDecStatNode(); varDecStatNode.ExpList = node.ExpList; varDecStatNode.NameList = new List <ConstExpNode>() { new ConstExpNode(new Token(TokenType.Identifier, "for_generator", -1)), new ConstExpNode(new Token(TokenType.Identifier, "for_state", -1)), new ConstExpNode(new Token(TokenType.Identifier, "for_control", -1)) }; foreach (var name in node.NameList.NameList) { funcInfo.AddLocalVar(name.name); } int jmpToTFCPC = funcInfo.EmitJMP(0, 0); CGBlock(funcInfo, node.DoBlock.Block); funcInfo.FixSBX(jmpToTFCPC, funcInfo.PC() - jmpToTFCPC); var geneartor = funcInfo.VarDic1["for_generator"]; funcInfo.EmitTForCall(geneartor.RegIndex, node.NameList.NameList.Count); funcInfo.EmitTForLoop(geneartor.RegIndex + 2, jmpToTFCPC - funcInfo.PC() - 1); funcInfo.ExitScope(); }