diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-09-27 15:59:08 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-09-27 15:59:08 -0300 |
commit | 1b100335839e13021b4731f0407b87e4f7544dc0 (patch) | |
tree | 085979000de158de7d034c34d208b1318bbea90f /lvm.c | |
parent | 00e728af885d2781e365071557530a6685110d7e (diff) | |
download | lua-1b100335839e13021b4731f0407b87e4f7544dc0.tar.gz lua-1b100335839e13021b4731f0407b87e4f7544dc0.tar.bz2 lua-1b100335839e13021b4731f0407b87e4f7544dc0.zip |
new function 'luaT_trybiniTM'
to handle tag methods for instructions with immediate integer arguments
Diffstat (limited to 'lvm.c')
-rw-r--r-- | lvm.c | 13 |
1 files changed, 3 insertions, 10 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lvm.c,v 2.293 2017/09/19 18:38:14 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 2.294 2017/09/26 18:14:45 roberto Exp roberto $ |
3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -999,15 +999,8 @@ void luaV_execute (lua_State *L) { | |||
999 | else if (tonumberns(rb, nb)) { | 999 | else if (tonumberns(rb, nb)) { |
1000 | setfltvalue(s2v(ra), luai_numadd(L, nb, cast_num(ic))); | 1000 | setfltvalue(s2v(ra), luai_numadd(L, nb, cast_num(ic))); |
1001 | } | 1001 | } |
1002 | else { | 1002 | else |
1003 | TValue aux; TValue *rc; | 1003 | Protect(luaT_trybiniTM(L, rb, ic, GETARG_Bk(i), ra, TM_ADD)); |
1004 | setivalue(&aux, ic); | ||
1005 | if (GETARG_Bk(i)) { /* arguments were exchanged? */ | ||
1006 | rc = rb; rb = &aux; /* correct them */ | ||
1007 | } | ||
1008 | else rc = &aux; | ||
1009 | Protect(luaT_trybinTM(L, rb, rc, ra, TM_ADD)); | ||
1010 | } | ||
1011 | vmbreak; | 1004 | vmbreak; |
1012 | } | 1005 | } |
1013 | vmcase(OP_ADD) { | 1006 | vmcase(OP_ADD) { |