From 4819e75e8a57a78ed3bb7427d8d17c46710f9140 Mon Sep 17 00:00:00 2001 From: Dmitry Petrashko Date: Sat, 20 Feb 2016 14:22:20 +0100 Subject: [PATCH 1/6] Dotty: actually put dotty.jar into bootclasspath. Partest used to run tests with Dotty, but stopped at some moment. I guess this line may have been deleted at some merge conflict. --- project/Build.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Build.scala b/project/Build.scala index a4e6551d7eee..b7822907df28 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -177,7 +177,7 @@ object DottyBuild extends Build { path = file.getAbsolutePath } yield "-Xbootclasspath/p:" + path // dotty itself needs to be in the bootclasspath - val fullpath = ("-Xbootclasspath/a:" + bin) :: path.toList + val fullpath = ("-Xbootclasspath/p:" + "dotty.jar") :: ("-Xbootclasspath/a:" + bin) :: path.toList // System.err.println("BOOTPATH: " + fullpath) val travis_build = // propagate if this is a travis build From 2ef7813dcbe199601657501b96760764363d81b2 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sat, 20 Feb 2016 20:10:31 +0100 Subject: [PATCH 2/6] Add test file. --- tests/run/defaultGetters.scala | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tests/run/defaultGetters.scala diff --git a/tests/run/defaultGetters.scala b/tests/run/defaultGetters.scala new file mode 100644 index 000000000000..e1a07ff86d1e --- /dev/null +++ b/tests/run/defaultGetters.scala @@ -0,0 +1,14 @@ +object Test { + + def foo[T](x: T = "abc") = x + def bam(x: => Unit = ()) = x + def bar(x: => Unit = { println("default bar"); () }) = x + def baz(x: => String = { println("default baz"); "cde" }) = x + + def main(args: Array[String]): Unit = { + assert(foo() == "abc") + bam() + bar() + baz() + } +} From 163383a3e032cbea7d0b104b3975c655d8a39f48 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sat, 20 Feb 2016 21:23:26 +0100 Subject: [PATCH 3/6] Add check file --- tests/run/defaultGetters.check | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 tests/run/defaultGetters.check diff --git a/tests/run/defaultGetters.check b/tests/run/defaultGetters.check new file mode 100644 index 000000000000..343171e1dee2 --- /dev/null +++ b/tests/run/defaultGetters.check @@ -0,0 +1,2 @@ +default bar +default baz From b54bc22516b97f977aeffd4a2c5b2e2e3a3c727a Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sat, 20 Feb 2016 19:05:20 +0100 Subject: [PATCH 4/6] Set type of default getter method Copy type from default parameter to default getter method. --- src/dotty/tools/dotc/ast/Desugar.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index a9705e209774..3736d55c7b32 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -176,7 +176,7 @@ object desugar { name = meth.name.defaultGetterName(n), tparams = meth.tparams.map(tparam => dropContextBound(toDefParam(tparam))), vparamss = takeUpTo(normalizedVparamss, n), - tpt = TypeTree(), + tpt = vparam.tpt, rhs = vparam.rhs ).withMods(Modifiers(mods.flags & AccessFlags, mods.privateWithin)) val rest = defaultGetters(vparams :: vparamss1, n + 1) From 76b60c40330be30e0f4b015c9d96393ab4e0ae93 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sat, 20 Feb 2016 19:52:07 +0100 Subject: [PATCH 5/6] Strip byname when assigning default getter result type If the parameter is of type `=> T`, its default getter is a def with result type `T`. --- src/dotty/tools/dotc/ast/Desugar.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index 3736d55c7b32..0cc29e773974 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -171,12 +171,16 @@ object desugar { def defaultGetters(vparamss: List[List[ValDef]], n: Int): List[DefDef] = vparamss match { case (vparam :: vparams) :: vparamss1 => + def resultTpt = vparam.tpt match { + case ByNameTypeTree(result) => result + case tpt => tpt + } def defaultGetter: DefDef = DefDef( name = meth.name.defaultGetterName(n), tparams = meth.tparams.map(tparam => dropContextBound(toDefParam(tparam))), vparamss = takeUpTo(normalizedVparamss, n), - tpt = vparam.tpt, + tpt = resultTpt, rhs = vparam.rhs ).withMods(Modifiers(mods.flags & AccessFlags, mods.privateWithin)) val rest = defaultGetters(vparams :: vparamss1, n + 1) From 5a65c91f9fd5ccedae91c478005e729dfcd68ee3 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 28 Jul 2016 15:15:41 +0200 Subject: [PATCH 6/6] Revert b54bc22 "set type of default getter method" --- src/dotty/tools/dotc/ast/Desugar.scala | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index 0cc29e773974..a9705e209774 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -171,16 +171,12 @@ object desugar { def defaultGetters(vparamss: List[List[ValDef]], n: Int): List[DefDef] = vparamss match { case (vparam :: vparams) :: vparamss1 => - def resultTpt = vparam.tpt match { - case ByNameTypeTree(result) => result - case tpt => tpt - } def defaultGetter: DefDef = DefDef( name = meth.name.defaultGetterName(n), tparams = meth.tparams.map(tparam => dropContextBound(toDefParam(tparam))), vparamss = takeUpTo(normalizedVparamss, n), - tpt = resultTpt, + tpt = TypeTree(), rhs = vparam.rhs ).withMods(Modifiers(mods.flags & AccessFlags, mods.privateWithin)) val rest = defaultGetters(vparams :: vparamss1, n + 1)