aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/lvm.c b/lvm.c
index e1268567..52a6ca35 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 2.271 2017/04/20 19:53:55 roberto Exp roberto $ 2** $Id: lvm.c,v 2.272 2017/04/24 20:26:39 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*/
@@ -725,10 +725,10 @@ void luaV_finishOp (lua_State *L) {
725 725
726 726
727#define RA(i) (base+GETARG_A(i)) 727#define RA(i) (base+GETARG_A(i))
728#define RB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_B(i)) 728#define RB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_Br(i))
729#define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i)) 729#define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i))
730#define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \ 730#define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \
731 ISK(GETARG_B(i)) ? k+INDEXK(GETARG_B(i)) : base+GETARG_B(i)) 731 (GETARG_Bk(i)) ? k+GETARG_Br(i) : base+GETARG_Br(i))
732#define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \ 732#define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \
733 ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i)) 733 ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i))
734 734
@@ -898,6 +898,27 @@ void luaV_execute (lua_State *L) {
898 else Protect(luaV_finishget(L, rb, rc, ra, slot)); 898 else Protect(luaV_finishget(L, rb, rc, ra, slot));
899 vmbreak; 899 vmbreak;
900 } 900 }
901 vmcase(OP_ADDI) {
902 TValue *rb = RB(i);
903 int ic = GETARG_C(i);
904 lua_Number nb;
905 if (ttisinteger(rb)) {
906 setivalue(ra, intop(+, ivalue(rb), ic));
907 }
908 else if (tonumber(rb, &nb)) {
909 setfltvalue(ra, luai_numadd(L, nb, cast_num(ic)));
910 }
911 else {
912 TValue aux; TValue *rc;
913 setivalue(&aux, ic);
914 if (GETARG_Bk(i)) { /* arguments were exchanged? */
915 rc = rb; rb = &aux; /* correct them */
916 }
917 else rc = &aux;
918 Protect(luaT_trybinTM(L, rb, rc, ra, TM_ADD));
919 }
920 vmbreak;
921 }
901 vmcase(OP_ADD) { 922 vmcase(OP_ADD) {
902 TValue *rb = RKB(i); 923 TValue *rb = RKB(i);
903 TValue *rc = RKC(i); 924 TValue *rc = RKC(i);