Skip to content

Commit

Permalink
Partial revert of previous commit.
Browse files Browse the repository at this point in the history
Instead of avoiding fully qualified names,
use a different separator in zincMangledName.
  • Loading branch information
bishabosha committed Mar 13, 2024
1 parent 157ed43 commit e12bc65
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 7 deletions.
3 changes: 3 additions & 0 deletions compiler/src/dotty/tools/dotc/core/NameTags.scala
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ object NameTags extends TastyFormat.NameTags {
inline val EXPLICITFIELD = 38 // An explicitly named field, introduce to avoid a clash
// with a regular field of the underlying name

inline val ZINCMANGLED = 39 // a reserved tag for use in Zinc name mangling (replace `.` by `::`)

def nameTagToString(tag: Int): String = tag match {
case UTF8 => "UTF8"
case QUALIFIED => "QUALIFIED"
Expand All @@ -61,6 +63,7 @@ object NameTags extends TastyFormat.NameTags {
case PARAMACC => "PARAMACC"
case ADAPTEDCLOSURE => "ADAPTEDCLOSURE"
case OBJECTCLASS => "OBJECTCLASS"
case ZINCMANGLED => "ZINCMANGLED"

case SIGNED => "SIGNED"
case TARGETSIGNED => "TARGETSIGNED"
Expand Down
3 changes: 3 additions & 0 deletions compiler/src/dotty/tools/dotc/sbt/ExtractAPI.scala
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ class ExtractAPI extends Phase {
val pw = new PrintWriter(File(sourceFile.file.jpath).changeExtension("inc").toFile
.bufferedWriter(append = true), true)
try {
pw.println()
pw.println("API:")
pw.println("====")
classes.foreach(source => pw.println(DefaultShowAPI(source)))
} finally pw.close()
}
Expand Down
18 changes: 12 additions & 6 deletions compiler/src/dotty/tools/dotc/sbt/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,23 @@ import dotty.tools.dotc.core.Contexts.Context
import dotty.tools.dotc.core.Symbols.Symbol
import dotty.tools.dotc.core.NameOps.stripModuleClassSuffix
import dotty.tools.dotc.core.Names.Name
import dotty.tools.dotc.core.NameKinds.QualifiedNameKind
import dotty.tools.dotc.core.NameTags.ZINCMANGLED

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

extension (sym: Symbol)
private inline val ZINC_MANGLED_SEPARATOR = "::"

/** Expanded names of the form `prefix :: name`. These only occur in zinc phases, and should not be written to TASTy */
private[sbt] val ZincMangledName: QualifiedNameKind = new QualifiedNameKind(ZINCMANGLED, ZINC_MANGLED_SEPARATOR)

def constructorName(using Context) =
sym.owner.name ++ ";init;"
extension (sym: Symbol)

/** Mangle a JVM symbol name in a format better suited for internal uses by sbt. */
def zincMangledName(using Context): Name =
if (sym.isConstructor) constructorName
/** Mangle a JVM symbol name in a format better suited for internal uses by sbt.
* WARNING: output must not be written to TASTy, as it is not a valid TASTy name.
*/
private[sbt] def zincMangledName(using Context): Name =
if (sym.isConstructor) sym.owner.fullNameSeparated(ZincMangledName) ++ ";init;"
else sym.name.stripModuleClassSuffix
2 changes: 1 addition & 1 deletion sbt-bridge/test/xsbt/ExtractUsedNamesSpecification.scala
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ class ExtractUsedNamesSpecification {
// All classes extend Object
"Object",
// All classes have a default constructor called <init>
"Object;init;",
"java::lang::Object;init;",
// the return type of the default constructor is Unit
"Unit"
)
Expand Down

0 comments on commit e12bc65

Please sign in to comment.