File tree Expand file tree Collapse file tree 10 files changed +22
-15
lines changed
tests/run-macros/refined-selectable-macro Expand file tree Collapse file tree 10 files changed +22
-15
lines changed Original file line number Diff line number Diff 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()
Original file line number Diff line number Diff 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)
Original file line number Diff line number Diff 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 }
Original file line number Diff line number Diff 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//
Original file line number Diff line number Diff 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)
Original file line number Diff line number Diff 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 }
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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 ,
Original file line number Diff line number Diff line change @@ -46,7 +46,7 @@ object HTML:
4646 .replace(" '" , " '" )
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
Original file line number Diff line number Diff 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}
You can’t perform that action at this time.
0 commit comments