File tree 10 files changed +22
-15
lines changed
tests/run-macros/refined-selectable-macro 10 files changed +22
-15
lines changed Original file line number Diff line number Diff line change @@ -81,7 +81,8 @@ trait BytecodeWriters {
81
81
trait AsmpBytecodeWriter extends BytecodeWriter {
82
82
import scala .tools .asm
83
83
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.
85
86
86
87
private def emitAsmp (jclassBytes : Array [Byte ], asmpFile : dotty.tools.io.File ): Unit = {
87
88
val pw = asmpFile.printWriter()
Original file line number Diff line number Diff line change @@ -1013,13 +1013,15 @@ object Trees {
1013
1013
1014
1014
@ sharable val EmptyTree : Thicket = genericEmptyTree
1015
1015
@ 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
1017
1017
1018
1018
// ----- Auxiliary creation methods ------------------
1019
1019
1020
1020
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
+
1023
1025
def flatTree (xs : List [Tree ])(implicit src : SourceFile ): Tree = flatten(xs) match {
1024
1026
case x :: Nil => x
1025
1027
case ys => Thicket (ys)
Original file line number Diff line number Diff line change @@ -1609,7 +1609,7 @@ object SymDenotations {
1609
1609
1610
1610
private def baseTypeCache (using Context ): BaseTypeMap = {
1611
1611
if ! currentHasSameBaseTypesAs(myBaseTypeCachePeriod) then
1612
- myBaseTypeCache = BaseTypeMap ()
1612
+ myBaseTypeCache = new BaseTypeMap ()
1613
1613
myBaseTypeCachePeriod = ctx.period
1614
1614
myBaseTypeCache
1615
1615
}
Original file line number Diff line number Diff line change @@ -496,6 +496,8 @@ object Symbols {
496
496
def currentClass (using Context ): ClassSymbol = ctx.owner.enclosingClass.asClass
497
497
498
498
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)
499
501
500
502
// ---- Factory methods for symbol creation ----------------------
501
503
//
Original file line number Diff line number Diff line change @@ -55,7 +55,8 @@ class Namer { typer: Typer =>
55
55
val ExpandedTree : Property .Key [untpd.Tree ] = new Property .Key
56
56
val ExportForwarders : Property .Key [List [tpd.MemberDef ]] = new Property .Key
57
57
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
59
60
60
61
/** A partial map from unexpanded member and pattern defs and to their expansions.
61
62
* Populated during enterSyms, emptied during typer.
@@ -1186,7 +1187,7 @@ class Namer { typer: Typer =>
1186
1187
}
1187
1188
val deriver = new Deriver (derivingClass, derivePos)(using localCtx)
1188
1189
deriver.enterDerived(impl.derived)
1189
- original.putAttachment(Deriver , deriver)
1190
+ original.putAttachment(AttachedDeriver , deriver)
1190
1191
}
1191
1192
1192
1193
denot.info = tempInfo.finalized(parentTypes)
Original file line number Diff line number Diff line change @@ -2190,8 +2190,8 @@ class Typer extends Namer
2190
2190
if (ctx.mode.is(Mode .Interactive ) && ctx.settings.YretainTrees .value)
2191
2191
cls.rootTreeOrProvider = cdef1
2192
2192
2193
- for (deriver <- cdef.removeAttachment(Deriver ))
2194
- cdef1.putAttachment(Deriver , deriver)
2193
+ for (deriver <- cdef.removeAttachment(AttachedDeriver ))
2194
+ cdef1.putAttachment(AttachedDeriver , deriver)
2195
2195
2196
2196
cdef1
2197
2197
}
@@ -2701,7 +2701,7 @@ class Typer extends Namer
2701
2701
val enumContext = enumContexts(stat.symbol.linkedClass)
2702
2702
if enumContext != null then
2703
2703
checkEnumCaseRefsLegal(stat, enumContext)
2704
- stat.removeAttachment(Deriver ) match {
2704
+ stat.removeAttachment(AttachedDeriver ) match {
2705
2705
case Some (deriver) => deriver.finalize(stat)
2706
2706
case None => stat
2707
2707
}
Original file line number Diff line number Diff line change @@ -70,7 +70,7 @@ case class TemplateFile(
70
70
case other => other
71
71
72
72
// 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)
74
74
val rendered = Template .parse(this .rawCode).render(mutableProperties)
75
75
// We want to render markdown only if next template is html
76
76
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):
131
131
// We want package object to point to package
132
132
val className = sym.className.filter(_ != " package$" )
133
133
134
- DRI (
134
+ new DRI (
135
135
className.fold(sym.packageName)(cn => s " ${sym.packageName}. ${cn}" ),
136
136
sym.anchor.getOrElse(" " ), // TODO do we need any of this fields?
137
137
null ,
Original file line number Diff line number Diff line change @@ -46,7 +46,7 @@ object HTML:
46
46
.replace(" '" , " '" )
47
47
48
48
case class Attr (name : String ):
49
- def := (value : String ): AppliedAttr = AppliedAttr (s """ $name=" $value" """ )
49
+ def := (value : String ): AppliedAttr = new AppliedAttr (s """ $name=" $value" """ )
50
50
51
51
opaque type AppliedTag = StringBuilder
52
52
@@ -97,5 +97,5 @@ object HTML:
97
97
val testId = Attr (" data-test-id" )
98
98
val alt = Attr (" alt" )
99
99
100
- def raw (content : String ): AppliedTag = AppliedTag (content)
100
+ def raw (content : String ): AppliedTag = new AppliedTag (content)
101
101
def raw (content : StringBuilder ): AppliedTag = content
Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ object Macro2 {
20
20
' { new Record ($elems:_* ).asInstanceOf [R ] }
21
21
}
22
22
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
24
25
}
25
26
}
You can’t perform that action at this time.
0 commit comments