summary refs log tree commit diff stats
diff options
context:
space:
mode:
authortersec <tersec@users.noreply.github.com>2023-11-25 19:52:42 +0000
committerGitHub <noreply@github.com>2023-11-25 20:52:42 +0100
commit26f2ea149c50ebfe882560c83d1d7cf7bb9d10c4 (patch)
tree646ae75d6d726e303f62ddcc711fcc836724e338
parent379299a5ac06f67863525fe253f3de4a4e01ff01 (diff)
downloadNim-26f2ea149c50ebfe882560c83d1d7cf7bb9d10c4.tar.gz
remove unnecessary side-effects from base64.encode(mime) (#22986)
Fixes https://github.com/nim-lang/Nim/issues/22985
-rw-r--r--lib/pure/base64.nim16
-rw-r--r--tests/stdlib/tbase64.nim4
2 files changed, 8 insertions, 12 deletions
diff --git a/lib/pure/base64.nim b/lib/pure/base64.nim
index 795820433..6af5345f2 100644
--- a/lib/pure/base64.nim
+++ b/lib/pure/base64.nim
@@ -66,15 +66,11 @@ 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
 
 template encodeSize(size: int): int = (size * 4 div 3) + 6
@@ -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 5739b1621..98388bb6c 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()