don't use {.rtl.} for generics, otherwise -d:useNimRtl gives ambiguous identifier nimrtl error (#18406)

This commit is contained in:
Timothee Cour
2021-07-01 02:14:01 -07:00
committed by GitHub
parent 41c29cb3a1
commit 779b4e307b
3 changed files with 13 additions and 10 deletions

View File

@@ -1760,7 +1760,7 @@ func join*(a: openArray[string], sep: string = ""): string {.rtl,
else:
result = ""
func join*[T: not string](a: openArray[T], sep: string = ""): string {.rtl.} =
func join*[T: not string](a: openArray[T], sep: string = ""): string =
## Converts all elements in the container `a` to strings using `$`,
## and concatenates them with `sep`.
runnableExamples:

View File

@@ -30,12 +30,13 @@ when defined(createNimRtl):
{.pragma: inl.}
{.pragma: compilerRtl, compilerproc, exportc: "nimrtl_$1", dynlib.}
elif defined(useNimRtl):
when defined(windows):
const nimrtl* = "nimrtl.dll"
elif defined(macosx):
const nimrtl* = "libnimrtl.dylib"
else:
const nimrtl* = "libnimrtl.so"
#[
`{.rtl.}` should only be used for non-generic procs.
]#
const nimrtl* =
when defined(windows): "nimrtl.dll"
elif defined(macosx): "libnimrtl.dylib"
else: "libnimrtl.so"
{.pragma: rtl, importc: "nimrtl_$1", dynlib: nimrtl, gcsafe.}
{.pragma: inl.}
{.pragma: compilerRtl, compilerproc, importc: "nimrtl_$1", dynlib: nimrtl.}

View File

@@ -1,5 +1,4 @@
discard """
output: "Done"
cmd: "nim $target --debuginfo --hints:on --define:useNimRtl $options $file"
"""
@@ -37,5 +36,8 @@ proc eval(n: PNode): int =
for i in 0..100_000:
discard eval(buildTree(2))
echo "Done"
# bug https://forum.nim-lang.org/t/8176; Error: ambiguous identifier: 'nimrtl'
import std/strutils
doAssert join(@[1, 2]) == "12"
doAssert join(@[1.5, 2.5]) == "1.52.5"
doAssert join(@["a", "bc"]) == "abc"