aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Namer.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-01-17 18:33:16 +0100
committerMartin Odersky <odersky@gmail.com>2014-01-17 18:33:16 +0100
commitba1c6fa888488774a7e510ee09ebb80ff0ce2a3c (patch)
tree61767d02414959c98c0b0a925e4515fcb7da6069 /src/dotty/tools/dotc/typer/Namer.scala
parent8b0eb728edffac611470bd1db0bc2f7a9cec2ce0 (diff)
downloaddotty-ba1c6fa888488774a7e510ee09ebb80ff0ce2a3c.tar.gz
dotty-ba1c6fa888488774a7e510ee09ebb80ff0ce2a3c.tar.bz2
dotty-ba1c6fa888488774a7e510ee09ebb80ff0ce2a3c.zip
Fix problem with duplicate companion objects for classes with default parameters in constructors.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Namer.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Namer.scala21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/dotty/tools/dotc/typer/Namer.scala b/src/dotty/tools/dotc/typer/Namer.scala
index 2433c49b5..952c7997e 100644
--- a/src/dotty/tools/dotc/typer/Namer.scala
+++ b/src/dotty/tools/dotc/typer/Namer.scala
@@ -298,19 +298,22 @@ class Namer { typer: Typer =>
* and the real companion, if both exist.
*/
def mergeCompanionDefs() = {
- val caseClassDef = mutable.Map[TypeName, TypeDef]()
+ val classDef = mutable.Map[TypeName, TypeDef]()
for (cdef @ TypeDef(mods, name, _) <- stats)
- if (mods is Case) caseClassDef(name) = cdef
+ if (cdef.isClassDef) classDef(name) = cdef
for (mdef @ ModuleDef(_, name, _) <- stats)
- caseClassDef get name.toTypeName match {
+ classDef get name.toTypeName match {
case Some(cdef) =>
val Thicket(vdef :: (mcls @ TypeDef(_, _, impl: Template)) :: Nil) = expandedTree(mdef)
- val Thicket(cls :: mval :: TypeDef(_, _, compimpl: Template) :: crest) = expandedTree(cdef)
- val mcls1 = cpy.TypeDef(mcls, mcls.mods, mcls.name,
- cpy.Template(impl, impl.constr, impl.parents, impl.self,
- compimpl.body ++ impl.body))
- expandedTree(mdef) = Thicket(vdef :: mcls1 :: Nil)
- expandedTree(cdef) = Thicket(cls :: crest)
+ expandedTree(cdef) match {
+ case Thicket(cls :: mval :: TypeDef(_, _, compimpl: Template) :: crest) =>
+ val mcls1 = cpy.TypeDef(mcls, mcls.mods, mcls.name,
+ cpy.Template(impl, impl.constr, impl.parents, impl.self,
+ compimpl.body ++ impl.body))
+ expandedTree(mdef) = Thicket(vdef :: mcls1 :: Nil)
+ expandedTree(cdef) = Thicket(cls :: crest)
+ case _ =>
+ }
case none =>
}
}