Skip to content

Commit 8cb2233

Browse files
committed
Fix code to conform to new constructor proxy scheme
1 parent 1a7a058 commit 8cb2233

File tree

10 files changed

+22
-15
lines changed

10 files changed

+22
-15
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ trait BytecodeWriters {
8181
trait AsmpBytecodeWriter extends BytecodeWriter {
8282
import scala.tools.asm
8383

84-
private val baseDir = Directory(None.get).createDirectory() // FIXME missing directoy
84+
private val baseDir = new Directory(None.get).createDirectory() // FIXME missing directoy
85+
// new needed here since resolution of user-defined `apply` methods is ambiguous, and we want the constructor.
8586

8687
private def emitAsmp(jclassBytes: Array[Byte], asmpFile: dotty.tools.io.File): Unit = {
8788
val pw = asmpFile.printWriter()

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,13 +1013,15 @@ object Trees {
10131013

10141014
@sharable val EmptyTree: Thicket = genericEmptyTree
10151015
@sharable val EmptyValDef: ValDef = genericEmptyValDef
1016-
@sharable val ContextualEmptyTree: Thicket = EmptyTree() // an empty tree marking a contextual closure
1016+
@sharable val ContextualEmptyTree: Thicket = new EmptyTree() // an empty tree marking a contextual closure
10171017

10181018
// ----- Auxiliary creation methods ------------------
10191019

10201020
def Thicket(): Thicket = EmptyTree
1021-
def Thicket(x1: Tree, x2: Tree)(implicit src: SourceFile): Thicket = Thicket(x1 :: x2 :: Nil)
1022-
def Thicket(x1: Tree, x2: Tree, x3: Tree)(implicit src: SourceFile): Thicket = Thicket(x1 :: x2 :: x3 :: Nil)
1021+
def Thicket(x1: Tree, x2: Tree)(implicit src: SourceFile): Thicket = new Thicket(x1 :: x2 :: Nil)
1022+
def Thicket(x1: Tree, x2: Tree, x3: Tree)(implicit src: SourceFile): Thicket = new Thicket(x1 :: x2 :: x3 :: Nil)
1023+
def Thicket(xs: List[Tree])(implicit src: SourceFile) = new Thicket(xs)
1024+
10231025
def flatTree(xs: List[Tree])(implicit src: SourceFile): Tree = flatten(xs) match {
10241026
case x :: Nil => x
10251027
case ys => Thicket(ys)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1609,7 +1609,7 @@ object SymDenotations {
16091609

16101610
private def baseTypeCache(using Context): BaseTypeMap = {
16111611
if !currentHasSameBaseTypesAs(myBaseTypeCachePeriod) then
1612-
myBaseTypeCache = BaseTypeMap()
1612+
myBaseTypeCache = new BaseTypeMap()
16131613
myBaseTypeCachePeriod = ctx.period
16141614
myBaseTypeCache
16151615
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,8 @@ object Symbols {
496496
def currentClass(using Context): ClassSymbol = ctx.owner.enclosingClass.asClass
497497

498498
type MutableSymbolMap[T] = EqHashMap[Symbol, T]
499+
def MutableSymbolMap[T](): EqHashMap[Symbol, T] = EqHashMap[Symbol, T]()
500+
def MutableSymbolMap[T](initialCapacity: Int): EqHashMap[Symbol, T] = EqHashMap[Symbol, T](initialCapacity)
499501

500502
// ---- Factory methods for symbol creation ----------------------
501503
//

compiler/src/dotty/tools/dotc/typer/Namer.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ class Namer { typer: Typer =>
5555
val ExpandedTree : Property.Key[untpd.Tree] = new Property.Key
5656
val ExportForwarders: Property.Key[List[tpd.MemberDef]] = new Property.Key
5757
val SymOfTree : Property.Key[Symbol] = new Property.Key
58-
val Deriver : Property.Key[typer.Deriver] = new Property.Key
58+
val AttachedDeriver : Property.Key[Deriver] = new Property.Key
59+
// was `val Deriver`, but that gave shadowing problems with constructor proxies
5960

6061
/** A partial map from unexpanded member and pattern defs and to their expansions.
6162
* Populated during enterSyms, emptied during typer.
@@ -1186,7 +1187,7 @@ class Namer { typer: Typer =>
11861187
}
11871188
val deriver = new Deriver(derivingClass, derivePos)(using localCtx)
11881189
deriver.enterDerived(impl.derived)
1189-
original.putAttachment(Deriver, deriver)
1190+
original.putAttachment(AttachedDeriver, deriver)
11901191
}
11911192

11921193
denot.info = tempInfo.finalized(parentTypes)

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2190,8 +2190,8 @@ class Typer extends Namer
21902190
if (ctx.mode.is(Mode.Interactive) && ctx.settings.YretainTrees.value)
21912191
cls.rootTreeOrProvider = cdef1
21922192

2193-
for (deriver <- cdef.removeAttachment(Deriver))
2194-
cdef1.putAttachment(Deriver, deriver)
2193+
for (deriver <- cdef.removeAttachment(AttachedDeriver))
2194+
cdef1.putAttachment(AttachedDeriver, deriver)
21952195

21962196
cdef1
21972197
}
@@ -2701,7 +2701,7 @@ class Typer extends Namer
27012701
val enumContext = enumContexts(stat.symbol.linkedClass)
27022702
if enumContext != null then
27032703
checkEnumCaseRefsLegal(stat, enumContext)
2704-
stat.removeAttachment(Deriver) match {
2704+
stat.removeAttachment(AttachedDeriver) match {
27052705
case Some(deriver) => deriver.finalize(stat)
27062706
case None => stat
27072707
}

scala3doc/src/dotty/dokka/site/templates.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ case class TemplateFile(
7070
case other => other
7171

7272
// Library requires mutable maps..
73-
val mutableProperties = JHashMap(ctx.properties.transform((_, v) => asJavaElement(v)).asJava)
73+
val mutableProperties = new JHashMap(ctx.properties.transform((_, v) => asJavaElement(v)).asJava)
7474
val rendered = Template.parse(this.rawCode).render(mutableProperties)
7575
// We want to render markdown only if next template is html
7676
val code = if (isHtml || layoutTemplate.exists(!_.isHtml)) rendered else

scala3doc/src/dotty/dokka/tasty/SymOps.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ class SymOps[Q <: Quotes](val q: Q):
131131
// We want package object to point to package
132132
val className = sym.className.filter(_ != "package$")
133133

134-
DRI(
134+
new DRI(
135135
className.fold(sym.packageName)(cn => s"${sym.packageName}.${cn}"),
136136
sym.anchor.getOrElse(""), // TODO do we need any of this fields?
137137
null,

scala3doc/src/dotty/renderers/html.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ object HTML:
4646
.replace("'", "&apos;")
4747

4848
case class Attr(name: String):
49-
def :=(value: String): AppliedAttr = AppliedAttr(s"""$name="$value"""")
49+
def :=(value: String): AppliedAttr = new AppliedAttr(s"""$name="$value"""")
5050

5151
opaque type AppliedTag = StringBuilder
5252

@@ -97,5 +97,5 @@ object HTML:
9797
val testId = Attr("data-test-id")
9898
val alt = Attr("alt")
9999

100-
def raw(content: String): AppliedTag = AppliedTag(content)
100+
def raw(content: String): AppliedTag = new AppliedTag(content)
101101
def raw(content: StringBuilder): AppliedTag = content

tests/run-macros/refined-selectable-macro/Macro_2.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ object Macro2 {
2020
'{ new Record($elems:_*).asInstanceOf[R] }
2121
}
2222

23-
def fromUntypedTuple(elems: (String, Any)*): Record = Record(elems: _*)
23+
def fromUntypedTuple(elems: (String, Any)*): Record = new Record(elems: _*)
24+
// `new` is needed since resolving the two `apply`s is ambiguous; this was hidden by old scheme for creator applications
2425
}
2526
}

0 commit comments

Comments
 (0)