From 197633dc8bf9a2e7d856a267158759e7c33b4106 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Thu, 19 Mar 2026 14:36:09 +0800 Subject: [PATCH] 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> --- compiler/ast2nif.nim | 4 +--- tests/ic/tconverter.nim | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 tests/ic/tconverter.nim diff --git a/compiler/ast2nif.nim b/compiler/ast2nif.nim index 67a265c28f..157159f321 100644 --- a/compiler/ast2nif.nim +++ b/compiler/ast2nif.nim @@ -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 diff --git a/tests/ic/tconverter.nim b/tests/ic/tconverter.nim new file mode 100644 index 0000000000..e639d99247 --- /dev/null +++ b/tests/ic/tconverter.nim @@ -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))