diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/Symbols.scala | 6 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Erasure.scala | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala index e6b2c1e450..0240e80816 100644 --- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala +++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala @@ -355,6 +355,7 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable => final def isErroneous = isError || isInitialized && tpe.isErroneous override final def isTrait: Boolean = isClass && hasFlag(TRAIT | notDEFERRED) // A virtual class becomes a trait (part of DEVIRTUALIZE) final def isTypeParameterOrSkolem = isType && hasFlag(PARAM) + final def isHigherOrderTypeParameter = owner.isTypeParameterOrSkolem final def isTypeSkolem = isSkolem && hasFlag(PARAM) // a type symbol bound by an existential type, for instance the T in // List[T] forSome { type T } @@ -607,6 +608,11 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable => } def ownerChain: List[Symbol] = this :: owner.ownerChain + def enclClassChain: List[Symbol] = { + if (this eq NoSymbol) Nil + else if (isClass && !isPackageClass) this :: owner.enclClassChain + else owner.enclClassChain + } def ownersIterator: Iterator[Symbol] = new Iterator[Symbol] { private var current = Symbol.this diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala index a63d057bf8..a6c862c19d 100644 --- a/src/compiler/scala/tools/nsc/transform/Erasure.scala +++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala @@ -242,16 +242,16 @@ abstract class Erasure extends AddInterfaces case tp => tp :: Nil }) map squashBoxed - def jsig2(toplevel: Boolean, tparams: List[Symbol], tp0: Type): String = { + def jsig2(toplevel: Boolean, existentiallyBound: List[Symbol], tp0: Type): String = { val tp = tp0.dealias tp match { case st: SubType => - jsig2(toplevel, tparams, st.supertype) + jsig2(toplevel, existentiallyBound, st.supertype) case ExistentialType(tparams, tpe) => jsig2(toplevel, tparams, tpe) case TypeRef(pre, sym, args) => def argSig(tp: Type) = - if (tparams contains tp.typeSymbol) { + if (existentiallyBound contains tp.typeSymbol) { val bounds = tp.typeSymbol.info.bounds if (AnyRefClass.tpe <:< bounds.hi) { if (bounds.lo <:< NullClass.tpe) "*" |