summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2022-12-22 15:27:11 +0800
committerGitHub <noreply@github.com>2022-12-22 08:27:11 +0100
commit93b59da4902886cd68dd7df1dce09a1b455a06dc (patch)
tree6e12fe5cebe4f1bafaf9d5808af5a3964f8e2cfe
parent70fe360456b77912ec7f5014f7815137fa089fce (diff)
downloadNim-93b59da4902886cd68dd7df1dce09a1b455a06dc.tar.gz
fixes #20244; fixes castSizes warnings (#21102)
* fixes #20244; fixes castSizes warnings

* fixes js

* fixes js

* fixes js

* fixes

* typo

* extend using uint64

* Update lib/std/syncio.nim
-rw-r--r--compiler/ccgutils.nim2
-rw-r--r--compiler/condsyms.nim1
-rw-r--r--compiler/nim.cfg4
-rw-r--r--lib/pure/strutils.nim16
4 files changed, 20 insertions, 3 deletions
diff --git a/compiler/ccgutils.nim b/compiler/ccgutils.nim
index e19fccfa7..d86ebe461 100644
--- a/compiler/ccgutils.nim
+++ b/compiler/ccgutils.nim
@@ -53,7 +53,7 @@ proc hashString*(conf: ConfigRef; s: string): BiggestInt =
     a = a + (a shl 3)
     a = a xor (a shr 11)
     a = a + (a shl 15)
-    result = cast[Hash](a)
+    result = cast[Hash](uint(a))
 
 template getUniqueType*(key: PType): PType = key
 
diff --git a/compiler/condsyms.nim b/compiler/condsyms.nim
index 9d081ef0a..24c6d82d5 100644
--- a/compiler/condsyms.nim
+++ b/compiler/condsyms.nim
@@ -146,6 +146,7 @@ proc initDefines*(symbols: StringTableRef) =
   defineSymbol("nimHasCallsitePragma")
   defineSymbol("nimHasAmbiguousEnumHint")
 
+  defineSymbol("nimHasWarnCastSizes")
   defineSymbol("nimHasOutParams")
   defineSymbol("nimHasSystemRaisesDefect")
   defineSymbol("nimHasWarnUnnamedBreak")
diff --git a/compiler/nim.cfg b/compiler/nim.cfg
index 96b47b0e6..b9c8fdc08 100644
--- a/compiler/nim.cfg
+++ b/compiler/nim.cfg
@@ -31,6 +31,10 @@ define:useStdoutAsStdmsg
   warning[ObservableStores]:off
 @end
 
+@if nimHasWarnCastSizes:
+  warning[CastSizes]:on
+@end
+
 @if nimHasWarningAsError:
   warningAsError[GcUnsafe2]:on
 @end
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim
index f628cfc2d..dbdd0d6a1 100644
--- a/lib/pure/strutils.nim
+++ b/lib/pure/strutils.nim
@@ -944,14 +944,26 @@ func toHex*[T: SomeInteger](x: T, len: Positive): string =
     doAssert b.toHex(4) == "1001"
     doAssert toHex(62, 3) == "03E"
     doAssert toHex(-8, 6) == "FFFFF8"
-  toHexImpl(cast[BiggestUInt](x), len, x < 0)
+  when defined(js):
+    toHexImpl(cast[BiggestUInt](x), len, x < 0)
+  else:
+    when T is SomeSignedInt:
+      toHexImpl(cast[BiggestUInt](BiggestInt(x)), len, x < 0)
+    else:
+      toHexImpl(BiggestUInt(x), len, x < 0)
 
 func toHex*[T: SomeInteger](x: T): string =
   ## Shortcut for `toHex(x, T.sizeof * 2)`
   runnableExamples:
     doAssert toHex(1984'i64) == "00000000000007C0"
     doAssert toHex(1984'i16) == "07C0"
-  toHexImpl(cast[BiggestUInt](x), 2*sizeof(T), x < 0)
+  when defined(js):
+    toHexImpl(cast[BiggestUInt](x), 2*sizeof(T), x < 0)
+  else:
+    when T is SomeSignedInt:
+      toHexImpl(cast[BiggestUInt](BiggestInt(x)), 2*sizeof(T), x < 0)
+    else:
+      toHexImpl(BiggestUInt(x), 2*sizeof(T), x < 0)
 
 func toHex*(s: string): string {.rtl.} =
   ## Converts a bytes string to its hexadecimal representation.