aboutsummaryrefslogtreecommitdiff
path: root/lmathlib.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2019-07-19 13:31:53 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2019-07-19 13:31:53 -0300
commit2f22c6bb79d209a55b3fc8e0b2d9c9f89f038174 (patch)
tree9fcece0aa1fa65f52b547c51e3c39181815f0887 /lmathlib.c
parent3c0d3c6fbeea18f257102c62a01b036c7a5c5161 (diff)
downloadlua-2f22c6bb79d209a55b3fc8e0b2d9c9f89f038174.tar.gz
lua-2f22c6bb79d209a55b3fc8e0b2d9c9f89f038174.tar.bz2
lua-2f22c6bb79d209a55b3fc8e0b2d9c9f89f038174.zip
'math.randomseed' always returns the two seed components
Diffstat (limited to 'lmathlib.c')
-rw-r--r--lmathlib.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/lmathlib.c b/lmathlib.c
index 1d310b2d..752647e7 100644
--- a/lmathlib.c
+++ b/lmathlib.c
@@ -586,7 +586,8 @@ static int math_random (lua_State *L) {
586} 586}
587 587
588 588
589static void setseed (Rand64 *state, lua_Unsigned n1, lua_Unsigned n2) { 589static void setseed (lua_State *L, Rand64 *state,
590 lua_Unsigned n1, lua_Unsigned n2) {
590 int i; 591 int i;
591 state[0] = Int2I(n1); 592 state[0] = Int2I(n1);
592 state[1] = Int2I(0xff); /* avoid a zero state */ 593 state[1] = Int2I(0xff); /* avoid a zero state */
@@ -594,6 +595,8 @@ static void setseed (Rand64 *state, lua_Unsigned n1, lua_Unsigned n2) {
594 state[3] = Int2I(0); 595 state[3] = Int2I(0);
595 for (i = 0; i < 16; i++) 596 for (i = 0; i < 16; i++)
596 nextrand(state); /* discard initial values to "spread" seed */ 597 nextrand(state); /* discard initial values to "spread" seed */
598 lua_pushinteger(L, n1);
599 lua_pushinteger(L, n2);
597} 600}
598 601
599 602
@@ -605,9 +608,7 @@ static void setseed (Rand64 *state, lua_Unsigned n1, lua_Unsigned n2) {
605static void randseed (lua_State *L, RanState *state) { 608static void randseed (lua_State *L, RanState *state) {
606 lua_Unsigned seed1 = (lua_Unsigned)time(NULL); 609 lua_Unsigned seed1 = (lua_Unsigned)time(NULL);
607 lua_Unsigned seed2 = (lua_Unsigned)(size_t)L; 610 lua_Unsigned seed2 = (lua_Unsigned)(size_t)L;
608 lua_pushinteger(L, seed1); 611 setseed(L, state->s, seed1, seed2);
609 lua_pushinteger(L, seed2);
610 setseed(state->s, seed1, seed2);
611} 612}
612 613
613 614
@@ -615,14 +616,13 @@ static int math_randomseed (lua_State *L) {
615 RanState *state = (RanState *)lua_touserdata(L, lua_upvalueindex(1)); 616 RanState *state = (RanState *)lua_touserdata(L, lua_upvalueindex(1));
616 if (lua_isnone(L, 1)) { 617 if (lua_isnone(L, 1)) {
617 randseed(L, state); 618 randseed(L, state);
618 return 2; /* return seeds */
619 } 619 }
620 else { 620 else {
621 lua_Integer n1 = luaL_checkinteger(L, 1); 621 lua_Integer n1 = luaL_checkinteger(L, 1);
622 lua_Integer n2 = luaL_optinteger(L, 2, 0); 622 lua_Integer n2 = luaL_optinteger(L, 2, 0);
623 setseed(state->s, n1, n2); 623 setseed(L, state->s, n1, n2);
624 return 0;
625 } 624 }
625 return 2; /* return seeds */
626} 626}
627 627
628 628