Skip to content

Commit 1870b14

Browse files
authored
Merge pull request #6861 from dotty-staging/refactor-dotc2
More dotc refactorings
2 parents 7c94e5c + 740e11b commit 1870b14

38 files changed

+104
-315
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
518518
* @see https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3.4
519519
*/
520520
def getGenericSignature(sym: Symbol, owner: Symbol): String = {
521-
ctx.atPhase(ctx.erasurePhase) { implicit ctx =>
521+
ctx.atPhase(ctx.erasurePhase) {
522522
val memberTpe =
523523
if (sym.is(Flags.Method)) sym.denot.info
524524
else owner.denot.thisType.memberInfo(sym)
@@ -533,7 +533,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
533533
// But for now, just like we did in mixin, we just avoid writing a wrong generic signature
534534
// (one that doesn't erase to the actual signature). See run/t3452b for a test case.
535535

536-
val memberTpe = ctx.atPhase(ctx.erasurePhase) { implicit ctx => moduleClass.denot.thisType.memberInfo(sym) }
536+
val memberTpe = ctx.atPhase(ctx.erasurePhase) { moduleClass.denot.thisType.memberInfo(sym) }
537537
val erasedMemberType = TypeErasure.erasure(memberTpe)
538538
if (erasedMemberType =:= sym.denot.info)
539539
getGenericSignature(sym, moduleClass, memberTpe).orNull
@@ -782,7 +782,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
782782

783783
private def definedClasses(phase: Phase) =
784784
if (sym.isDefinedInCurrentRun)
785-
ctx.atPhase(phase) { implicit ctx =>
785+
ctx.atPhase(phase) {
786786
toDenot(sym).info.decls.filter(_.isClass)
787787
}
788788
else Nil
@@ -835,13 +835,13 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
835835
* such objects.
836836
*/
837837
def isTopLevelModuleClass: Boolean = sym.isModuleClass &&
838-
ctx.atPhase(ctx.flattenPhase) { implicit ctx =>
838+
ctx.atPhase(ctx.flattenPhase) {
839839
toDenot(sym).owner.is(Flags.PackageClass)
840840
}
841841

842842
def addRemoteRemoteExceptionAnnotation: Unit = ()
843843

844-
def samMethod(): Symbol = ctx.atPhase(ctx.erasurePhase) { implicit ctx =>
844+
def samMethod(): Symbol = ctx.atPhase(ctx.erasurePhase) {
845845
toDenot(sym).info.abstractTermMembers.toList match {
846846
case x :: Nil => x.symbol
847847
case Nil => abort(s"${sym.show} is not a functional interface. It doesn't have abstract methods")

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,8 @@ class GenBCodePipeline(val entryPoints: List[Symbol], val int: DottyBackendInter
162162
val (cl1, cl2) =
163163
if (classSymbol.effectiveName.toString < dupClassSym.effectiveName.toString) (classSymbol, dupClassSym)
164164
else (dupClassSym, classSymbol)
165-
ctx.atPhase(ctx.typerPhase) { implicit ctx =>
166-
ctx.warning(s"${cl1.show} differs only in case from ${cl2.showLocated}. " +
165+
ctx.atPhase(ctx.typerPhase) {
166+
the[Context].warning(s"${cl1.show} differs only in case from ${cl2.showLocated}. " +
167167
"Such classes will overwrite one another on case-insensitive filesystems.", cl1.sourcePos)
168168
}
169169
}
@@ -263,7 +263,7 @@ class GenBCodePipeline(val entryPoints: List[Symbol], val int: DottyBackendInter
263263

264264
// ----------- compiler and sbt's callbacks
265265

266-
val (fullClassName, isLocal) = ctx.atPhase(ctx.sbtExtractDependenciesPhase) { implicit ctx =>
266+
val (fullClassName, isLocal) = ctx.atPhase(ctx.sbtExtractDependenciesPhase) {
267267
(ExtractDependencies.classNameAsString(claszSymbol), claszSymbol.isLocal)
268268
}
269269

compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1962,7 +1962,7 @@ class JSCodeGen()(implicit ctx: Context) {
19621962
if (isStat) {
19631963
boxedResult
19641964
} else {
1965-
val tpe = ctx.atPhase(ctx.elimErasedValueTypePhase) { implicit ctx =>
1965+
val tpe = ctx.atPhase(ctx.elimErasedValueTypePhase) {
19661966
sym.info.finalResultType
19671967
}
19681968
unbox(boxedResult, tpe)
@@ -2578,13 +2578,13 @@ class JSCodeGen()(implicit ctx: Context) {
25782578
def paramNamesAndTypes(implicit ctx: Context): List[(Names.TermName, Type)] =
25792579
sym.info.paramNamess.flatten.zip(sym.info.paramInfoss.flatten)
25802580

2581-
val wereRepeated = ctx.atPhase(ctx.elimRepeatedPhase) { implicit ctx =>
2581+
val wereRepeated = ctx.atPhase(ctx.elimRepeatedPhase) {
25822582
val list = for ((name, tpe) <- paramNamesAndTypes)
25832583
yield (name -> tpe.isRepeatedParam)
25842584
list.toMap
25852585
}
25862586

2587-
val paramTypes = ctx.atPhase(ctx.elimErasedValueTypePhase) { implicit ctx =>
2587+
val paramTypes = ctx.atPhase(ctx.elimErasedValueTypePhase) {
25882588
paramNamesAndTypes.toMap
25892589
}
25902590

compiler/src/dotty/tools/backend/sjs/JSInterop.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ object JSInterop {
1616
/** Is this symbol a JavaScript type? */
1717
def isJSType(sym: Symbol)(implicit ctx: Context): Boolean = {
1818
//sym.hasAnnotation(jsdefn.RawJSTypeAnnot)
19-
ctx.atPhase(ctx.erasurePhase) { implicit ctx =>
19+
ctx.atPhase(ctx.erasurePhase) {
2020
sym.derivesFrom(jsdefn.JSAnyClass)
2121
}
2222
}
@@ -32,7 +32,7 @@ object JSInterop {
3232
* much as *accessor* methods created for `val`s and `var`s.
3333
*/
3434
def isJSGetter(sym: Symbol)(implicit ctx: Context): Boolean = {
35-
sym.info.firstParamTypes.isEmpty && ctx.atPhase(ctx.erasurePhase) { implicit ctx =>
35+
sym.info.firstParamTypes.isEmpty && ctx.atPhase(ctx.erasurePhase) {
3636
sym.info.isParameterless
3737
}
3838
}

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,32 +124,32 @@ object Annotations {
124124
}
125125

126126
/** Create an annotation where the tree is computed lazily. */
127-
def deferred(sym: Symbol, treeFn: Context => Tree)(implicit ctx: Context): Annotation =
127+
def deferred(sym: Symbol)(treeFn: given Context => Tree)(implicit ctx: Context): Annotation =
128128
new LazyAnnotation {
129129
override def symbol(implicit ctx: Context): Symbol = sym
130-
def complete(implicit ctx: Context) = treeFn(ctx)
130+
def complete(implicit ctx: Context) = treeFn given ctx
131131
}
132132

133133
/** Create an annotation where the symbol and the tree are computed lazily. */
134-
def deferredSymAndTree(symf: Context => Symbol, treeFn: Context => Tree)(implicit ctx: Context): Annotation =
134+
def deferredSymAndTree(symf: given Context => Symbol)(treeFn: given Context => Tree)(implicit ctx: Context): Annotation =
135135
new LazyAnnotation {
136136
private[this] var mySym: Symbol = _
137137

138138
override def symbol(implicit ctx: Context): Symbol = {
139139
if (mySym == null || mySym.defRunId != ctx.runId) {
140-
mySym = symf(ctx)
140+
mySym = symf given ctx
141141
assert(mySym != null)
142142
}
143143
mySym
144144
}
145-
def complete(implicit ctx: Context) = treeFn(ctx)
145+
def complete(implicit ctx: Context) = treeFn given ctx
146146
}
147147

148148
def deferred(atp: Type, args: List[Tree])(implicit ctx: Context): Annotation =
149-
deferred(atp.classSymbol, implicit ctx => New(atp, args))
149+
deferred(atp.classSymbol)(New(atp, args))
150150

151151
def deferredResolve(atp: Type, args: List[Tree])(implicit ctx: Context): Annotation =
152-
deferred(atp.classSymbol, implicit ctx => resolveConstructor(atp, args))
152+
deferred(atp.classSymbol)(resolveConstructor(atp, args))
153153

154154
def makeAlias(sym: TermSymbol)(implicit ctx: Context): Annotation =
155155
apply(defn.AliasAnnot, List(
@@ -165,7 +165,7 @@ object Annotations {
165165
New(defn.ChildAnnotType.appliedTo(sym.owner.thisType.select(sym.name, sym)), Nil)
166166
.withSpan(span)
167167
}
168-
deferred(defn.ChildAnnot, implicit ctx => makeChildLater(ctx))
168+
deferred(defn.ChildAnnot)(makeChildLater(ctx))
169169
}
170170

171171
/** A regular, non-deferred Child annotation */

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ object Contexts {
315315
/** Run `op` as if it was run in a fresh explore typer state, but possibly
316316
* optimized to re-use the current typer state.
317317
*/
318-
final def test[T](op: Context => T): T = typerState.test(op)(this)
318+
final def test[T](op: given Context => T): T = typerState.test(op)(this)
319319

320320
/** Is this a context for the members of a class definition? */
321321
def isClassDefContext: Boolean =
@@ -404,7 +404,7 @@ object Contexts {
404404
case _ => None
405405
}
406406
ctx.fresh.setImportInfo(
407-
new ImportInfo(implicit ctx => sym, imp.selectors, impNameOpt, imp.importDelegate))
407+
ImportInfo(sym, imp.selectors, impNameOpt, imp.importDelegate))
408408
}
409409

410410
/** Does current phase use an erased types interpretation? */

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ object Decorators {
204204
* give more info about type variables and to disambiguate where needed.
205205
*/
206206
def ex(args: Any*)(implicit ctx: Context): String =
207-
explained(implicit ctx => em(args: _*))
207+
explained(em(args: _*))
208208
}
209209

210210
implicit class ArrayInterpolator[T <: AnyRef](val arr: Array[T]) extends AnyVal {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ abstract class Periods { self: Context =>
2121
op(ctx.fresh.setPeriod(pd))
2222

2323
/** Execute `op` at given phase id */
24-
def atPhase[T](pid: PhaseId)(op: Context => T): T =
25-
op(ctx.withPhase(pid))
24+
def atPhase[T](pid: PhaseId)(op: given Context => T): T =
25+
op given ctx.withPhase(pid)
2626

2727
/** The period containing the current period where denotations do not change.
2828
* We compute this by taking as first phase the first phase less or equal to

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ trait Phases {
3131
}
3232

3333
/** Execute `op` at given phase */
34-
def atPhase[T](phase: Phase)(op: Context => T): T =
34+
def atPhase[T](phase: Phase)(op: given Context => T): T =
3535
atPhase(phase.id)(op)
3636

37-
def atNextPhase[T](op: Context => T): T = atPhase(phase.next)(op)
37+
def atNextPhase[T](op: given Context => T): T = atPhase(phase.next)(op)
3838

39-
def atPhaseNotLaterThan[T](limit: Phase)(op: Context => T): T =
40-
if (!limit.exists || phase <= limit) op(this) else atPhase(limit)(op)
39+
def atPhaseNotLaterThan[T](limit: Phase)(op: given Context => T): T =
40+
if (!limit.exists || phase <= limit) op given this else atPhase(limit)(op)
4141

4242
def isAfterTyper: Boolean = base.isAfterTyper(phase)
4343
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] w
195195
//}
196196
assert(!ctx.settings.YnoDeepSubtypes.value)
197197
if (Config.traceDeepSubTypeRecursions && !this.isInstanceOf[ExplainingTypeComparer])
198-
ctx.log(TypeComparer.explained(implicit ctx => ctx.typeComparer.isSubType(tp1, tp2, approx)))
198+
ctx.log(TypeComparer.explained(the[Context].typeComparer.isSubType(tp1, tp2, approx)))
199199
}
200200
// Eliminate LazyRefs before checking whether we have seen a type before
201201
val normalize = new TypeMap {
@@ -2307,15 +2307,15 @@ object TypeComparer {
23072307
*/
23082308
val FreshApprox: ApproxState = new ApproxState(4)
23092309

2310-
/** Show trace of comparison operations when performing `op` as result string */
2311-
def explaining[T](say: String => Unit)(op: Context => T)(implicit ctx: Context): T = {
2310+
/** Show trace of comparison operations when performing `op` */
2311+
def explaining[T](say: String => Unit)(op: given Context => T)(implicit ctx: Context): T = {
23122312
val nestedCtx = ctx.fresh.setTypeComparerFn(new ExplainingTypeComparer(_))
2313-
val res = try { op(nestedCtx) } finally { say(nestedCtx.typeComparer.lastTrace()) }
2313+
val res = try { op given nestedCtx } finally { say(nestedCtx.typeComparer.lastTrace()) }
23142314
res
23152315
}
23162316

23172317
/** Like [[explaining]], but returns the trace instead */
2318-
def explained[T](op: Context => T)(implicit ctx: Context): String = {
2318+
def explained[T](op: given Context => T)(implicit ctx: Context): String = {
23192319
var trace: String = null
23202320
try { explaining(trace = _)(op) } catch { case ex: Throwable => ex.printStackTrace }
23212321
trace

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,9 @@ class TyperState(private val previous: TyperState /* | Null */) {
9696
* typerstate. If it is unshared, run `op` in current typerState, restoring typerState
9797
* to previous state afterwards.
9898
*/
99-
def test[T](op: Context => T)(implicit ctx: Context): T =
99+
def test[T](op: given Context => T)(implicit ctx: Context): T =
100100
if (isShared)
101-
op(ctx.fresh.setExploreTyperState())
101+
op given ctx.fresh.setExploreTyperState()
102102
else {
103103
val savedConstraint = myConstraint
104104
val savedReporter = myReporter
@@ -114,7 +114,7 @@ class TyperState(private val previous: TyperState /* | Null */) {
114114
testReporter.inUse = true
115115
testReporter
116116
}
117-
try op(ctx)
117+
try op given ctx
118118
finally {
119119
testReporter.inUse = false
120120
resetConstraintTo(savedConstraint)

compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -658,9 +658,7 @@ class TreeUnpickler(reader: TastyReader,
658658
val lazyAnnotTree = readLaterWithOwner(end, rdr => ctx => rdr.readTerm()(ctx))
659659

660660
owner =>
661-
Annotation.deferredSymAndTree(
662-
implicit ctx => tp.typeSymbol,
663-
implicit ctx => lazyAnnotTree(owner).complete)
661+
Annotation.deferredSymAndTree(tp.typeSymbol)(lazyAnnotTree(owner).complete)
664662
}
665663

666664
/** Create symbols for the definitions in the statement sequence between

compiler/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -972,9 +972,8 @@ class Scala2Unpickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClas
972972
val start = readIndex
973973
val atp = readTypeRef()
974974
val phase = ctx.phase
975-
Annotation.deferred(
976-
atp.typeSymbol, implicit ctx =>
977-
atReadPos(start, () => readAnnotationContents(end)(ctx.withPhase(phase))))
975+
Annotation.deferred(atp.typeSymbol)(
976+
atReadPos(start, () => readAnnotationContents(end)(the[Context].withPhase(phase))))
978977
}
979978

980979
/* Read an abstract syntax tree */

compiler/src/dotty/tools/dotc/interactive/Interactive.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -379,16 +379,16 @@ object Interactive {
379379
*/
380380
def localize(symbol: Symbol, sourceDriver: InteractiveDriver, targetDriver: InteractiveDriver): Symbol = {
381381

382-
def in[T](driver: InteractiveDriver)(fn: Context => T): T =
383-
fn(driver.currentCtx)
382+
def in[T](driver: InteractiveDriver)(fn: given Context => T): T =
383+
fn given driver.currentCtx
384384

385385
if (sourceDriver == targetDriver) symbol
386386
else {
387-
val owners = in(sourceDriver) { implicit ctx =>
387+
val owners = in(sourceDriver) {
388388
symbol.ownersIterator.toList.reverse.map(_.name)
389389
}
390-
in(targetDriver) { implicit ctx =>
391-
val base: Symbol = ctx.definitions.RootClass
390+
in(targetDriver) {
391+
val base: Symbol = defn.RootClass
392392
owners.tail.foldLeft(base) { (prefix, symbolName) =>
393393
if (prefix.exists) prefix.info.member(symbolName).symbol
394394
else NoSymbol

compiler/src/dotty/tools/dotc/printing/Formatting.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,9 +252,9 @@ object Formatting {
252252
* ex"disambiguate $tpe1 and $tpe2"
253253
* ```
254254
*/
255-
def explained(op: Context => String)(implicit ctx: Context): String = {
255+
def explained(op: given Context => String)(implicit ctx: Context): String = {
256256
val seen = new Seen
257-
val msg = op(explainCtx(seen))
257+
val msg = op given explainCtx(seen)
258258
val addendum = explanations(seen)
259259
if (addendum.isEmpty) msg else msg ++ "\n\n" ++ addendum
260260
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ class CheckReentrant extends MiniPhase {
3636
private[this] var seen: Set[ClassSymbol] = Set()
3737
private[this] var indent: Int = 0
3838

39-
private val sharableAnnot = new CtxLazy(implicit ctx =>
39+
private val sharableAnnot = new CtxLazy(given ctx =>
4040
ctx.requiredClass("scala.annotation.internal.sharable"))
41-
private val unsharedAnnot = new CtxLazy(implicit ctx =>
41+
private val unsharedAnnot = new CtxLazy(given ctx =>
4242
ctx.requiredClass("scala.annotation.internal.unshared"))
4343

4444
def isIgnored(sym: Symbol)(implicit ctx: Context): Boolean =

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ import core.Contexts.Context
1111
* A typical use case is a lazy val in a phase object which exists once per root context where
1212
* the expression intiializing the lazy val depends only on the root context, but not any changes afterwards.
1313
*/
14-
class CtxLazy[T](expr: Context => T) {
14+
class CtxLazy[T](expr: given Context => T) {
1515
private[this] var myValue: T = _
1616
private[this] var forced = false
1717
def apply()(implicit ctx: Context): T = {
1818
if (!forced) {
19-
myValue = expr(ctx)
19+
myValue = expr given ctx
2020
forced = true
2121
}
2222
myValue

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class ElimByName extends TransformByNameApply with InfoTransformer {
4242
private def applyIfFunction(tree: Tree, ftree: Tree)(implicit ctx: Context) =
4343
if (isByNameRef(ftree)) {
4444
val tree0 = transformFollowing(tree)
45-
ctx.atPhase(next) { implicit ctx => tree0.select(defn.Function0_apply).appliedToNone }
45+
ctx.atPhase(next) { tree0.select(defn.Function0_apply).appliedToNone }
4646
}
4747
else tree
4848

@@ -61,7 +61,7 @@ class ElimByName extends TransformByNameApply with InfoTransformer {
6161
}
6262

6363
override def transformValDef(tree: ValDef)(implicit ctx: Context): Tree =
64-
ctx.atPhase(next) { implicit ctx =>
64+
ctx.atPhase(next) {
6565
if (exprBecomesFunction(tree.symbol))
6666
cpy.ValDef(tree)(tpt = tree.tpt.withType(tree.symbol.info))
6767
else tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ class ElimRepeated extends MiniPhase with InfoTransformer { thisPhase =>
112112
* Also transform trees inside method annotation
113113
*/
114114
override def transformDefDef(tree: DefDef)(implicit ctx: Context): Tree =
115-
ctx.atPhase(thisPhase) { implicit ctx =>
115+
ctx.atPhase(thisPhase) {
116116
if (tree.symbol.info.isVarArgsMethod && overridesJava(tree.symbol))
117117
addVarArgsBridge(tree)
118118
else

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ object ExplicitOuter {
131131

132132
/** Ensure that class `cls` has outer accessors */
133133
def ensureOuterAccessors(cls: ClassSymbol)(implicit ctx: Context): Unit =
134-
ctx.atPhase(ctx.explicitOuterPhase.next) { implicit ctx =>
134+
ctx.atPhase(ctx.explicitOuterPhase.next) {
135135
if (!hasOuter(cls))
136136
newOuterAccessors(cls).foreach(_.enteredAfter(ctx.explicitOuterPhase.asInstanceOf[DenotTransformer]))
137137
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ object ExtensionMethods {
217217

218218
/** Return the extension method that corresponds to given instance method `meth`. */
219219
def extensionMethod(imeth: Symbol)(implicit ctx: Context): TermSymbol =
220-
ctx.atPhase(ctx.extensionMethodsPhase.next) { implicit ctx =>
220+
ctx.atPhase(ctx.extensionMethodsPhase.next) {
221221
// FIXME use toStatic instead?
222222
val companion = imeth.owner.companionModule
223223
val companionInfo = companion.info

0 commit comments

Comments
 (0)