Skip to content

Commit e48cbe7

Browse files
Backport "Fix undercompilation upon ctor change" to LTS (#20994)
Backports #19911 to the LTS branch. PR submitted by the release tooling. [skip ci]
2 parents e449b68 + 49e7b4c commit e48cbe7

File tree

6 files changed

+22
-8
lines changed

6 files changed

+22
-8
lines changed

Diff for: compiler/src/dotty/tools/dotc/sbt/package.scala

+13-7
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,23 @@ import dotty.tools.dotc.core.Contexts.Context
44
import dotty.tools.dotc.core.Symbols.Symbol
55
import dotty.tools.dotc.core.NameOps.stripModuleClassSuffix
66
import dotty.tools.dotc.core.Names.Name
7+
import dotty.tools.dotc.core.Names.termName
78

89
inline val TermNameHash = 1987 // 300th prime
910
inline val TypeNameHash = 1993 // 301st prime
1011
inline val InlineParamHash = 1997 // 302nd prime
1112

1213
extension (sym: Symbol)
1314

14-
def constructorName(using Context) =
15-
sym.owner.fullName ++ ";init;"
16-
17-
/** Mangle a JVM symbol name in a format better suited for internal uses by sbt. */
18-
def zincMangledName(using Context): Name =
19-
if (sym.isConstructor) constructorName
20-
else sym.name.stripModuleClassSuffix
15+
/** Mangle a JVM symbol name in a format better suited for internal uses by sbt.
16+
* WARNING: output must not be written to TASTy, as it is not a valid TASTy name.
17+
*/
18+
private[sbt] def zincMangledName(using Context): Name =
19+
if sym.isConstructor then
20+
// TODO: ideally we should avoid unnecessarily caching these Zinc specific
21+
// names in the global chars array. But we would need to restructure
22+
// ExtractDependencies caches to avoid expensive `toString` on
23+
// each member reference.
24+
termName(sym.owner.fullName.mangledString.replace(".", ";").nn ++ ";init;")
25+
else
26+
sym.name.stripModuleClassSuffix

Diff for: sbt-bridge/test/xsbt/ExtractUsedNamesSpecification.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ class ExtractUsedNamesSpecification {
306306
// All classes extend Object
307307
"Object",
308308
// All classes have a default constructor called <init>
309-
"java.lang.Object;init;",
309+
"java;lang;Object;init;",
310310
// the return type of the default constructor is Unit
311311
"Unit"
312312
)

Diff for: sbt-test/source-dependencies/constructors/A.scala

+2
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
package example
2+
13
class A(a: Int)

Diff for: sbt-test/source-dependencies/constructors/B.scala

+2
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
package example
2+
13
class B { val y = new A(2) }
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
package example
2+
13
class A(a: String)
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
package example
2+
13
class B { val y = new A("a") }

0 commit comments

Comments
 (0)