Skip to content

Commit

Permalink
fix #16651 (#16658)
Browse files Browse the repository at this point in the history
* fix #16651
  • Loading branch information
cooldome committed Jan 11, 2021
1 parent 510e383 commit 0286a08
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
7 changes: 7 additions & 0 deletions compiler/semtypes.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1059,6 +1059,13 @@ proc liftParamType(c: PContext, procKind: TSymKind, genericParams: PNode,
# disable the bindOnce behavior for the type class
result = recurse(paramType.base, true)

of tyTuple:
for i in 0..<paramType.len:
let t = recurse(paramType[i])
if t != nil:
paramType[i] = t
result = paramType

of tyAlias, tyOwned, tySink:
result = recurse(paramType.base)

Expand Down
24 changes: 24 additions & 0 deletions tests/converter/tgenericconverter.nim
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,27 @@ aa.x = 666

p aa
q aa


#-------------------------------------------------------------
# issue #16651
type
PointTup = tuple
x: float32
y: float32

converter tupleToPoint[T1, T2: SomeFloat](self: tuple[x: T1, y: T2]): PointTup =
result = (self.x.float32, self.y.float32)

proc tupleToPointX(self: tuple[x: SomeFloat, y: SomeFloat]): PointTup =
result = (self.x.float32, self.y.float32)

proc tupleToPointX2(self: tuple[x: SomeFloat, y: distinct SomeFloat]): PointTup =
result = (self.x.float32, self.y.float32)

var t1: PointTup = tupleToPointX((1.0, 0.0))
var t2: PointTup = tupleToPointX2((1.0, 0.0))
var t3: PointTup = tupleToPointX2((1.0'f32, 0.0))
var t4: PointTup = tupleToPointX2((1.0, 0.0'f32))

var x2: PointTup = (1.0, 0.0)

0 comments on commit 0286a08

Please sign in to comment.