diff options
-rw-r--r-- | src/dotty/tools/dotc/ast/tpd.scala | 11 | ||||
-rw-r--r-- | test/dotc/tests.scala | 24 |
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 |