aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--project/Build.scala2
-rw-r--r--src/dotty/tools/dotc/config/Printers.scala4
-rw-r--r--src/dotty/tools/dotc/core/SymDenotations.scala5
-rw-r--r--src/dotty/tools/dotc/transform/PatternMatcher.scala18
-rw-r--r--src/dotty/tools/dotc/transform/TreeChecker.scala8
-rw-r--r--test/dotc/tests.scala42
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")
}