File tree 2 files changed +7
-1
lines changed
compiler/src/dotty/tools/dotc 2 files changed +7
-1
lines changed Original file line number Diff line number Diff line change @@ -17,12 +17,14 @@ class TreeCleaner extends tpd.TreeMap {
17
17
/** List of symbols and their types for type aliases `type T = U` */
18
18
private [this ] var aliasesSyms : List [Symbol ] = Nil
19
19
private [this ] var aliasesTypes : List [Type ] = Nil
20
+ private [this ] val aliases = newMutableSymbolMap[Tree ]
20
21
21
22
override def transform (tree : Tree )(implicit ctx : Context ): Tree = {
22
23
val tree0 = tree match {
23
24
case TypeDef (_, TypeBoundsTree (lo, hi)) if lo == hi =>
24
25
aliasesSyms = tree.symbol :: aliasesSyms
25
26
aliasesTypes = lo.tpe :: aliasesTypes
27
+ aliases(tree.symbol) = ref(lo.tpe.typeSymbol)
26
28
Literal (Constant (()))
27
29
case _ => tree
28
30
}
@@ -40,6 +42,7 @@ class TreeCleaner extends tpd.TreeMap {
40
42
case expr3 => Block (flatStats, expr3)
41
43
}
42
44
case tree1 : TypeTree => TypeTree (tree1.tpe.subst(aliasesSyms, aliasesTypes))
45
+ case tree1 : Ident => aliases.get(tree1.symbol).getOrElse(tree1)
43
46
case tree1 => tree1
44
47
}
45
48
}
Original file line number Diff line number Diff line change @@ -210,7 +210,10 @@ class ReifyQuotes extends MacroTransformWithImplicits with InfoTransformer {
210
210
explicitTags.clear()
211
211
212
212
// Maps type splices to type references of tags e.g., ~t -> some type T$1
213
- val map : Map [Type , Type ] = tagsExplicitTypeDefsPairs.map(x => (x._1, x._2.symbol.typeRef)).toMap
213
+ val map : Map [Type , Type ] = {
214
+ tagsExplicitTypeDefsPairs.map(x => (x._1, x._2.symbol.typeRef)) ++
215
+ (itags.map(_._1) zip typeDefs.map(_.symbol.typeRef))
216
+ }.toMap
214
217
val tMap = new TypeMap () {
215
218
override def apply (tp : Type ): Type = map.getOrElse(tp, mapOver(tp))
216
219
}
You can’t perform that action at this time.
0 commit comments