From 96c6d38649d0f1605a31f542a53509d57af79709 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Thu, 16 Mar 2017 19:34:39 +0100 Subject: New flag -Ydebug-alias to never follow aliases when printing types --- compiler/src/dotty/tools/dotc/config/ScalaSettings.scala | 1 + compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'compiler/src/dotty') diff --git a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala index 40e2b083b..318295751 100644 --- a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala +++ b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala @@ -64,6 +64,7 @@ class ScalaSettings extends Settings.SettingGroup { val Ycheck = PhasesSetting("-Ycheck", "Check the tree at the end of") val YcheckMods = BooleanSetting("-Ycheck-mods", "Check that symbols and their defining trees have modifiers in sync") val debug = BooleanSetting("-Ydebug", "Increase the quantity of debugging output.") + val debugAlias = BooleanSetting("-Ydebug-alias", "Never follow alias when printing types") val debugNames = BooleanSetting("-YdebugNames", "Show name-space indicators when printing names") val debugTrace = BooleanSetting("-Ydebug-trace", "Trace core operations") val debugFlags = BooleanSetting("-Ydebug-flags", "Print all flags of definitions") diff --git a/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala b/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala index 3d952f425..8a33472b8 100644 --- a/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala +++ b/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala @@ -130,7 +130,7 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) { if (defn.isTupleClass(cls)) return toTextTuple(args) return (toTextLocal(tycon) ~ "[" ~ Text(args map argText, ", ") ~ "]").close case tp: TypeRef => - val hideType = tp.symbol is AliasPreferred + val hideType = !ctx.settings.debugAlias.value && (tp.symbol is AliasPreferred) if (hideType && !ctx.phase.erasedTypes && !tp.symbol.isCompleting) { tp.info match { case TypeAlias(alias) => return toText(alias) -- cgit v1.2.3 From 675892a4aaa77a4e71faa6057b4a0a059acb408d Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Thu, 16 Mar 2017 19:36:38 +0100 Subject: Reduce type lambdas even if variance changes Previously, the added testcase failed with (when running with -Ydebug-alias): 2 | def foo = Seq(a) | ^ |covariant type A occurs in invariant position in type => Seq.CC[Cov.this.A] of method foo Because the type parameter of `CC` is invariant. Of course, this is fine because `CC[A]` can be reduced to `Seq[A]`, but before this commit, `TypeApplications#appliedTo` used to disallow reductions that replaced an invariant type parameter with a variant one. I believe that for type inference, only preserving the arity is important, so I removed this restriction. --- compiler/src/dotty/tools/dotc/core/TypeApplications.scala | 7 ++++--- tests/pos/hk-reduce-variance.scala | 3 +++ 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 tests/pos/hk-reduce-variance.scala (limited to 'compiler/src/dotty') diff --git a/compiler/src/dotty/tools/dotc/core/TypeApplications.scala b/compiler/src/dotty/tools/dotc/core/TypeApplications.scala index c713cd542..ba3e6a461 100644 --- a/compiler/src/dotty/tools/dotc/core/TypeApplications.scala +++ b/compiler/src/dotty/tools/dotc/core/TypeApplications.scala @@ -1,4 +1,5 @@ -package dotty.tools.dotc +package dotty.tools +package dotc package core import Types._ @@ -412,8 +413,8 @@ class TypeApplications(val self: Type) extends AnyVal { val followAlias = Config.simplifyApplications && { dealiased.resType match { case AppliedType(tyconBody, _) => - variancesConform(typParams, tyconBody.typeParams) - // Reducing is safe for type inference, as kind of type constructor does not change + sameLength(dealiased.typeParams, tyconBody.typeParams) + // Reducing is safe for type inference, as kind arity of type constructor does not change case _ => false } } diff --git a/tests/pos/hk-reduce-variance.scala b/tests/pos/hk-reduce-variance.scala new file mode 100644 index 000000000..c69777992 --- /dev/null +++ b/tests/pos/hk-reduce-variance.scala @@ -0,0 +1,3 @@ +class Cov[+A](a: A) { + def foo = Seq(a) +} -- cgit v1.2.3