From e2639e08b097aa9e5cb1f9a38ef37c6caec05874 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sun, 9 Apr 2017 17:01:15 +0200 Subject: Fix #2198: Don't widen module singletons Since module classes are a compiler-generated construct that's not directly visible to programmers, it seems better not to automatically widen a module singleton to its underlying class. Fixes #2198. --- compiler/src/dotty/tools/dotc/typer/Namer.scala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'compiler/src/dotty/tools/dotc/typer/Namer.scala') diff --git a/compiler/src/dotty/tools/dotc/typer/Namer.scala b/compiler/src/dotty/tools/dotc/typer/Namer.scala index ce2030c01..b436b36b0 100644 --- a/compiler/src/dotty/tools/dotc/typer/Namer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Namer.scala @@ -1043,9 +1043,11 @@ class Namer { typer: Typer => def isInline = sym.is(FinalOrInline, butNot = Method | Mutable) // Widen rhs type and approximate `|' but keep ConstantTypes if - // definition is inline (i.e. final in Scala2). + // definition is inline (i.e. final in Scala2) and keep module singleton types + // instead of widening to the underlying module class types. def widenRhs(tp: Type): Type = tp.widenTermRefExpr match { - case tp: ConstantType if isInline => tp + case ctp: ConstantType if isInline => ctp + case ref: TypeRef if ref.symbol.is(ModuleClass) => tp case _ => ctx.harmonizeUnion(tp.widen) } -- cgit v1.2.3