Skip to content

Commit 1ab7641

Browse files
authored
Merge pull request #2372 from dotty-staging/fix-strawman-compile-2
Fix strawman compilation v2
2 parents 5db8e84 + f47ef9a commit 1ab7641

File tree

5 files changed

+59
-4
lines changed

5 files changed

+59
-4
lines changed

compiler/src/dotty/tools/dotc/core/NameKinds.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ object NameKinds {
305305
case _ => None
306306
}
307307

308-
def mkString(underlying: TermName, info: ThisInfo): String = unsupported("mkString")
308+
def mkString(underlying: TermName, info: ThisInfo): String = s"$underlying[with sig ${info.sig}]"
309309
def infoString: String = "Signed"
310310
}
311311

compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ class TreePickler(pickler: TastyPickler) {
347347
case _ => name
348348
}
349349
val sig = tree.tpe.signature
350-
if (sig == Signature.NotAMethod) pickleName(realName)
350+
if (name.isTypeName || sig == Signature.NotAMethod) pickleName(realName)
351351
else pickleNameAndSig(realName, sig)
352352
pickleTree(qual)
353353
case Apply(fun, args) =>

compiler/src/dotty/tools/dotc/transform/ElimErasedValueType.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ class ElimErasedValueType extends MiniPhaseTransform with InfoTransformer {
8989
if (!info1.matchesLoosely(info2))
9090
ctx.error(
9191
em"""double definition:
92-
|$sym1: $info1 in ${sym1.owner} ${sym1.flags} and
93-
|$sym2: $info2 in ${sym2.owner} ${sym2.flags}
92+
|$sym1: $info1 in ${sym1.owner} and
93+
|$sym2: $info2 in ${sym2.owner}
9494
|have same type after erasure: $info""",
9595
root.pos)
9696
}

tests/neg/i2202.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class A {
2+
def compareTo(o: Any): Int = 0
3+
}
4+
class B extends A with Comparable[B] { // error
5+
def compareTo(b: B): Int = 0
6+
}
7+
object C {
8+
def main(args: Array[String]): Unit = {
9+
println(new B().compareTo(new Object()))
10+
}
11+
}

tests/pos/poly-inheritance.scala

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// A strawman collection design study in a nutshell
2+
import reflect.ClassTag
3+
import Predef.???
4+
5+
class It[+A] extends Ops[A, It, It[A]]
6+
7+
trait Ops[+A, +CC[_], +C] extends Any {
8+
def filter(f: A => Boolean): C = ???
9+
def map[B](f: A => B): CC[B] = ???
10+
def toSeq: It[A] = ???
11+
}
12+
13+
class ArraySeq[A] extends It[A] with Ops[A, ArraySeq, ArraySeq[A]]
14+
15+
16+
class LP {
17+
implicit def arrayToSeq[A](xs: Array[A]): ArraySeq[A] = ???
18+
}
19+
object Test extends LP {
20+
21+
implicit class ArrOps[A](val xs: Array[A]) extends AnyVal with Ops[A, ArraySeq, Array[A]] {
22+
def map[B: ClassTag](f: A => B): Array[B] = ???
23+
override def toSeq: ArraySeq[A] = arrayToSeq(xs)
24+
}
25+
26+
val xs1 = Array(1, 2, 3)
27+
val xs2 = xs1.filter(_ % 2 == 0)
28+
val xs2a: Array[Int] = xs2
29+
val xs3 = xs1.map(_ + "!")
30+
val xs3a: Array[String] = xs3
31+
32+
def f[T](f: Int => T) = {
33+
val xs1 = Array(1, 2, 3)
34+
val xs2 = xs1.filter(_ % 2 == 0)
35+
val xs2a: Array[Int] = xs2
36+
val xs3 = xs1.toSeq.map(f)
37+
val xs3a: ArraySeq[T] = xs3
38+
}
39+
}
40+
41+
42+
43+
44+

0 commit comments

Comments
 (0)