From 400ad7af56c63dbfa381ae050400db799d5ab7ed Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Mon, 3 Nov 2025 22:20:16 +0800 Subject: [PATCH] fixes #25252; Unexpected ambiguous call with fields over object with default fields --- compiler/semtypes.nim | 4 ++-- compiler/semtypinst.nim | 2 +- tests/objects/tobject_default_value.nim | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 9d660a3bec5d5..15f3a02e6e95e 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -556,7 +556,7 @@ proc semTuple(c: PContext, n: PNode, prev: PType): PType = typ = a[^1].typ else: fitDefaultNode(c, a[^1], typ) - typ = a[^1].typ + typ = a[^1].typ.skipIntLit(c.idgen) elif a[^2].kind != nkEmpty: typ = semTypeNode(c, a[^2], nil) if c.graph.config.isDefined("nimPreviewRangeDefault") and typ.skipTypes(abstractInst).kind == tyRange: @@ -928,7 +928,7 @@ proc semRecordNodeAux(c: PContext, n: PNode, check: var IntSet, pos: var int, typ = n[^1].typ else: fitDefaultNode(c, n[^1], typ) - typ = n[^1].typ + typ = n[^1].typ.skipIntLit(c.idgen) propagateToOwner(rectype, typ) elif n[^2].kind == nkEmpty: localError(c.config, n.info, errTypeExpected) diff --git a/compiler/semtypinst.nim b/compiler/semtypinst.nim index a615aeee94a83..f923b736edfbb 100644 --- a/compiler/semtypinst.nim +++ b/compiler/semtypinst.nim @@ -280,7 +280,7 @@ proc replaceTypeVarsN(cl: var TReplTypeVars, n: PNode; start=0; expectedType: PT (cl.owner == nil or result.sym.owner == cl.owner): # instantiate default value of object/tuple field cl.c.fitDefaultNode(cl.c, result.sym.ast, result.sym.typ) - result.sym.typ = result.sym.ast.typ + result.sym.typ = result.sym.ast.typ.skipIntLit(cl.c.idgen) # sym type can be nil if was gensym created by macro, see #24048 if result.sym.typ != nil and result.sym.typ.kind == tyVoid: # don't add the 'void' field diff --git a/tests/objects/tobject_default_value.nim b/tests/objects/tobject_default_value.nim index 8b6ea812b7eba..1d86dd155010f 100644 --- a/tests/objects/tobject_default_value.nim +++ b/tests/objects/tobject_default_value.nim @@ -819,3 +819,18 @@ block: var t = MyTyp() t.thing[""] = "" + + +type + Thing = object + a: int = 100 # this is fine + b = 100 # this is not + +proc overloaded[T: SomeSignedInt](x: T) = discard +proc overloaded[T: SomeUnsignedInt](x: T) = discard +proc overloaded[T: object](x: T) = + for val in fields(x): + var v: typeof(val) + overloaded(v) + +overloaded(Thing()) \ No newline at end of file