mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 14:00:35 +00:00
block ambiguous type conversion dotcalls in generics (#22375)
fixes #22373
This commit is contained in:
7
tests/generics/m22373a.nim
Normal file
7
tests/generics/m22373a.nim
Normal file
@@ -0,0 +1,7 @@
|
||||
# module a for t22373
|
||||
|
||||
# original:
|
||||
type LightClientHeader* = object
|
||||
|
||||
# simplified:
|
||||
type TypeOrTemplate* = object
|
||||
18
tests/generics/m22373b.nim
Normal file
18
tests/generics/m22373b.nim
Normal file
@@ -0,0 +1,18 @@
|
||||
# module b for t22373
|
||||
|
||||
import m22373a
|
||||
|
||||
# original:
|
||||
type
|
||||
LightClientDataFork* {.pure.} = enum
|
||||
None = 0,
|
||||
Altair = 1
|
||||
template LightClientHeader*(kind: static LightClientDataFork): auto =
|
||||
when kind == LightClientDataFork.Altair:
|
||||
typedesc[m22373a.LightClientHeader]
|
||||
else:
|
||||
static: raiseAssert "Unreachable"
|
||||
|
||||
# simplified:
|
||||
template TypeOrTemplate*(num: int): untyped =
|
||||
typedesc[m22373a.TypeOrTemplate]
|
||||
16
tests/generics/t22373.nim
Normal file
16
tests/generics/t22373.nim
Normal file
@@ -0,0 +1,16 @@
|
||||
# issue #22373
|
||||
|
||||
import m22373a
|
||||
import m22373b
|
||||
|
||||
# original:
|
||||
template lazy_header(name: untyped): untyped {.dirty.} =
|
||||
var `name _ ptr`: ptr[data_fork.LightClientHeader] # this data_fork.Foo part seems required to reproduce
|
||||
proc createLightClientUpdates(data_fork: static LightClientDataFork) =
|
||||
lazy_header(attested_header)
|
||||
createLightClientUpdates(LightClientDataFork.Altair)
|
||||
|
||||
# simplified:
|
||||
proc generic[T](abc: T) =
|
||||
var x: abc.TypeOrTemplate
|
||||
generic(123)
|
||||
@@ -46,6 +46,11 @@ block tdotlookup:
|
||||
x.set("hello", "world")
|
||||
result = x
|
||||
doAssert abc(5) == 10
|
||||
block: # ensure normal call is consistent with dot call
|
||||
proc T(x: int): float = x.float
|
||||
proc foo[T](x: int) =
|
||||
doAssert typeof(T(x)) is typeof(x.T)
|
||||
foo[uint](123)
|
||||
|
||||
block tmodule_same_as_proc:
|
||||
# bug #1965
|
||||
|
||||
Reference in New Issue
Block a user