From 26f2ea149c50ebfe882560c83d1d7cf7bb9d10c4 Mon Sep 17 00:00:00 2001 From: tersec Date: Sat, 25 Nov 2023 19:52:42 +0000 Subject: [PATCH] remove unnecessary side-effects from base64.encode(mime) (#22986) Fixes https://github.com/nim-lang/Nim/issues/22985 --- lib/pure/base64.nim | 16 ++++------------ tests/stdlib/tbase64.nim | 4 ++++ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/lib/pure/base64.nim b/lib/pure/base64.nim index 7958204331..6af5345f29 100644 --- a/lib/pure/base64.nim +++ b/lib/pure/base64.nim @@ -66,14 +66,10 @@ template cbBase(a, b): untyped = [ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', a, b] -let +const cb64 = cbBase('+', '/') cb64safe = cbBase('-', '_') -const - cb64VM = cbBase('+', '/') - cb64safeVM = cbBase('-', '_') - const invalidChar = 255 @@ -134,14 +130,10 @@ template encodeInternal(s, alphabet: typed): untyped = result.setLen(outputIndex) template encodeImpl() {.dirty.} = - when nimvm: - block: - let lookupTableVM = if safe: cb64safeVM else: cb64VM - encodeInternal(s, lookupTableVM) + if safe: + encodeInternal(s, cb64safe) else: - block: - let lookupTable = if safe: unsafeAddr(cb64safe) else: unsafeAddr(cb64) - encodeInternal(s, lookupTable) + encodeInternal(s, cb64) proc encode*[T: byte|char](s: openArray[T], safe = false): string = ## Encodes `s` into base64 representation. diff --git a/tests/stdlib/tbase64.nim b/tests/stdlib/tbase64.nim index 5739b1621c..98388bb6c5 100644 --- a/tests/stdlib/tbase64.nim +++ b/tests/stdlib/tbase64.nim @@ -53,5 +53,9 @@ template main() = doAssert encode("", safe = true) == "" doAssert encode("the quick brown dog jumps over the lazy fox", safe = true) == "dGhlIHF1aWNrIGJyb3duIGRvZyBqdW1wcyBvdmVyIHRoZSBsYXp5IGZveA==" +func mainNoSideEffects() = main() + static: main() main() +static: mainNoSideEffects() +mainNoSideEffects()