aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/ast/tpd.scala11
-rw-r--r--test/dotc/tests.scala24
2 files changed, 32 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/ast/tpd.scala b/src/dotty/tools/dotc/ast/tpd.scala
index 878e11b67..b369b4e37 100644
--- a/src/dotty/tools/dotc/ast/tpd.scala
+++ b/src/dotty/tools/dotc/ast/tpd.scala
@@ -93,13 +93,20 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
def avoid(tp: Type, syms: => List[Symbol])(implicit ctx: Context): Type = {
val widenMap = new TypeMap {
- lazy val avoided = syms.toSet
- def toAvoid(sym: Symbol) = sym.owner.isTerm && (avoided contains sym)
+ lazy val forbidden = syms.toSet
+ def toAvoid(sym: Symbol): Boolean = sym.owner.isTerm && (forbidden contains sym)
+ def toAvoid(tp: Type): Boolean = tp match {
+ case tp: TermRef => toAvoid(tp.symbol)
+ case _ => false
+ }
def apply(tp: Type) = tp match {
case tp: TermRef if toAvoid(tp.symbol) && variance > 0 =>
apply(tp.info)
case tp @ TypeRef(pre: TermRef, _) if tp.symbol.isAliasType && toAvoid(pre.symbol) =>
apply(tp.info.bounds.hi)
+ case tp @ RefinedType(parent, _) =>
+ val tp1 @ RefinedType(parent1, _) = mapOver(tp)
+ if (tp1.refinedInfo existsPart toAvoid) parent1 else tp1
case _ =>
mapOver(tp)
}
diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala
index 84765d02b..c6986431d 100644
--- a/test/dotc/tests.scala
+++ b/test/dotc/tests.scala
@@ -37,7 +37,7 @@ class tests extends CompilerTest {
@Test def pos_packageobject() = compileFile(posDir, "packageobject")
@Test def pos_overloaded() = compileFile(posDir, "overloaded")
- @Test def neg_blockescapes() = compileFile(negDir, "blockescapesNeg", xerrors = 2)
+ @Test def neg_blockescapes() = compileFile(negDir, "blockescapesNeg", xerrors = 1)
@Test def neg_typedapply() = compileFile(negDir, "typedapply", xerrors = 4)
@Test def neg_typedidents() = compileFile(negDir, "typedidents", xerrors = 2)
@Test def neg_assignments() = compileFile(negDir, "assignments", xerrors = 3)
@@ -46,6 +46,28 @@ class tests extends CompilerTest {
@Test def dotc = compileDir(dotcDir + "tools/dotc")
@Test def dotc_ast = compileDir(dotcDir + "tools/dotc/ast")
@Test def dotc_config = compileDir(dotcDir + "tools/dotc/config")
+ @Test def dotc1 = compileFile(dotcDir + "tools/dotc/core/", "Annotations")
+ @Test def dotc2 = compileFile(dotcDir + "tools/dotc/core/", "Constants")
+ @Test def dotc3 = compileFile(dotcDir + "tools/dotc/core/", "Constraint")
+ @Test def dotc4 = compileFile(dotcDir + "tools/dotc/core/", "Contexts")
+ @Test def dotc5 = compileFile(dotcDir + "tools/dotc/core/", "Decorators")
+ @Test def dotc6 = compileFile(dotcDir + "tools/dotc/core/", "Definitions")
+ @Test def dotc7 = compileFile(dotcDir + "tools/dotc/core/", "Denotations")
+ @Test def dotc8 = compileFile(dotcDir + "tools/dotc/core/", "DotClass")
+ @Test def dotc9 = compileFile(dotcDir + "tools/dotc/core/", "Flags")
+ @Test def dotc10 = compileFile(dotcDir + "tools/dotc/core/", "NameOps")
+ @Test def dotc11 = compileFile(dotcDir + "tools/dotc/core/", "Names")
+ @Test def dotc12 = compileFile(dotcDir + "tools/dotc/core/", "Periods")
+ @Test def dotc13 = compileFile(dotcDir + "tools/dotc/core/", "Phases")
+ @Test def dotc14 = compileFile(dotcDir + "tools/dotc/core/", "Scopes")
+ @Test def dotc15 = compileFile(dotcDir + "tools/dotc/core/", "Signature")
+ @Test def dotc16 = compileFile(dotcDir + "tools/dotc/core/", "StdNames")
+ @Test def dotc17 = compileFile(dotcDir + "tools/dotc/core/", "Substituters")
+// @Test def dotc18 = compileFile(dotcDir + "tools/dotc/core/", "SymbolLoaders")
+// @Test def dotc19 = compileFile(dotcDir + "tools/dotc/core/", "Symbols")
+
+
+
// @Test def dotc_compilercommand = compileFile(dotcDir + "tools/dotc/config/", "CompilerCommand")
} \ No newline at end of file