lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

Thank you very much! I understand the meaning of luaK_patchtohere.
When I dig into Lua source, I found another problem which confusing me.

static void leaveblock (FuncState *fs) {
 BlockCnt *bl = fs->bl;
 fs->bl = bl->previous;
 removevars(fs->ls, bl->nactvar);
 if (bl->upval)
   luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0);
 lua_assert(!bl->isbreakable || !bl->upval);  /* loops have no body */
 lua_assert(bl->nactvar == fs->nactvar);
 fs->freereg = fs->nactvar;  /* free registers */
 luaK_patchtohere(fs, bl->breaklist);

lua_assert(!bl->isbreakable || !bl->upval);  /* loops have no body */
According to the assert, it seems for statement and while statement
cannot have upvalue.Would you give me more information about this?