aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-05-05 15:25:24 +0200
committerMartin Odersky <odersky@gmail.com>2015-05-05 15:25:24 +0200
commit2fdf660aba6a23a5adb665bd1af4d54e8952034c (patch)
treecfa7c73960c107f9f6b158f5ec19c8a7aee6ea88 /src/dotty/tools
parent7129cbe60c062be49aef8c27da461a11416e189c (diff)
downloaddotty-2fdf660aba6a23a5adb665bd1af4d54e8952034c.tar.gz
dotty-2fdf660aba6a23a5adb665bd1af4d54e8952034c.tar.bz2
dotty-2fdf660aba6a23a5adb665bd1af4d54e8952034c.zip
Allow to compile root import classes without special option.
Can now compile Predef/DottyPredef without -Yno-import option. Achieved by making some parts of imports more lazy.
Diffstat (limited to 'src/dotty/tools')
-rw-r--r--src/dotty/tools/dotc/Compiler.scala8
-rw-r--r--src/dotty/tools/dotc/core/Definitions.scala4
-rw-r--r--src/dotty/tools/dotc/typer/ImportInfo.scala10
3 files changed, 12 insertions, 10 deletions
diff --git a/src/dotty/tools/dotc/Compiler.scala b/src/dotty/tools/dotc/Compiler.scala
index d4837ae74..4899454a2 100644
--- a/src/dotty/tools/dotc/Compiler.scala
+++ b/src/dotty/tools/dotc/Compiler.scala
@@ -104,11 +104,9 @@ class Compiler {
.setMode(Mode.ImplicitsEnabled)
.setTyperState(new MutableTyperState(ctx.typerState, new ConsoleReporter()(ctx), isCommittable = true))
ctx.definitions.init(start) // set context of definitions to start
- start.setRunInfo(new RunInfo(start))
- def addImport(ctx: Context, sym: Symbol) =
- ctx.fresh.setImportInfo(ImportInfo.rootImport(sym)(ctx))
- if (ctx.settings.YnoImports.value) start
- else (start /: defn.RootImports)(addImport)
+ def addImport(ctx: Context, symf: () => Symbol) =
+ ctx.fresh.setImportInfo(ImportInfo.rootImport(symf)(ctx))
+ (start.setRunInfo(new RunInfo(start)) /: defn.RootImportFns)(addImport)
}
def reset()(implicit ctx: Context): Unit = {
diff --git a/src/dotty/tools/dotc/core/Definitions.scala b/src/dotty/tools/dotc/core/Definitions.scala
index c21620048..a1b44ec34 100644
--- a/src/dotty/tools/dotc/core/Definitions.scala
+++ b/src/dotty/tools/dotc/core/Definitions.scala
@@ -449,7 +449,9 @@ class Definitions {
lazy val isPolymorphicAfterErasure = Set[Symbol](Any_isInstanceOf, Any_asInstanceOf, newRefArrayMethod)
- lazy val RootImports = List[Symbol](JavaLangPackageVal, ScalaPackageVal, ScalaPredefModule, DottyPredefModule)
+ val RootImportFns = List[() => Symbol](() => JavaLangPackageVal, () => ScalaPackageVal, () => ScalaPredefModule, () => DottyPredefModule)
+
+ lazy val RootImports = RootImportFns.map(_())
def isTupleType(tp: Type)(implicit ctx: Context) = {
val arity = tp.dealias.argInfos.length
diff --git a/src/dotty/tools/dotc/typer/ImportInfo.scala b/src/dotty/tools/dotc/typer/ImportInfo.scala
index 30ab19fd8..fe999b561 100644
--- a/src/dotty/tools/dotc/typer/ImportInfo.scala
+++ b/src/dotty/tools/dotc/typer/ImportInfo.scala
@@ -11,10 +11,10 @@ import Decorators.StringInterpolators
object ImportInfo {
/** The import info for a root import from given symbol `sym` */
- def rootImport(sym: Symbol)(implicit ctx: Context) = {
- val expr = tpd.Ident(sym.valRef)
+ def rootImport(sym: () => Symbol)(implicit ctx: Context) = {
val selectors = untpd.Ident(nme.WILDCARD) :: Nil
- val imp = tpd.Import(expr, selectors)
+ def expr = tpd.Ident(sym().valRef)
+ def imp = tpd.Import(expr, selectors)
new ImportInfo(imp.symbol, selectors, isRootImport = true)
}
}
@@ -25,7 +25,9 @@ object ImportInfo {
* @param rootImport true if this is one of the implicit imports of scala, java.lang
* or Predef in the start context, false otherwise.
*/
-class ImportInfo(val sym: Symbol, val selectors: List[untpd.Tree], val isRootImport: Boolean = false)(implicit ctx: Context) {
+class ImportInfo(symf: => Symbol, val selectors: List[untpd.Tree], val isRootImport: Boolean = false)(implicit ctx: Context) {
+
+ lazy val sym = symf
/** The (TermRef) type of the qualifier of the import clause */
def site(implicit ctx: Context): Type = {