Skip to content

Commit 118c5db

Browse files
committed
fix(NIM-BUG): random.randbytes not compile when JS
Nim@1af88a2d20add67e3c376f0bc7144f9a0a843183 compiler/jsgen.nim (1865) genCall (1774) genArgs (1735) genArg (1605) genAddr internal error: genAddr: nkHiddenSubConv
1 parent 86a3001 commit 118c5db

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed

src/pylib/Lib/random_impl/proc_others.nim

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,14 @@ func fromU32s(res: var string; wordarray: openArray[uint32]) =
9090
res = newStringMayUninit wordarray.len * bytePerWord
9191
res.fromU32sImpl wordarray
9292

93-
func getrandbits_impl[Seq: seq[U8]|string](self; k: int; res: var Seq) =
93+
func getrandbits_impl(self; k: int): seq[uint32] =
9494
## `_random_Random_getrandbits_impl` but returns seq
9595
if k <= 32:
96-
res.fromU32s [genrand_uint32(self) shr (32 - k)]
97-
return
96+
return @[genrand_uint32(self) shr (32 - k)]
9897

9998
let words = (k - 1) div 32 + 1
10099

101-
var wordarray = newSeqMayUninit[uint32](words * 4)
100+
result = newSeqMayUninit[uint32](words * 4)
102101

103102
var k = k
104103
template rng: untyped =
@@ -109,16 +108,14 @@ func getrandbits_impl[Seq: seq[U8]|string](self; k: int; res: var Seq) =
109108
var r = genrand_uint32(self)
110109
if k < 32:
111110
r = r shr (32 - k)
112-
wordarray[i] = r
111+
result[i] = r
113112
k.dec 32
114113

115-
res.fromU32s wordarray
116-
117114
genGbls:
118115
method randbytes*(self; n: int): string{.base.} =
119116
## `return self.getrandbits(n * 8).to_bytes(n, 'little')`
120117
## here we use `_random_Random_getrandbits_impl`
121-
self.getrandbits_impl n*8, result
118+
result.fromU32s self.getrandbits_impl n*8
122119

123120
method getrandbits*(self; k: int): int{.base.} =
124121
## `_random_Random_getrandbits_impl`
@@ -134,7 +131,7 @@ genGbls:
134131
assert k < MaxBit
135132

136133
var res: seq[uint8]
137-
self.getrandbits_impl k, res
134+
res.fromU32s self.getrandbits_impl k
138135
res.setLen MaxSize
139136
result = cast[ptr R](res[0].addr)[]
140137
when PyLittleEndian:

0 commit comments

Comments
 (0)