diff options
author | Martin Odersky <odersky@gmail.com> | 2009-11-12 18:23:21 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-11-12 18:23:21 +0000 |
commit | b302b5afad55a76d049bbdc5dd0727e24037ad9c (patch) | |
tree | b12fda07f8419ca4c4de0b875573e3e98af194d1 /src/compiler | |
parent | 6599b4dc6081fb4961d07bdb83a1bcd764c59058 (diff) | |
download | scala-b302b5afad55a76d049bbdc5dd0727e24037ad9c.tar.gz scala-b302b5afad55a76d049bbdc5dd0727e24037ad9c.tar.bz2 scala-b302b5afad55a76d049bbdc5dd0727e24037ad9c.zip |
Fixed #2482
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala b/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala index 796ff4584a..ec3e7f8908 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala @@ -10,9 +10,11 @@ package classfile import java.lang.{Float, Double} import scala.tools.nsc.util.{Position, NoPosition, ShowPickled} +import scala.collection.mutable.Set import Flags._ import PickleFormat._ + /** * Serialize a top-level module and/or class. * @@ -65,6 +67,8 @@ abstract class Pickler extends SubComponent { private var ep = 0 private val index = new LinkedHashMap[AnyRef, Int] + private var locals: Set[Symbol] = Set() + // private var boundSyms: List[Symbol] = Nil /** Returns usually symbol's owner, but picks classfile root instead @@ -84,7 +88,8 @@ abstract class Pickler extends SubComponent { (sym.name.toTermName == rootName && sym.owner == rootOwner || sym != NoSymbol && isLocal(sym.owner) || sym.isRefinementClass || - sym.isAbstractType && sym.hasFlag(EXISTENTIAL)) + sym.isAbstractType && sym.hasFlag(EXISTENTIAL) || + (locals contains sym)) private def staticAnnotations(annots: List[AnnotationInfo]) = annots filter(ann => @@ -185,6 +190,7 @@ abstract class Pickler extends SubComponent { case MethodType(params, restpe) => putType(restpe); putSymbols(params) case PolyType(tparams, restpe) => + tparams foreach (locals +=) putType(restpe); putSymbols(tparams) case ExistentialType(tparams, restpe) => // val savedBoundSyms = boundSyms |