Skip to content

Commit e28e5d1

Browse files
committed
WiP
1 parent 6fbdf3a commit e28e5d1

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

compiler/src/dotty/tools/dotc/quoted/PickledQuotes.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,14 @@ object PickledQuotes {
131131
case tdef: TypeDef =>
132132
assert(tdef.symbol.hasAnnotation(defn.QuotedRuntime_SplicedTypeAnnot))
133133
val tree = tdef.rhs match
134-
case TypeBoundsTree(_, Hole(_, idx, args, _, _), _) =>
134+
case TypeBoundsTree(_, Hole(_, idx, args, _, _), _) => // keep for backwards compat
135135
val quotedType = typeHole(idx, args)
136136
PickledQuotes.quotedTypeToTree(quotedType)
137-
case TypeBoundsTree(_, tpt, _) =>
137+
case TypeBoundsTree(_, tpt, _) => // keep for backwards compat
138138
tpt
139+
case Hole(_, idx, args, _, _) =>
140+
val quotedType = typeHole(idx, args)
141+
PickledQuotes.quotedTypeToTree(quotedType)
139142
(tdef.symbol, tree.tpe)
140143
}.toMap
141144
class ReplaceSplicedTyped extends TypeMap() {

compiler/src/dotty/tools/dotc/transform/PickleQuotes.scala

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,15 +157,14 @@ class PickleQuotes extends MacroTransform {
157157
val holeType = getTermHoleType(tree.tpe)
158158
val hole = Hole(true, idx, args, EmptyTree, TypeTree(holeType)).withSpan(content.span).withType(holeType).asInstanceOf[Hole]
159159
Inlined(EmptyTree, Nil, hole).withSpan(tree.span)
160-
161-
case Select(tp, _) if tree.symbol == defn.QuotedType_splice =>
162-
// TODO move to Splicing phase
160+
case Hole(false, _, args, content, _) =>
163161
def makeTypeHole =
164-
splices += ref(tp.symbol)
162+
splices += content
165163
idx += 1
166164
val holeType = getTypeHoleType(tree.tpe)
167165
Hole(false, idx, Nil, EmptyTree, TypeTree(holeType)).withType(holeType).asInstanceOf[Hole]
168-
typeHoles.getOrElseUpdate(tp.symbol, makeTypeHole)
166+
typeHoles.getOrElseUpdate(content.symbol, makeTypeHole)
167+
169168
case tree: DefTree =>
170169
val newAnnotations = tree.symbol.annotations.mapconserve { annot =>
171170
annot.derivedAnnotation(transform(annot.tree)(using ctx.withOwner(tree.symbol)))

compiler/src/dotty/tools/dotc/transform/Splicing.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ class Splicing extends MacroTransform {
9494
if fn.symbol == defn.QuotedRuntime_exprQuote =>
9595
val quoteTransformer = new QuoteTransformer
9696
quoteTransformer.transform(tree)
97+
case TypeApply(_, _) if tree.symbol == defn.QuotedTypeModule_of =>
98+
val quoteTransformer = new QuoteTransformer
99+
quoteTransformer.transform(tree)
97100
case _ =>
98101
super.transform(tree)
99102
end MyTransformer
@@ -108,6 +111,11 @@ class Splicing extends MacroTransform {
108111
val newSplicedCode1 = spliceTransformer.transformSplice(splicedCode, tree.tpe)
109112
val newSplicedCode2 = MyTransformer.transform(newSplicedCode1)
110113
newSplicedCode2
114+
case tree: TypeDef if tree.symbol.hasAnnotation(defn.QuotedRuntime_SplicedTypeAnnot) =>
115+
val tp @ TypeRef(qual: TermRef, _) = tree.rhs.tpe.hiBound
116+
quotedDefs += tree.symbol
117+
holeIdx += 1
118+
cpy.TypeDef(tree)(rhs = Hole(false, holeIdx, Nil, ref(qual), TypeTree(tp)).withType(tp))
111119
case tree: DefTree =>
112120
quotedDefs += tree.symbol
113121
transformAnnotations(tree)

0 commit comments

Comments
 (0)