summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-11-12 18:23:21 +0000
committerMartin Odersky <odersky@gmail.com>2009-11-12 18:23:21 +0000
commitb302b5afad55a76d049bbdc5dd0727e24037ad9c (patch)
treeb12fda07f8419ca4c4de0b875573e3e98af194d1
parent6599b4dc6081fb4961d07bdb83a1bcd764c59058 (diff)
downloadscala-b302b5afad55a76d049bbdc5dd0727e24037ad9c.tar.gz
scala-b302b5afad55a76d049bbdc5dd0727e24037ad9c.tar.bz2
scala-b302b5afad55a76d049bbdc5dd0727e24037ad9c.zip
Fixed #2482
-rw-r--r--src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala8
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