From 367bf61ec8ec4fa7cff44e5692121233e0225161 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Sun, 24 Dec 2017 11:19:05 +0100 Subject: [PATCH 1/2] Remove compilation units for classes that have already been loaded --- .../tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala b/compiler/src/dotty/tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala index b7345f49e1c0..af89243be520 100644 --- a/compiler/src/dotty/tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala +++ b/compiler/src/dotty/tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala @@ -28,9 +28,12 @@ class ReadTastyTreesFromClasses extends FrontEnd { else { val unit = CompilationUnit.mkCompilationUnit(clsd, unpickled, forceTrees = true) val cls = clsd.symbol.asClass - unit.pickled += (cls -> cls.unpickler.unpickler.bytes) - cls.unpickler = null - Some(unit) + if (cls.unpickler == null) None // Has already been loaded by some other compilation unit + else { + unit.pickled += (cls -> cls.unpickler.unpickler.bytes) + cls.unpickler = null + Some(unit) + } } } } From d87f21f1d534769a36af54de480a312bc5159b07 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Mon, 25 Dec 2017 12:30:12 +0100 Subject: [PATCH 2/2] Emit error when compilation is already loaded --- .../tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/src/dotty/tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala b/compiler/src/dotty/tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala index af89243be520..6bf6f5e84413 100644 --- a/compiler/src/dotty/tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala +++ b/compiler/src/dotty/tools/dotc/fromtasty/ReadTastyTreesFromClasses.scala @@ -28,7 +28,10 @@ class ReadTastyTreesFromClasses extends FrontEnd { else { val unit = CompilationUnit.mkCompilationUnit(clsd, unpickled, forceTrees = true) val cls = clsd.symbol.asClass - if (cls.unpickler == null) None // Has already been loaded by some other compilation unit + if (cls.unpickler == null) { + ctx.error(s"Error: Already loaded ${cls.showFullName}") + None + } else { unit.pickled += (cls -> cls.unpickler.unpickler.bytes) cls.unpickler = null