Skip to content

Commit

Permalink
disable weird type inference for object constructors (#24455)
Browse files Browse the repository at this point in the history
closes #24372, refs #20091

This was added in #20091 for some reason but doesn't actually work and
only makes error messages more obscure. So for now, it's disabled.

Can also be backported to 2.0 if necessary.

(cherry picked from commit a610f23)
  • Loading branch information
metagn authored and narimiran committed Jan 14, 2025
1 parent 2b1885a commit 87c3060
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 87c3060

Please sign in to comment.