summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorcooldome <ariabushenko@gmail.com>2021-01-11 09:09:38 +0000
committerGitHub <noreply@github.com>2021-01-11 10:09:38 +0100
commit0286a0879bc44e5267a5fd36e6f4aac8f78713ea (patch)
tree727a46cfaf53236a064d6e53223cfb0cfd518593
parent510e383d9233641a82ef25d3e3fe3e2eba3a4388 (diff)
downloadNim-0286a0879bc44e5267a5fd36e6f4aac8f78713ea.tar.gz
fix #16651 (#16658)
* fix #16651
-rw-r--r--compiler/semtypes.nim7
-rw-r--r--tests/converter/tgenericconverter.nim24
2 files changed, 31 insertions, 0 deletions
diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim
index 64113a4c6..45f20da9b 100644
--- a/compiler/semtypes.nim
+++ b/compiler/semtypes.nim
@@ -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)
 
diff --git a/tests/converter/tgenericconverter.nim b/tests/converter/tgenericconverter.nim
index e1c9f7c4c..cbbd2e1b0 100644
--- a/tests/converter/tgenericconverter.nim
+++ b/tests/converter/tgenericconverter.nim
@@ -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)
\ No newline at end of file