summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/pure/bitops.nim2
-rw-r--r--tests/stdlib/t21564.nim4
2 files changed, 5 insertions, 1 deletions
diff --git a/lib/pure/bitops.nim b/lib/pure/bitops.nim
index d19c3d248..005c7fa8f 100644
--- a/lib/pure/bitops.nim
+++ b/lib/pure/bitops.nim
@@ -65,7 +65,7 @@ type BitsRange*[T] = range[0..sizeof(T)*8-1]
 
 template typeMasked[T: SomeInteger](x: T): T =
   when defined(js):
-    x and ((0xffffffff_ffffffff'u shr (64 - sizeof(T) * 8)))
+    T(x and ((0xffffffff_ffffffff'u shr (64 - sizeof(T) * 8))))
   else:
     x
 
diff --git a/tests/stdlib/t21564.nim b/tests/stdlib/t21564.nim
index cb06155cf..0a5777d12 100644
--- a/tests/stdlib/t21564.nim
+++ b/tests/stdlib/t21564.nim
@@ -22,6 +22,10 @@ proc main() =
     # test `bitops.toMask` patch via bitops.masked
     doAssert(0x12FFFF34.masked(8..23) == 0x00FFFF00)
 
+  block: # bug #22687
+    var a: uint8 = 0b1111_1111
+    doAssert a.bitsliced(4..7).int == 15
+
 main()
 
 static: