Skip to content

Commit fe235e9

Browse files
committed
Avoid shoing trace in debugging logs
1 parent 3dd4c6d commit fe235e9

File tree

2 files changed

+25
-23
lines changed

2 files changed

+25
-23
lines changed

compiler/src/dotty/tools/dotc/transform/init/Errors.scala

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,35 +79,35 @@ object Errors:
7979
override def toString() = this.getClass.getName.nn
8080

8181
/** Access non-initialized field */
82-
case class AccessNonInit(field: Symbol, trace: Seq[Tree]) extends Error:
82+
case class AccessNonInit(field: Symbol)(val trace: Seq[Tree]) extends Error:
8383
def source: Tree = trace.last
8484
def show(using Context): String =
8585
"Access non-initialized " + field.show + "." + stacktrace
8686

8787
override def pos(using Context): SourcePosition = field.sourcePos
8888

8989
/** Promote a value under initialization to fully-initialized */
90-
case class PromoteError(msg: String, trace: Seq[Tree]) extends Error:
90+
case class PromoteError(msg: String)(val trace: Seq[Tree]) extends Error:
9191
def show(using Context): String = msg + stacktrace
9292

93-
case class AccessCold(field: Symbol, trace: Seq[Tree]) extends Error:
93+
case class AccessCold(field: Symbol)(val trace: Seq[Tree]) extends Error:
9494
def show(using Context): String =
9595
"Access field " + field.show + " on a cold object." + stacktrace
9696

97-
case class CallCold(meth: Symbol, trace: Seq[Tree]) extends Error:
97+
case class CallCold(meth: Symbol)(val trace: Seq[Tree]) extends Error:
9898
def show(using Context): String =
9999
"Call method " + meth.show + " on a cold object." + stacktrace
100100

101-
case class CallUnknown(meth: Symbol, trace: Seq[Tree]) extends Error:
101+
case class CallUnknown(meth: Symbol)(val trace: Seq[Tree]) extends Error:
102102
def show(using Context): String =
103103
val prefix = if meth.is(Flags.Method) then "Calling the external method " else "Accessing the external field"
104104
prefix + meth.show + " may cause initialization errors." + stacktrace
105105

106106
/** Promote a value under initialization to fully-initialized */
107-
case class UnsafePromotion(msg: String, trace: Seq[Tree], error: Error) extends Error:
107+
case class UnsafePromotion(msg: String, error: Error)(val trace: Seq[Tree]) extends Error:
108108
def show(using Context): String =
109109
msg + stacktrace + "\n" +
110-
"Promoting the value to hot failed due to the following problem:\n" + {
110+
"Promoting the value to hot (transitively initialized) failed due to the following problem:\n" + {
111111
val ctx2 = ctx.withProperty(IsFromPromotion, Some(true))
112112
error.show(using ctx2)
113113
}
@@ -116,7 +116,7 @@ object Errors:
116116
*
117117
* Invariant: argsIndices.nonEmpty
118118
*/
119-
case class UnsafeLeaking(trace: Seq[Tree], error: Error, nonHotOuterClass: Symbol, argsIndices: List[Int]) extends Error:
119+
case class UnsafeLeaking(error: Error, nonHotOuterClass: Symbol, argsIndices: List[Int])(val trace: Seq[Tree]) extends Error:
120120
def show(using Context): String =
121121
"Problematic object instantiation: " + argumentInfo() + stacktrace + "\n" +
122122
"It leads to the following error during object initialization:\n" +
@@ -141,5 +141,5 @@ object Errors:
141141
acc + text2
142142
}
143143
val verb = if multiple then " are " else " is "
144-
val adjective = "not hot."
144+
val adjective = "not hot (transitively initialized)."
145145
subject + verb + adjective

compiler/src/dotty/tools/dotc/transform/init/Semantic.scala

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import NameKinds.SuperAccessorName
1212

1313
import ast.tpd.*
1414
import config.Printers.init as printer
15-
import reporting.trace as log
15+
import reporting.trace.force as log
1616

1717
import Errors.*
1818

@@ -664,7 +664,7 @@ object Semantic:
664664
Hot
665665

666666
case Cold =>
667-
val error = AccessCold(field, trace.toVector)
667+
val error = AccessCold(field)(trace.toVector)
668668
reporter.report(error)
669669
Hot
670670

@@ -689,11 +689,11 @@ object Semantic:
689689
val rhs = target.defTree.asInstanceOf[ValOrDefDef].rhs
690690
eval(rhs, ref, target.owner.asClass, cacheResult = true)
691691
else
692-
val error = CallUnknown(field, trace.toVector)
692+
val error = CallUnknown(field)(trace.toVector)
693693
reporter.report(error)
694694
Hot
695695
else
696-
val error = AccessNonInit(target, trace.toVector)
696+
val error = AccessNonInit(target)(trace.toVector)
697697
reporter.report(error)
698698
Hot
699699
else
@@ -779,7 +779,7 @@ object Semantic:
779779

780780
case Cold =>
781781
promoteArgs()
782-
val error = CallCold(meth, trace.toVector)
782+
val error = CallCold(meth)(trace.toVector)
783783
reporter.report(error)
784784
Hot
785785

@@ -820,7 +820,7 @@ object Semantic:
820820
// try promoting the receiver as last resort
821821
val hasErrors = Reporter.hasErrors { ref.promote("try promote value to hot") }
822822
if hasErrors then
823-
val error = CallUnknown(target, trace.toVector)
823+
val error = CallUnknown(target)(trace.toVector)
824824
reporter.report(error)
825825
Hot
826826
else if target.exists then
@@ -899,7 +899,7 @@ object Semantic:
899899
Hot
900900
else
901901
// no source code available
902-
val error = CallUnknown(ctor, trace.toVector)
902+
val error = CallUnknown(ctor)(trace.toVector)
903903
reporter.report(error)
904904
Hot
905905
}
@@ -922,7 +922,7 @@ object Semantic:
922922
yield
923923
i + 1
924924

925-
val error = UnsafeLeaking(trace.toVector, errors.head, nonHotOuterClass, indices)
925+
val error = UnsafeLeaking(errors.head, nonHotOuterClass, indices)(trace.toVector)
926926
reporter.report(error)
927927
Hot
928928
else
@@ -947,7 +947,7 @@ object Semantic:
947947
tryLeak(warm, NoSymbol, args2)
948948

949949
case Cold =>
950-
val error = CallCold(ctor, trace.toVector)
950+
val error = CallCold(ctor)(trace.toVector)
951951
reporter.report(error)
952952
Hot
953953

@@ -1078,15 +1078,15 @@ object Semantic:
10781078
case Hot =>
10791079

10801080
case Cold =>
1081-
reporter.report(PromoteError(msg, trace.toVector))
1081+
reporter.report(PromoteError(msg)(trace.toVector))
10821082

10831083
case thisRef: ThisRef =>
10841084
val emptyFields = thisRef.nonInitFields()
10851085
if emptyFields.isEmpty then
10861086
promoted.promoteCurrent(thisRef)
10871087
else
10881088
val fields = "Non initialized field(s): " + emptyFields.map(_.show).mkString(", ") + "."
1089-
reporter.report(PromoteError(msg + "\n" + fields, trace.toVector))
1089+
reporter.report(PromoteError(msg + "\n" + fields)(trace.toVector))
10901090

10911091
case warm: Warm =>
10921092
if !promoted.contains(warm) then
@@ -1106,7 +1106,7 @@ object Semantic:
11061106
res.promote("The function return value is not hot. Found = " + res.show + ".")
11071107
}
11081108
if errors.nonEmpty then
1109-
reporter.report(UnsafePromotion(msg, trace.toVector, errors.head))
1109+
reporter.report(UnsafePromotion(msg, errors.head)(trace.toVector))
11101110
else
11111111
promoted.add(fun)
11121112

@@ -1156,7 +1156,7 @@ object Semantic:
11561156
if !isHotSegment then
11571157
for member <- klass.info.decls do
11581158
if member.isClass then
1159-
val error = PromoteError("Promotion cancelled as the value contains inner " + member.show + ".", Vector.empty)
1159+
val error = PromoteError("Promotion cancelled as the value contains inner " + member.show + ".")(Vector.empty)
11601160
reporter.report(error)
11611161
else if !member.isType && !member.isConstructor && !member.is(Flags.Deferred) then
11621162
given Trace = Trace.empty
@@ -1189,7 +1189,7 @@ object Semantic:
11891189
}
11901190

11911191
if errors.isEmpty then Nil
1192-
else UnsafePromotion(msg, trace.toVector, errors.head) :: Nil
1192+
else UnsafePromotion(msg, errors.head)(trace.toVector) :: Nil
11931193
}
11941194

11951195
end extension
@@ -1516,6 +1516,8 @@ object Semantic:
15161516
val cls = tmref.widenSingleton.classSymbol.asClass
15171517
if cls.isStaticOwner && !cls.isContainedIn(promoted.entryClass) then
15181518
Hot
1519+
else if cls.isStaticOwner && klass.isContainedIn(cls) then
1520+
resolveThis(cls, thisV, klass)
15191521
else
15201522
cases(tmref.prefix, thisV, klass).select(tmref.symbol, receiver = tmref.prefix)
15211523

0 commit comments

Comments
 (0)