aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2001-06-28 11:48:44 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2001-06-28 11:48:44 -0300
commitb346834a09c086affce6308c7917a8f6af310d11 (patch)
tree960750333f506d0dc88e0b92e68dbda48234b176
parent61a036eaa5918bdf5d7f01443b43288030337d20 (diff)
downloadlua-b346834a09c086affce6308c7917a8f6af310d11.tar.gz
lua-b346834a09c086affce6308c7917a8f6af310d11.tar.bz2
lua-b346834a09c086affce6308c7917a8f6af310d11.zip
new macros for changing numbers
-rw-r--r--lobject.h4
-rw-r--r--lvm.c17
2 files changed, 13 insertions, 8 deletions
diff --git a/lobject.h b/lobject.h
index c12bc177..b0af0e5f 100644
--- a/lobject.h
+++ b/lobject.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lobject.h,v 1.106 2001/06/15 20:36:57 roberto Exp roberto $ 2** $Id: lobject.h,v 1.107 2001/06/26 13:20:45 roberto Exp roberto $
3** Type definitions for Lua objects 3** Type definitions for Lua objects
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -55,6 +55,8 @@ typedef struct lua_TObject {
55#define setnvalue(obj,x) \ 55#define setnvalue(obj,x) \
56 { TObject *_o=(obj); _o->tt=LUA_TNUMBER; _o->value.n=(x); } 56 { TObject *_o=(obj); _o->tt=LUA_TNUMBER; _o->value.n=(x); }
57 57
58#define chgnvalue(obj,x) ((obj)->value.n=(x))
59
58#define setsvalue(obj,x) \ 60#define setsvalue(obj,x) \
59 { TObject *_o=(obj); _o->tt=LUA_TSTRING; _o->value.ts=(x); } 61 { TObject *_o=(obj); _o->tt=LUA_TSTRING; _o->value.ts=(x); }
60 62
diff --git a/lvm.c b/lvm.c
index 7a92fab7..774beeee 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 1.187 2001/06/20 17:22:46 roberto Exp roberto $ 2** $Id: lvm.c,v 1.188 2001/06/26 13:20: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*/
@@ -39,9 +39,10 @@ static void luaV_checkGC (lua_State *L, StkId top) {
39 39
40 40
41const TObject *luaV_tonumber (const TObject *obj, TObject *n) { 41const TObject *luaV_tonumber (const TObject *obj, TObject *n) {
42 lua_Number num;
42 if (ttype(obj) == LUA_TNUMBER) return obj; 43 if (ttype(obj) == LUA_TNUMBER) return obj;
43 if (ttype(obj) == LUA_TSTRING && luaO_str2d(svalue(obj), &nvalue(n))) { 44 if (ttype(obj) == LUA_TSTRING && luaO_str2d(svalue(obj), &num)) {
44 setttype(n, LUA_TNUMBER); 45 setnvalue(n, num);
45 return n; 46 return n;
46 } 47 }
47 else 48 else
@@ -580,10 +581,11 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) {
580 luaD_error(L, l_s("`for' limit must be a number")); 581 luaD_error(L, l_s("`for' limit must be a number"));
581 if (luaV_tonumber(ra+2, ra+2) == NULL) 582 if (luaV_tonumber(ra+2, ra+2) == NULL)
582 luaD_error(L, l_s("`for' step must be a number")); 583 luaD_error(L, l_s("`for' step must be a number"));
583 nvalue(ra) -= nvalue(ra+2);/* decrement index (to be incremented) */ 584 /* decrement index (to be incremented) */
585 chgnvalue(ra, nvalue(ra) - nvalue(ra+2));
584 pc += -GETARG_sBc(i); /* `jump' to loop end (delta is negated here) */ 586 pc += -GETARG_sBc(i); /* `jump' to loop end (delta is negated here) */
585 /* store in `ra+1' total number of repetitions */ 587 /* store in `ra+1' total number of repetitions */
586 nvalue(ra+1) = ((nvalue(ra+1)-nvalue(ra))/nvalue(ra+2)); 588 chgnvalue(ra+1, (nvalue(ra+1)-nvalue(ra))/nvalue(ra+2));
587 /* go through */ 589 /* go through */
588 } 590 }
589 case OP_FORLOOP: { 591 case OP_FORLOOP: {
@@ -591,8 +593,9 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) {
591 ttype(ra+2) == LUA_TNUMBER); 593 ttype(ra+2) == LUA_TNUMBER);
592 if (ttype(ra) != LUA_TNUMBER) 594 if (ttype(ra) != LUA_TNUMBER)
593 luaD_error(L, l_s("`for' index must be a number")); 595 luaD_error(L, l_s("`for' index must be a number"));
594 if (--nvalue(ra+1) >= 0) { 596 chgnvalue(ra+1, nvalue(ra+1) - 1); /* decrement counter */
595 nvalue(ra) += nvalue(ra+2); /* increment index */ 597 if (nvalue(ra+1) >= 0) {
598 chgnvalue(ra, nvalue(ra) + nvalue(ra+2)); /* increment index */
596 dojump(pc, i); /* repeat loop */ 599 dojump(pc, i); /* repeat loop */
597 } 600 }
598 break; 601 break;