Skip to content

Commit d54b5f3

Browse files
authored
fixes #25252; Unexpected ambiguous call with fields over object with default fields (#25256)
fixes #25252
1 parent 5079074 commit d54b5f3

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

compiler/semtypes.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ proc semTuple(c: PContext, n: PNode, prev: PType): PType =
556556
typ = a[^1].typ
557557
else:
558558
fitDefaultNode(c, a[^1], typ)
559-
typ = a[^1].typ
559+
typ = a[^1].typ.skipIntLit(c.idgen)
560560
elif a[^2].kind != nkEmpty:
561561
typ = semTypeNode(c, a[^2], nil)
562562
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,
928928
typ = n[^1].typ
929929
else:
930930
fitDefaultNode(c, n[^1], typ)
931-
typ = n[^1].typ
931+
typ = n[^1].typ.skipIntLit(c.idgen)
932932
propagateToOwner(rectype, typ)
933933
elif n[^2].kind == nkEmpty:
934934
localError(c.config, n.info, errTypeExpected)

compiler/semtypinst.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ proc replaceTypeVarsN(cl: var TReplTypeVars, n: PNode; start=0; expectedType: PT
280280
(cl.owner == nil or result.sym.owner == cl.owner):
281281
# instantiate default value of object/tuple field
282282
cl.c.fitDefaultNode(cl.c, result.sym.ast, result.sym.typ)
283-
result.sym.typ = result.sym.ast.typ
283+
result.sym.typ = result.sym.ast.typ.skipIntLit(cl.c.idgen)
284284
# sym type can be nil if was gensym created by macro, see #24048
285285
if result.sym.typ != nil and result.sym.typ.kind == tyVoid:
286286
# don't add the 'void' field

tests/objects/tobject_default_value.nim

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,3 +819,18 @@ block:
819819

820820
var t = MyTyp()
821821
t.thing[""] = ""
822+
823+
824+
type
825+
Thing = object
826+
a: int = 100 # this is fine
827+
b = 100 # this is not
828+
829+
proc overloaded[T: SomeSignedInt](x: T) = discard
830+
proc overloaded[T: SomeUnsignedInt](x: T) = discard
831+
proc overloaded[T: object](x: T) =
832+
for val in fields(x):
833+
var v: typeof(val)
834+
overloaded(v)
835+
836+
overloaded(Thing())

0 commit comments

Comments
 (0)