Skip to content

Commit

Permalink
disable weird type inference for object constructors
Browse files Browse the repository at this point in the history
  • Loading branch information
metagn committed Nov 19, 2024
1 parent a2031ec commit 924d451
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
13 changes: 8 additions & 5 deletions compiler/semobjconstr.nim
Original file line number Diff line number Diff line change
Expand Up @@ -465,11 +465,14 @@ proc semObjConstr(c: PContext, n: PNode, flags: TExprFlags; expectedType: PType
if t == nil:
return localErrorNode(c, result, "object constructor needs an object type")

if t.skipTypes({tyGenericInst,
tyAlias, tySink, tyOwned, tyRef}).kind != tyObject and
expectedType != nil and expectedType.skipTypes({tyGenericInst,
tyAlias, tySink, tyOwned, tyRef}).kind == tyObject:
t = expectedType
when false:
# attempted type inference for generic object types,
# doesn't work since n[0] isn't set and seems underspecified
if t.skipTypes({tyGenericInst,
tyAlias, tySink, tyOwned, tyRef}).kind != tyObject and
expectedType != nil and expectedType.skipTypes({tyGenericInst,
tyAlias, tySink, tyOwned, tyRef}).kind == tyObject:
t = expectedType

t = skipTypes(t, {tyGenericInst, tyAlias, tySink, tyOwned})
if t.kind == tyRef:
Expand Down
11 changes: 11 additions & 0 deletions tests/errmsgs/tuninstobjconstr.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# issue #24372

type
Foo[T] = object
x: string

proc initFoo(): Foo[string] =
Foo(x: "hello") #[tt.Error
^ cannot instantiate: 'Foo[T]'; the object's generic parameters cannot be inferred and must be explicitly given]#

discard initFoo()

0 comments on commit 924d451

Please sign in to comment.