fixes empty tag for nim ic (#25615)

`writeNode` writes `(empty flags type (empty))`, but it should have been
`(empty flags type)` instead

```nim
type
  Meters = distinct float
  Feet = distinct float

converter toMeters(f: Feet): Meters =
  Meters(float(f) * 0.3048)

proc showMeters(m: Meters) =
  echo float(m)

showMeters(Feet(10.0))
```
gives `[NIF decoder] expected: {ParRi} but got:
ParLe14,152,/Users/blue/.choosenim/toolchains/nim-\23devel/lib/std/private/dragonbox.nim(empty)`

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
ringabout
2026-03-19 14:36:09 +08:00
committed by GitHub
parent a7e0065056
commit 197633dc8b
2 changed files with 18 additions and 3 deletions

View File

@@ -523,9 +523,7 @@ proc writeNode(w: var Writer; dest: var TokenBuf; n: PNode; forAst = false) =
of nkEmpty:
if n.typField != nil:
w.withNode dest, n:
let info = trLineInfo(w, n.info)
dest.addParLe pool.tags.getOrIncl(toNifTag(n.kind)), info
dest.addParRi
discard
else:
let info = trLineInfo(w, n.info)
dest.addParLe pool.tags.getOrIncl(toNifTag(n.kind)), info

17
tests/ic/tconverter.nim Normal file
View File

@@ -0,0 +1,17 @@
discard """
output:
ok
"""
type
Meters = distinct float
Feet = distinct float
converter toMeters(f: Feet): Meters =
Meters(float(f) * 0.3048)
proc showMeters(m: Meters) =
doAssert float(m) == 3.048
echo "ok"
showMeters(Feet(10.0))