Skip to content

Commit

Permalink
SI-8263 Avoid SOE in Symbol#logicallyEnclosingMember under Scala 2.11
Browse files Browse the repository at this point in the history
Since the fix for SI-2066, Scala 2.11 calls logicallyEnclosingMember on the
`x` in the expansion of the task macro:

    InitializeInstance.app[[T0[x]](T0[java.io.File], T0[java.io.File]), Seq[java.io.File]]

This exposed the fact that SBT has created `T0` with `NoSymbol` as
the owner. This led to the a SOE.

I will also change the compiler to be more tolerant of this, but we
can observe good discipline in the macro and pick a sensible owner.
  • Loading branch information
retronym authored and eed3si9n committed Mar 21, 2014
1 parent 0e3f011 commit 5ae663e
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
4 changes: 2 additions & 2 deletions util/appmacro/src/main/scala/sbt/appmacro/KListBuilder.scala
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ object KListBuilder extends TupleBuilder
val kconsTC: Type = kconsTpe.typeConstructor

/** This is the L in the type function [L[x]] ... */
val tcVariable: TypeSymbol = newTCVariable(NoSymbol)
val tcVariable: TypeSymbol = newTCVariable(util.initialOwner)

/** Instantiates KCons[h, t <: KList[L], L], where L is the type constructor variable */
def kconsType(h: Type, t: Type): Type =
Expand Down Expand Up @@ -65,4 +65,4 @@ object KListBuilder extends TupleBuilder
val alistInstance: ctx.universe.Tree = TypeApply(select(Ident(alist), "klist"), TypeTree(representationC) :: Nil)
def extract(param: ValDef) = bindKList(param, Nil, inputs.map(_.local))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ object TupleNBuilder extends TupleBuilder

val ctx: c.type = c
val representationC: PolyType = {
val tcVariable: Symbol = newTCVariable(NoSymbol)
val tcVariable: Symbol = newTCVariable(util.initialOwner)
val tupleTypeArgs = inputs.map(in => typeRef(NoPrefix, tcVariable, in.tpe :: Nil).asInstanceOf[global.Type])
val tuple = global.definitions.tupleType(tupleTypeArgs)
PolyType(tcVariable :: Nil, tuple.asInstanceOf[Type] )
Expand Down

0 comments on commit 5ae663e

Please sign in to comment.