diff options
author | Tiark Rompf <tiark.rompf@epfl.ch> | 2010-03-25 16:14:56 +0000 |
---|---|---|
committer | Tiark Rompf <tiark.rompf@epfl.ch> | 2010-03-25 16:14:56 +0000 |
commit | 1cedf8047ba9820277b2b9e546092918e6e0c7d1 (patch) | |
tree | c1bc414403baccde9a45715ec61609a456786ee1 | |
parent | 63103a5e1a4970d7984d15efe8db4c30fbb56828 (diff) | |
download | scala-1cedf8047ba9820277b2b9e546092918e6e0c7d1.tar.gz scala-1cedf8047ba9820277b2b9e546092918e6e0c7d1.tar.bz2 scala-1cedf8047ba9820277b2b9e546092918e6e0c7d1.zip |
fixed double-loading of plugins.
5 files changed, 15 insertions, 12 deletions
@@ -632,7 +632,7 @@ QUICK BUILD (QUICK) <scalacfork destdir="${build-quick.dir}/classes/library" compilerpathref="locker.classpath" - params="${scalac.args.quick} -Xplugin:${build-quick.dir}/plugins/continuations.jar -Xplugin-require:continuations -P:continuations:enable" + params="${scalac.args.quick} -Xpluginsdir ${build-quick.dir}/plugins -Xplugin-require:continuations -P:continuations:enable" srcdir="${src.dir}/continuations/library" jvmargs="${scalacfork.jvmargs}"> <include name="**/*.scala"/> @@ -1135,7 +1135,7 @@ BOOTSTRAPPING BUILD (STRAP) <scalacfork destdir="${build-strap.dir}/classes/library" compilerpathref="pack.classpath" - params="${scalac.args.quick} -Xplugin:${build-strap.dir}/plugins/continuations.jar -Xplugin-require:continuations -P:continuations:enable" + params="${scalac.args.quick} -Xpluginsdir ${build-quick.dir}/plugins -Xplugin-require:continuations -P:continuations:enable" srcdir="${src.dir}/continuations/library" jvmargs="${scalacfork.jvmargs}"> <include name="**/*.scala"/> @@ -1553,7 +1553,7 @@ BOOTRAPING TEST AND TEST SUITE <partest showlog="yes" erroronfailed="yes" javacmd="${java.home}/bin/java" timeout="2400000" javaccmd="${javac.cmd}" srcdir="${partest.srcdir}" - scalacopts="${scalac.args.optimise} -Xplugin:${build-pack.dir}/plugins/continuations.jar -Xplugin-require:continuations -P:continuations:enable"> + scalacopts="${scalac.args.optimise} -Xpluginsdir ${build-quick.dir}/plugins -Xplugin-require:continuations -P:continuations:enable"> <compilationpath> <path refid="pack.classpath"/> <fileset dir="${partest.dir}/files/lib" includes="*.jar" /> diff --git a/src/compiler/scala/tools/nsc/plugins/Plugin.scala b/src/compiler/scala/tools/nsc/plugins/Plugin.scala index 92dcd6c534..f527441c68 100644 --- a/src/compiler/scala/tools/nsc/plugins/Plugin.scala +++ b/src/compiler/scala/tools/nsc/plugins/Plugin.scala @@ -131,13 +131,13 @@ object Plugin { dirs: List[Path], ignoring: List[String]): List[AnyClass] = { - val alljars = jars ::: (for { + val alljars = (jars ::: (for { dir <- dirs if dir.isDirectory entry <- dir.toDirectory.files.toList sortBy (_.name) if entry.extension == "jar" pdesc <- loadDescription(entry) if !(ignoring contains pdesc.name) - } yield entry) + } yield entry)).distinct val loader = loaderFor(alljars) alljars map (loadFrom(_, loader)) flatten diff --git a/src/compiler/scala/tools/nsc/plugins/Plugins.scala b/src/compiler/scala/tools/nsc/plugins/Plugins.scala index 90d306614a..8a86c982d9 100644 --- a/src/compiler/scala/tools/nsc/plugins/Plugins.scala +++ b/src/compiler/scala/tools/nsc/plugins/Plugins.scala @@ -30,10 +30,10 @@ trait Plugins val dirs = (settings.pluginsDir.value split File.pathSeparator).toList map Path.apply val classes = Plugin.loadAllFrom(jars, dirs, settings.disable.value) - classes foreach (c => Plugin.instantiate(c, this)) - - for (plugClass <- Plugin.loadAllFrom(jars, dirs, settings.disable.value)) - yield Plugin.instantiate(plugClass, this) + // Lach plugin must only be instantiated once. A commong pattern + // is to register annotation checkers during object construction, so + // creating multiple plugin instances will leave behind stale checkers. s + classes map (Plugin.instantiate(_, this)) } protected lazy val roughPluginsList: List[Plugin] = loadRoughPluginsList diff --git a/src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala b/src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala index 6acc685dc2..a1112fa3c8 100644 --- a/src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala +++ b/src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala @@ -380,7 +380,11 @@ abstract class CPSAnnotationChecker extends CPSUtils { * for a tree. All this should do is add annotations. */ override def addAnnotations(tree: Tree, tpe: Type): Type = { - if (!cpsEnabled) return tpe + if (!cpsEnabled) { + if (tpe.hasAnnotation(MarkerCPSTypes)) + global.reporter.error(tree.pos, "this code must be compiled with the Scala continuations plugin enabled") + return tpe + } // if (tree.tpe.hasAnnotation(MarkerCPSAdaptPlus)) // println("addAnnotation " + tree + "/" + tpe) diff --git a/src/continuations/plugin/scala/tools/selectivecps/SelectiveCPSPlugin.scala b/src/continuations/plugin/scala/tools/selectivecps/SelectiveCPSPlugin.scala index 7c56a78491..a16e9b9a4c 100644 --- a/src/continuations/plugin/scala/tools/selectivecps/SelectiveCPSPlugin.scala +++ b/src/continuations/plugin/scala/tools/selectivecps/SelectiveCPSPlugin.scala @@ -33,6 +33,7 @@ class SelectiveCPSPlugin(val global: Global) extends Plugin { } global.addAnnotationChecker(checker.checker) + global.log("instantiated cps plugin: " + this) def setEnabled(flag: Boolean) = { checker.cpsEnabled = flag @@ -56,6 +57,4 @@ class SelectiveCPSPlugin(val global: Global) extends Plugin { override val optionsHelp: Option[String] = Some(" -P:continuations:enable Enable continuations") -// " -sourcepath <path> Specify where to find input source files" - } |