diff options
-rw-r--r-- | project/Build.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/config/Printers.scala | 4 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/SymDenotations.scala | 5 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/PatternMatcher.scala | 18 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/TreeChecker.scala | 8 | ||||
-rw-r--r-- | test/dotc/tests.scala | 42 |
6 files changed, 48 insertions, 31 deletions
diff --git a/project/Build.scala b/project/Build.scala index fe809a27c..33a09a4f7 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -6,7 +6,7 @@ object DottyBuild extends Build { val TRAVIS_BUILD = "dotty.travis.build" val agentOptions = List( - //"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" + // "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" // "-agentpath:/home/dark/opt/yjp-2013-build-13072/bin/linux-x86-64/libyjpagent.so" ) diff --git a/src/dotty/tools/dotc/config/Printers.scala b/src/dotty/tools/dotc/config/Printers.scala index be91455ad..3926be59b 100644 --- a/src/dotty/tools/dotc/config/Printers.scala +++ b/src/dotty/tools/dotc/config/Printers.scala @@ -12,13 +12,13 @@ object Printers { val default: Printer = new Printer val core: Printer = noPrinter - val typr: Printer = new Printer + val typr: Printer = noPrinter val constr: Printer = noPrinter val checks: Printer = noPrinter val overload: Printer = noPrinter val implicits: Printer = noPrinter val implicitsDetailed: Printer = noPrinter - val subtyping: Printer = new Printer + val subtyping: Printer = noPrinter val unapp: Printer = noPrinter val completions = noPrinter val gadts = noPrinter diff --git a/src/dotty/tools/dotc/core/SymDenotations.scala b/src/dotty/tools/dotc/core/SymDenotations.scala index a2637f8f8..12a08a112 100644 --- a/src/dotty/tools/dotc/core/SymDenotations.scala +++ b/src/dotty/tools/dotc/core/SymDenotations.scala @@ -1346,10 +1346,11 @@ object SymDenotations { var basetp = baseTypeRefCache get tp if (basetp == null) { baseTypeRefCache.put(tp, NoPrefix) - basetp = computeBaseTypeRefOf(tp) match { + val computedBT = computeBaseTypeRefOf(tp) + basetp = computedBT match { case Uncachable(basetp) => baseTypeRefCache.remove(tp) - basetp + computedBT case basetp => baseTypeRefCache.put(tp, basetp) basetp diff --git a/src/dotty/tools/dotc/transform/PatternMatcher.scala b/src/dotty/tools/dotc/transform/PatternMatcher.scala index 1aebb7b3f..9fbf705b9 100644 --- a/src/dotty/tools/dotc/transform/PatternMatcher.scala +++ b/src/dotty/tools/dotc/transform/PatternMatcher.scala @@ -171,7 +171,7 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans var replaced = 0 val toAdapted = (from zip to) map { case (orig, nw) => - nw.ensureConforms(orig.info) + nw.ensureConforms(AndType(orig.info, nw.tpe)) } val identReplace: tpd.Tree => tpd.Tree = _ match { @@ -264,14 +264,17 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans val nextCases = (caseSyms.tail ::: List(matchFail)).map(ref(_).appliedToNone) val caseDefs = (cases zip caseSyms zip nextCases).foldRight[Tree](catchAllDefBody) { - case (((mkCase, sym), nextCase), acc) => - val show = acc.show + // dotty deviation + //case (((mkCase, sym), nextCase), acc) => + (x:(((Casegen => Tree), TermSymbol), Tree), acc: Tree) => x match { + + case ((mkCase, sym), nextCase) => val body = mkCase(new OptimizedCasegen(nextCase)).ensureConforms(restpe) val caseBody = DefDef(sym, _ => Block(List(acc), body)) Block(List(caseBody),ref(sym).appliedToNone) - } + }} // scrutSym == NoSymbol when generating an alternatives matcher @@ -501,9 +504,9 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans Block(Collections.map2(subPatBindersStored.toList, subPatRefsStored.toList)((bind, ref) => { // required in case original pattern had a more precise type // eg case s@"foo" => would be otherwise translated to s with type String instead of String("foo") - val refTpeWiden = ref.tpe.widen - val bindInfoWiden = bind.info.widen - val loc = bind.showFullName + def refTpeWiden = ref.tpe.widen + def bindInfoWiden = bind.info.widen + def loc = bind.showFullName if(!(ref.tpe <:< bind.info.widen)) { ctx.debuglog(s"here ${bind.showFullName} expected: ${bindInfoWiden.show} got: ${refTpeWiden.show}") } @@ -1869,6 +1872,7 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans if ((extractorMemberType(resultType, nme.isDefined) isRef defn.BooleanClass) && resultOfGet.exists) getUnapplySelectors(resultOfGet, args) else if (defn.isProductSubType(resultType)) productSelectorTypes(resultType) + else if (resultType =:= ctx.definitions.BooleanType) Nil else { ctx.error(i"invalid return type in Unapply node: $resultType") Nil diff --git a/src/dotty/tools/dotc/transform/TreeChecker.scala b/src/dotty/tools/dotc/transform/TreeChecker.scala index a30ff3296..6d6a88e36 100644 --- a/src/dotty/tools/dotc/transform/TreeChecker.scala +++ b/src/dotty/tools/dotc/transform/TreeChecker.scala @@ -90,8 +90,10 @@ class TreeChecker { ctxOwner.isTerm && (!(ctxOwner is Method | Lazy | Mutable) || (ctxOwner is Label)) && ownerMatches(symOwner, ctxOwner.owner) } - assert(ownerMatches(tree.symbol.owner, ctx.owner), - i"bad owner; ${tree.symbol} has owner ${tree.symbol.owner}, expected was ${ctx.owner}") + if(!ownerMatches(tree.symbol.owner, ctx.owner)) { + assert(ownerMatches(tree.symbol.owner, ctx.owner), + i"bad owner; ${tree.symbol} has owner ${tree.symbol.owner}, expected was ${ctx.owner}") + } } override def typedClassDef(cdef: untpd.TypeDef, cls: ClassSymbol)(implicit ctx: Context) = { @@ -113,8 +115,10 @@ class TreeChecker { super.typedStats(trees, exprOwner) } + override def adapt(tree: Tree, pt: Type, original: untpd.Tree = untpd.EmptyTree)(implicit ctx: Context) = { if (ctx.mode.isExpr) + if(!(tree.tpe <:< pt)) assert(tree.tpe <:< pt, s"error at ${sourcePos(tree.pos)}\n" + err.typeMismatchStr(tree.tpe, pt)) diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala index 2a9193250..336c52220 100644 --- a/test/dotc/tests.scala +++ b/test/dotc/tests.scala @@ -13,7 +13,9 @@ class tests extends CompilerTest { // "-Yshow-suppressed-errors", "-pagewidth", "160") - implicit val defaultOptions = noCheckOptions ++ List("-Ycheck:patternMatcher,literalize,capturedVars", "-Ystop-before:erasure", "-uniqid", "-explaintypes", "-verbose", "-Ylog:splitter", "-Xprompt") + implicit val defaultOptions = noCheckOptions ++ List("-Ycheck:patternMatcher,literalize,capturedVars", "-Ystop-before:erasure" + /*,"-uniqid", "-explaintypes", "-verbose", "-Ylog:splitter", "-Xprompt", "-YnoDoubleBindings"*/ + ) val twice = List("#runs", "2", "-YnoDoubleBindings", "-Ystop-before:terminal") val doErase = List("-Ystop-before:terminal") @@ -24,24 +26,24 @@ class tests extends CompilerTest { val dotcDir = "./src/dotty/" - /*@Test def pos_t2168_pat = compileFile(posDir, "t2168", doErase) + @Test def pos_t2168_pat = compileFile(posDir, "t2168", doErase) @Test def pos_erasure = compileFile(posDir, "erasure", doErase) @Test def pos_Coder() = compileFile(posDir, "Coder", doErase) @Test def pos_blockescapes() = compileFile(posDir, "blockescapes", doErase) @Test def pos_collections() = compileFile(posDir, "collections", doErase) @Test def pos_functions1() = compileFile(posDir, "functions1", doErase) @Test def pos_implicits1() = compileFile(posDir, "implicits1", doErase) - @Test def pos_inferred() = compileFile(posDir, "inferred", doErase)*/ - @Test def pos_Patterns() = compileFile(posDir, "Patterns")/* + @Test def pos_inferred() = compileFile(posDir, "inferred", doErase) + @Test def pos_Patterns() = compileFile(posDir, "Patterns") @Test def pos_selftypes() = compileFile(posDir, "selftypes", doErase) @Test def pos_varargs() = compileFile(posDir, "varargs", doErase) @Test def pos_opassign() = compileFile(posDir, "opassign", doErase) @Test def pos_typedapply() = compileFile(posDir, "typedapply", doErase) @Test def pos_nameddefaults() = compileFile(posDir, "nameddefaults", doErase) @Test def pos_desugar() = compileFile(posDir, "desugar", doErase) - @Test def pos_sigs() = compileFile(posDir, "sigs", doErase)*/ - //@Test def pos_typers() = compileFile(posDir, "typers", doErase) - /* + @Test def pos_sigs() = compileFile(posDir, "sigs", doErase) + @Test def pos_typers() = compileFile(posDir, "typers", doErase) + @Test def pos_typedidents() = compileFile(posDir, "typedIdents", doErase) @Test def pos_assignments() = compileFile(posDir, "assignments", doErase) @Test def pos_packageobject() = compileFile(posDir, "packageobject", doErase) @@ -95,18 +97,25 @@ class tests extends CompilerTest { @Test def neg_typetest = compileFile(negDir, "typetest", xerrors = 1) @Test def dotc = compileDir(dotcDir + "tools/dotc", twice) - //@Test def dotc_ast = compileDir(dotcDir + "tools/dotc/ast", twice) // doesn't stop + @Test def dotc_ast = compileDir(dotcDir + "tools/dotc/ast", twice) @Test def dotc_config = compileDir(dotcDir + "tools/dotc/config", twice) - @Test def dotc_core = compileDir(dotcDir + "tools/dotc/core", twice) // fails <notype> doesn't take parameters - @Test def dotc_core_pickling = compileDir(dotcDir + "tools/dotc/core/pickling", twice) - // [error] found : => Any(o141.get._1) - // [error] required: dotty.tools.dotc.core.Flags.FlagSet + @Test def dotc_core = compileDir(dotcDir + "tools/dotc/core", twice) + // @Test def dotc_core_pickling = compileDir(dotcDir + "tools/dotc/core/pickling", twice) + // @odesky, fails on assertion in TypeComparer:425 + @Test def dotc_core_transform = compileDir(dotcDir + "tools/dotc/core/transform", twice) - @Test def dotc_transform = compileDir(dotcDir + "tools/dotc/transform", twice) + + //@Test def dotc_transform = compileDir(dotcDir + "tools/dotc/transform", twice) + // @odersky, fails with datarace + @Test def dotc_parsing = compileDir(dotcDir + "tools/dotc/parsing", twice) - //@Test def dotc_printing = compileDir(dotcDir + "tools/dotc/printing", twice) + // @Test def dotc_printing = compileDir(dotcDir + "tools/dotc/printing", twice) + // @odersky, elimByName creates symbol with incorrect owner + @Test def dotc_reporting = compileDir(dotcDir + "tools/dotc/reporting", twice) - @Test def dotc_typer = compileDir(dotcDir + "tools/dotc/typer", twice) + // @Test def dotc_typer = compileDir(dotcDir + "tools/dotc/typer", twice) + // @odersky, elimByName creates symbol with incorrect owner + @Test def dotc_util = compileDir(dotcDir + "tools/dotc/util", twice) @Test def tools_io = compileDir(dotcDir + "tools/io", twice) @Test def tools = compileDir(dotcDir + "tools", twice) @@ -119,7 +128,6 @@ class tests extends CompilerTest { "-Xprompt", "#runs", "2")) - // fails <notype> doesn't take parameter @Test def testIssue_34 = compileArgs(Array( dotcDir + "tools/dotc/config/Properties.scala", @@ -127,6 +135,6 @@ class tests extends CompilerTest { //"-Ylog:frontend", "-Xprompt", "#runs", "2")) -*/ + //@Test def dotc_compilercommand = compileFile(dotcDir + "tools/dotc/config/", "CompilerCommand") } |