From 627adab5dbddcef8bd57d2b40eaa6a6e40c06cab Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Fri, 3 Dec 2010 18:47:01 +0000 Subject: close #3951. review by dubochet. --- src/library/scala/reflect/generic/UnPickler.scala | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/library') diff --git a/src/library/scala/reflect/generic/UnPickler.scala b/src/library/scala/reflect/generic/UnPickler.scala index ed103a3a43..d04b882f0d 100755 --- a/src/library/scala/reflect/generic/UnPickler.scala +++ b/src/library/scala/reflect/generic/UnPickler.scala @@ -65,14 +65,23 @@ abstract class UnPickler { //println("unpickled " + classRoot + ":" + classRoot.rawInfo + ", " + moduleRoot + ":" + moduleRoot.rawInfo);//debug def run() { + // read children last, fix for #3951 + val queue = new collection.mutable.ListBuffer[() => Unit]() + def delay(i: Int, action: => Unit) { + queue += (() => at(i, {() => action; null})) + } + for (i <- 0 until index.length) { if (isSymbolEntry(i)) at(i, readSymbol) else if (isSymbolAnnotationEntry(i)) - at(i, {() => readSymbolAnnotation(); null}) + delay(i, readSymbolAnnotation()) else if (isChildrenEntry(i)) - at(i, {() => readChildren(); null}) + delay(i, readChildren()) } + + for (action <- queue) + action() } private def checkVersion() { -- cgit v1.2.3