diff options
author | odersky <odersky@gmail.com> | 2017-02-14 18:46:36 +0100 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2017-02-14 18:46:36 +0100 |
commit | 606e36be88c47cd3f2e8856d6bd6b95aed7aa191 (patch) | |
tree | 1d71ab178ad4da7bf8d7ed2222e5c7d38f46f22d /compiler/src/dotty/tools/dotc | |
parent | 38a385af56fa14e5b48b23f87bcf9ce7aa22a1ef (diff) | |
download | dotty-606e36be88c47cd3f2e8856d6bd6b95aed7aa191.tar.gz dotty-606e36be88c47cd3f2e8856d6bd6b95aed7aa191.tar.bz2 dotty-606e36be88c47cd3f2e8856d6bd6b95aed7aa191.zip |
Fix #1976: Hack to support scala.xml's $scope (#1977)
This is a gross hack to support the need for a $scope
binding when XML literals are created. It should go away
once we phase out XML literals. A library-based
solution should use implicits instead.
Diffstat (limited to 'compiler/src/dotty/tools/dotc')
4 files changed, 8 insertions, 1 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/Definitions.scala b/compiler/src/dotty/tools/dotc/core/Definitions.scala index 2797bb8a6..01a164a81 100644 --- a/compiler/src/dotty/tools/dotc/core/Definitions.scala +++ b/compiler/src/dotty/tools/dotc/core/Definitions.scala @@ -527,6 +527,8 @@ class Definitions { lazy val EqType = ctx.requiredClassRef("scala.Eq") def EqClass(implicit ctx: Context) = EqType.symbol.asClass + lazy val XMLTopScopeModuleRef = ctx.requiredModuleRef("scala.xml.TopScope") + // Annotation base classes lazy val AnnotationType = ctx.requiredClassRef("scala.annotation.Annotation") def AnnotationClass(implicit ctx: Context) = AnnotationType.symbol.asClass diff --git a/compiler/src/dotty/tools/dotc/core/StdNames.scala b/compiler/src/dotty/tools/dotc/core/StdNames.scala index 4a9c50dad..c424c6182 100644 --- a/compiler/src/dotty/tools/dotc/core/StdNames.scala +++ b/compiler/src/dotty/tools/dotc/core/StdNames.scala @@ -533,6 +533,7 @@ object StdNames { val nullRuntimeClass: N = "scala.runtime.Null$" val synthSwitch: N = "$synthSwitch" + val _scope: N = "$scope" // unencoded operators object raw { diff --git a/compiler/src/dotty/tools/dotc/parsing/SymbolicXMLBuilder.scala b/compiler/src/dotty/tools/dotc/parsing/SymbolicXMLBuilder.scala index 20b655a19..09d1b20b1 100644 --- a/compiler/src/dotty/tools/dotc/parsing/SymbolicXMLBuilder.scala +++ b/compiler/src/dotty/tools/dotc/parsing/SymbolicXMLBuilder.scala @@ -55,7 +55,6 @@ class SymbolicXMLBuilder(parser: Parser, preserveWS: Boolean)(implicit ctx: Cont val _buf: TermName = "$buf" val _md: TermName = "$md" val _plus: TermName = "$amp$plus" - val _scope: TermName = "$scope" val _tmpscope: TermName = "$tmpscope" val _xml: TermName = "xml" } diff --git a/compiler/src/dotty/tools/dotc/typer/Typer.scala b/compiler/src/dotty/tools/dotc/typer/Typer.scala index ded8993fb..52f0a7ec7 100644 --- a/compiler/src/dotty/tools/dotc/typer/Typer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Typer.scala @@ -351,6 +351,11 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit val ownType = if (rawType.exists) ensureAccessible(rawType, superAccess = false, tree.pos) + else if (name == nme._scope) { + // gross hack to support current xml literals. + // awaiting a better implicits based solution for library-supported xml + return ref(defn.XMLTopScopeModuleRef) + } else errorType(new MissingIdent(tree, kind, name.show), tree.pos) |