diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index 96125051..2665b7e8 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -422,7 +422,11 @@ B makeRand_c1(B t, B x) { static B randNS; B getRandNS() { if (randNS.u == 0) { - randNS = c1(bi_makeRand,m_f64(RANDSEED)); + #if RANDSEED==0 + randNS = c1(bi_makeRand, m_f64(nsTime())); + #else + randNS = c1(bi_makeRand, m_f64(RANDSEED)); + #endif gc_add(randNS); } return inc(randNS); @@ -541,13 +545,13 @@ B list_c1(B d, B x) { B unixTime_c1(B t, B x) { dec(x); - return m_i32(time(NULL)); + return m_f64(time(NULL)); } B monoTime_c1(B t, B x) { dec(x); struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); - return m_i32(ts.tv_sec); + return m_f64(ts.tv_sec + ts.tv_nsec/1e9); } B delay_c1(B t, B x) { f64 sf = o2f(x); diff --git a/src/h.h b/src/h.h index 79f68220..64744a8a 100644 --- a/src/h.h +++ b/src/h.h @@ -37,7 +37,7 @@ #define FORMATTER 1 // use self-hosted formatter for output #endif #ifndef RANDSEED - #define RANDSEED 1 // random seed used to make •rand + #define RANDSEED 0 // random seed used to make •rand (0 for using time) #endif // #define HEAP_VERIFY // enable usage of heapVerify() @@ -142,9 +142,9 @@ static const u16 EXT_TAG = 0b0111111111110100; // 7FF4 0111111111110100ddddddddd static const u16 MD1_TAG = 0b1111111111110010; // FFF2 1111111111110010ppppppppppppppppppppppppppppppppppppppppppppp000 1-modifier static const u16 MD2_TAG = 0b1111111111110011; // FFF3 1111111111110011ppppppppppppppppppppppppppppppppppppppppppppp000 2-modifier static const u16 FUN_TAG = 0b1111111111110100; // FFF4 1111111111110100ppppppppppppppppppppppppppppppppppppppppppppp000 function -static const u16 NSP_TAG = 0b1111111111110101; // FFF5 1111111111110101ppppppppppppppppppppppppppppppppppppppppppppp000 namespace maybe? -static const u16 OBJ_TAG = 0b1111111111110110; // FFF6 1111111111110110ppppppppppppppppppppppppppppppppppppppppppppp000 custom object (e.g. bigints) -static const u16 ARR_TAG = 0b1111111111110111; // FFF7 1111111111110111ppppppppppppppppppppppppppppppppppppppppppppp000 array (everything else is an atom) +static const u16 NSP_TAG = 0b1111111111110101; // FFF5 1111111111110101ppppppppppppppppppppppppppppppppppppppppppppp000 namespace +static const u16 OBJ_TAG = 0b1111111111110110; // FFF6 1111111111110110ppppppppppppppppppppppppppppppppppppppppppppp000 custom/internal object +static const u16 ARR_TAG = 0b1111111111110111; // FFF7 1111111111110111ppppppppppppppppppppppppppppppppppppppppppppp000 array (everything else here is an atom) static const u16 VAL_TAG = 0b1111111111110 ; // FFF. 1111111111110................................................... pointer to Value, needs refcounting #define ftag(X) ((u64)(X) << 48) #define tag(V, T) b(((u64)(V)) | ftag(T))