Skip to content

Commit 7204fd7

Browse files
authored
Merge branch 'main' into cc-drop-outdated
2 parents 468955b + 10a2b83 commit 7204fd7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1175
-276
lines changed

.github/workflows/lts-backport.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: Add to backporting project
2+
3+
on:
4+
pull_request:
5+
types:
6+
- closed
7+
8+
jobs:
9+
add-to-backporting-project:
10+
if: "github.event.pull_request.merged == true
11+
&& github.event.pull_request.base.ref == 'main'
12+
&& !contains(github.event.pull_request.body, '[Next only]')"
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- uses: actions/checkout@v3
17+
with:
18+
fetch-depth: 0
19+
- uses: coursier/cache-action@v6
20+
- uses: VirtusLab/[email protected]
21+
- run: scala-cli ./project/scripts/addToBackportingProject.scala -- ${{ github.event.pull_request.number }}
22+
env:
23+
GRAPHQL_API_TOKEN: ${{ secrets.GRAPHQL_API_TOKEN }}
24+

compiler/src/dotty/tools/backend/jvm/BCodeBodyBuilder.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1684,7 +1684,7 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
16841684
val equalsMethod: Symbol = {
16851685
if (l.tpe <:< defn.BoxedNumberClass.info) {
16861686
if (r.tpe <:< defn.BoxedNumberClass.info) defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumNum)
1687-
else if (r.tpe <:< defn.BoxedCharClass.info) NoSymbol // ctx.requiredMethod(BoxesRunTimeTypeRef, nme.equalsNumChar) // this method is private
1687+
else if (r.tpe <:< defn.BoxedCharClass.info) defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumChar)
16881688
else defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumObject)
16891689
} else defn.BoxesRunTimeModule_externalEquals
16901690
}

compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2845,7 +2845,7 @@ class JSCodeGen()(using genCtx: Context) {
28452845
private lazy val externalEqualsNumNum: Symbol =
28462846
defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumNum)
28472847
private lazy val externalEqualsNumChar: Symbol =
2848-
NoSymbol // requiredMethod(BoxesRunTimeTypeRef, nme.equalsNumChar) // this method is private
2848+
defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumChar)
28492849
private lazy val externalEqualsNumObject: Symbol =
28502850
defn.BoxesRunTimeModule.requiredMethod(nme.equalsNumObject)
28512851
private lazy val externalEquals: Symbol =
@@ -2885,7 +2885,7 @@ class JSCodeGen()(using genCtx: Context) {
28852885
val ptfm = ctx.platform
28862886
if (lsym.derivesFrom(defn.BoxedNumberClass)) {
28872887
if (rsym.derivesFrom(defn.BoxedNumberClass)) externalEqualsNumNum
2888-
else if (rsym.derivesFrom(defn.BoxedCharClass)) externalEqualsNumObject // will be externalEqualsNumChar in 2.12, SI-9030
2888+
else if (rsym.derivesFrom(defn.BoxedCharClass)) externalEqualsNumChar
28892889
else externalEqualsNumObject
28902890
} else externalEquals
28912891
}

compiler/src/dotty/tools/dotc/ast/TreeInfo.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,8 @@ trait TypedTreeInfo extends TreeInfo[Type] { self: Trees.Instance[Type] =>
992992
def hasRefinement(qualtpe: Type): Boolean = qualtpe.dealias match
993993
case defn.PolyFunctionOf(_) =>
994994
false
995+
case tp: MatchType =>
996+
hasRefinement(tp.tryNormalize)
995997
case RefinedType(parent, rname, rinfo) =>
996998
rname == tree.name || hasRefinement(parent)
997999
case tp: TypeProxy =>

compiler/src/dotty/tools/dotc/ast/tpd.scala

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,19 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
4545
def Apply(fn: Tree, args: List[Tree])(using Context): Apply = fn match
4646
case Block(Nil, expr) =>
4747
Apply(expr, args)
48+
case _: RefTree | _: GenericApply | _: Inlined | _: Hole =>
49+
ta.assignType(untpd.Apply(fn, args), fn, args)
4850
case _ =>
49-
assert(
50-
fn.isInstanceOf[RefTree | GenericApply | Inlined | Hole] || ctx.reporter.errorsReported,
51-
s"Illegal Apply function prefix: $fn"
52-
)
51+
assert(ctx.reporter.errorsReported)
5352
ta.assignType(untpd.Apply(fn, args), fn, args)
5453

5554
def TypeApply(fn: Tree, args: List[Tree])(using Context): TypeApply = fn match
5655
case Block(Nil, expr) =>
5756
TypeApply(expr, args)
57+
case _: RefTree | _: GenericApply =>
58+
ta.assignType(untpd.TypeApply(fn, args), fn, args)
5859
case _ =>
59-
assert(
60-
fn.isInstanceOf[RefTree | GenericApply] || ctx.reporter.errorsReported,
61-
s"Illegal TypeApply function prefix: $fn"
62-
)
60+
assert(ctx.reporter.errorsReported, s"unexpected tree for type application: $fn")
6361
ta.assignType(untpd.TypeApply(fn, args), fn, args)
6462

6563
def Literal(const: Constant)(using Context): Literal =

compiler/src/dotty/tools/dotc/cc/CheckCaptures.scala

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -826,12 +826,16 @@ class CheckCaptures extends Recheck, SymTransformer:
826826
*/
827827
def adaptUniversal(actual: Type, expected: Type, tree: Tree)(using Context): Type =
828828
if expected.captureSet.disallowsUniversal && actual.captureSet.isUniversal then
829-
val localRoot = impliedRoot(tree)
830-
CapturingType(
831-
actual.stripCapturing,
832-
localRoot.termRef.singletonCaptureSet,
833-
actual.isBoxedCapturing)
834-
.showing(i"adapt universal $actual vs $expected = $result", capt)
829+
if actual.isInstanceOf[SingletonType] then
830+
// capture set is only exposed when widening
831+
adaptUniversal(actual.widen, expected, tree)
832+
else
833+
val localRoot = impliedRoot(tree)
834+
CapturingType(
835+
actual.stripCapturing,
836+
localRoot.termRef.singletonCaptureSet,
837+
actual.isBoxedCapturing)
838+
.showing(i"adapt universal $actual vs $expected = $result", capt)
835839
else actual
836840

837841
private inline val debugSuccesses = false

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

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
253253
//}
254254
assert(!ctx.settings.YnoDeepSubtypes.value)
255255
if (Config.traceDeepSubTypeRecursions && !this.isInstanceOf[ExplainingTypeComparer])
256-
report.log(explained(_.isSubType(tp1, tp2, approx)))
256+
report.log(explained(_.isSubType(tp1, tp2, approx), short = false))
257257
}
258258
// Eliminate LazyRefs before checking whether we have seen a type before
259259
val normalize = new TypeMap with CaptureSet.IdempotentCaptRefMap {
@@ -2959,7 +2959,7 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
29592959
}
29602960
}
29612961

2962-
protected def explainingTypeComparer = ExplainingTypeComparer(comparerContext)
2962+
protected def explainingTypeComparer(short: Boolean) = ExplainingTypeComparer(comparerContext, short)
29632963
protected def trackingTypeComparer = TrackingTypeComparer(comparerContext)
29642964

29652965
private def inSubComparer[T, Cmp <: TypeComparer](comparer: Cmp)(op: Cmp => T): T =
@@ -2969,8 +2969,8 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
29692969
finally myInstance = saved
29702970

29712971
/** The trace of comparison operations when performing `op` */
2972-
def explained[T](op: ExplainingTypeComparer => T, header: String = "Subtype trace:")(using Context): String =
2973-
val cmp = explainingTypeComparer
2972+
def explained[T](op: ExplainingTypeComparer => T, header: String = "Subtype trace:", short: Boolean)(using Context): String =
2973+
val cmp = explainingTypeComparer(short)
29742974
inSubComparer(cmp)(op)
29752975
cmp.lastTrace(header)
29762976

@@ -3139,8 +3139,8 @@ object TypeComparer {
31393139
def constrainPatternType(pat: Type, scrut: Type, forceInvariantRefinement: Boolean = false)(using Context): Boolean =
31403140
comparing(_.constrainPatternType(pat, scrut, forceInvariantRefinement))
31413141

3142-
def explained[T](op: ExplainingTypeComparer => T, header: String = "Subtype trace:")(using Context): String =
3143-
comparing(_.explained(op, header))
3142+
def explained[T](op: ExplainingTypeComparer => T, header: String = "Subtype trace:", short: Boolean = false)(using Context): String =
3143+
comparing(_.explained(op, header, short))
31443144

31453145
def tracked[T](op: TrackingTypeComparer => T)(using Context): T =
31463146
comparing(_.tracked(op))
@@ -3337,30 +3337,47 @@ class TrackingTypeComparer(initctx: Context) extends TypeComparer(initctx) {
33373337
}
33383338
}
33393339

3340-
/** A type comparer that can record traces of subtype operations */
3341-
class ExplainingTypeComparer(initctx: Context) extends TypeComparer(initctx) {
3340+
/** A type comparer that can record traces of subtype operations
3341+
* @param short if true print only failing forward traces; never print succesful
3342+
* subtraces; never print backtraces starting with `<==`.
3343+
*/
3344+
class ExplainingTypeComparer(initctx: Context, short: Boolean) extends TypeComparer(initctx) {
33423345
import TypeComparer._
33433346

33443347
init(initctx)
33453348

3346-
override def explainingTypeComparer = this
3349+
override def explainingTypeComparer(short: Boolean) =
3350+
if short == this.short then this
3351+
else ExplainingTypeComparer(comparerContext, short)
33473352

33483353
private var indent = 0
33493354
private val b = new StringBuilder
3350-
3351-
private var skipped = false
3355+
private var lastForwardGoal: String | Null = null
33523356

33533357
override def traceIndented[T](str: String)(op: => T): T =
3354-
if (skipped) op
3355-
else {
3358+
val str1 = str.replace('\n', ' ')
3359+
if short && str1 == lastForwardGoal then
3360+
op // repeated goal, skip for clarity
3361+
else
3362+
lastForwardGoal = str1
3363+
val curLength = b.length
33563364
indent += 2
3357-
val str1 = str.replace('\n', ' ')
33583365
b.append("\n").append(" " * indent).append("==> ").append(str1)
33593366
val res = op
3360-
b.append("\n").append(" " * indent).append("<== ").append(str1).append(" = ").append(show(res))
3367+
if short then
3368+
if res == false then
3369+
if lastForwardGoal != null then // last was deepest goal that failed
3370+
b.append(" = false")
3371+
lastForwardGoal = null
3372+
else
3373+
b.length = curLength // don't show successful subtraces
3374+
else
3375+
b.append("\n").append(" " * indent).append("<== ").append(str1).append(" = ").append(show(res))
33613376
indent -= 2
33623377
res
3363-
}
3378+
3379+
private def traceIndentedIfNotShort[T](str: String)(op: => T): T =
3380+
if short then op else traceIndented(str)(op)
33643381

33653382
private def frozenNotice: String =
33663383
if frozenConstraint then " in frozen constraint" else ""
@@ -3371,7 +3388,8 @@ class ExplainingTypeComparer(initctx: Context) extends TypeComparer(initctx) {
33713388
then s" ${tp1.getClass} ${tp2.getClass}"
33723389
else ""
33733390
val approx = approxState
3374-
traceIndented(s"${show(tp1)} <: ${show(tp2)}$moreInfo${approx.show}$frozenNotice") {
3391+
def approxStr = if short then "" else approx.show
3392+
traceIndented(s"${show(tp1)} <: ${show(tp2)}$moreInfo${approxStr}$frozenNotice") {
33753393
super.recur(tp1, tp2)
33763394
}
33773395

@@ -3381,12 +3399,12 @@ class ExplainingTypeComparer(initctx: Context) extends TypeComparer(initctx) {
33813399
}
33823400

33833401
override def lub(tp1: Type, tp2: Type, canConstrain: Boolean, isSoft: Boolean): Type =
3384-
traceIndented(s"lub(${show(tp1)}, ${show(tp2)}, canConstrain=$canConstrain, isSoft=$isSoft)") {
3402+
traceIndentedIfNotShort(s"lub(${show(tp1)}, ${show(tp2)}, canConstrain=$canConstrain, isSoft=$isSoft)") {
33853403
super.lub(tp1, tp2, canConstrain, isSoft)
33863404
}
33873405

33883406
override def glb(tp1: Type, tp2: Type): Type =
3389-
traceIndented(s"glb(${show(tp1)}, ${show(tp2)})") {
3407+
traceIndentedIfNotShort(s"glb(${show(tp1)}, ${show(tp2)})") {
33903408
super.glb(tp1, tp2)
33913409
}
33923410

0 commit comments

Comments
 (0)