MCPcopy Create free account
hub / github.com/EmmyLua/EmmyLuaDebugger / luaK_self

Function luaK_self

third-party/lua-5.5.0/src/lcode.c:1321–1341  ·  view source on GitHub ↗

** Emit SELF instruction or equivalent: the code will convert ** expression 'e' into 'e.key(e,'. */

Source from the content-addressed store, hash-verified

1319** expression 'e' into 'e.key(e,'.
1320*/
1321void luaK_self (FuncState *fs, expdesc *e, expdesc *key) {
1322 int ereg, base;
1323 luaK_exp2anyreg(fs, e);
1324 ereg = e->u.info; /* register where 'e' (the receiver) was placed */
1325 freeexp(fs, e);
1326 base = e->u.info = fs->freereg; /* base register for op_self */
1327 e->k = VNONRELOC; /* self expression has a fixed register */
1328 luaK_reserveregs(fs, 2); /* method and 'self' produced by op_self */
1329 lua_assert(key->k == VKSTR);
1330 /* is method name a short string in a valid K index? */
1331 if (strisshr(key->u.strval) && luaK_exp2K(fs, key)) {
1332 /* can use 'self' opcode */
1333 luaK_codeABCk(fs, OP_SELF, base, ereg, key->u.info, 0);
1334 }
1335 else { /* cannot use 'self' opcode; use move+gettable */
1336 luaK_exp2anyreg(fs, key); /* put method name in a register */
1337 luaK_codeABC(fs, OP_MOVE, base + 1, ereg, 0); /* copy self to base+1 */
1338 luaK_codeABC(fs, OP_GETTABLE, base, ereg, key->u.info); /* get method */
1339 }
1340 freeexp(fs, key);
1341}
1342
1343
1344/* auxiliary function to define indexing expressions */

Callers 1

suffixedexpFunction · 0.70

Calls 6

luaK_exp2anyregFunction · 0.70
freeexpFunction · 0.70
luaK_reserveregsFunction · 0.70
luaK_exp2KFunction · 0.70
luaK_codeABCkFunction · 0.70
luaK_codeABCFunction · 0.50

Tested by

no test coverage detected