aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/Desugar.scala
diff options
context:
space:
mode:
authorodersky <odersky@gmail.com>2016-02-19 18:09:31 +0100
committerodersky <odersky@gmail.com>2016-02-19 18:09:31 +0100
commitdfa3ec849ff62f682092c450129e78d43829bde3 (patch)
treef6b812c0ae5995740bff6c04f0995b23db45d4dc /src/dotty/tools/dotc/ast/Desugar.scala
parent2217a4ec9ea563f01b07c852a3834d738cd6439d (diff)
parent6f382a51a522673de75d154da2632108e7a1016c (diff)
downloaddotty-dfa3ec849ff62f682092c450129e78d43829bde3.tar.gz
dotty-dfa3ec849ff62f682092c450129e78d43829bde3.tar.bz2
dotty-dfa3ec849ff62f682092c450129e78d43829bde3.zip
Merge pull request #1066 from dotty-staging/fix-#997
Fix #997
Diffstat (limited to 'src/dotty/tools/dotc/ast/Desugar.scala')
-rw-r--r--src/dotty/tools/dotc/ast/Desugar.scala12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala
index 340b4e671..31ebc4a7d 100644
--- a/src/dotty/tools/dotc/ast/Desugar.scala
+++ b/src/dotty/tools/dotc/ast/Desugar.scala
@@ -232,6 +232,7 @@ object desugar {
def classDef(cdef: TypeDef)(implicit ctx: Context): Tree = {
val TypeDef(name, impl @ Template(constr0, parents, self, _)) = cdef
val mods = cdef.mods
+ val accessFlags = (mods.flags & AccessFlags).toCommonFlags
val (constr1, defaultGetters) = defDef(constr0, isPrimaryConstructor = true) match {
case meth: DefDef => (meth, Nil)
@@ -312,6 +313,7 @@ object desugar {
case ValDef(_, tpt, _) => isRepeated(tpt)
case _ => false
})
+
val copyMeths =
if (mods.is(Abstract) || hasRepeatedParam) Nil // cannot have default arguments for repeated parameters, hence copy method is not issued
else {
@@ -346,7 +348,7 @@ object desugar {
moduleDef(
ModuleDef(
name.toTermName, Template(emptyConstructor, parentTpt :: Nil, EmptyValDef, defs))
- .withMods(synthetic))
+ .withFlags(Synthetic | accessFlags))
.withPos(cdef.pos).toList
// The companion object definitions, if a companion is needed, Nil otherwise.
@@ -371,7 +373,7 @@ object desugar {
if (mods is Abstract) Nil
else
DefDef(nme.apply, derivedTparams, derivedVparamss, TypeTree(), creatorExpr)
- .withMods(synthetic | (constr1.mods.flags & DefaultParameterized)) :: Nil
+ .withFlags(Synthetic | (constr1.mods.flags & DefaultParameterized)) :: Nil
val unapplyMeth = {
val unapplyParam = makeSyntheticParameter(tpt = classTypeRef)
val unapplyRHS = if (arity == 0) Literal(Constant(true)) else Ident(unapplyParam.name)
@@ -403,7 +405,7 @@ object desugar {
// implicit wrapper is typechecked in same scope as constructor, so
// we can reuse the constructor parameters; no derived params are needed.
DefDef(name.toTermName, constrTparams, constrVparamss, classTypeRef, creatorExpr)
- .withFlags(Synthetic | Implicit)
+ .withFlags(Synthetic | Implicit | accessFlags)
.withPos(cdef.pos) :: Nil
@@ -453,7 +455,7 @@ object desugar {
val clsName = name.moduleClassName
val clsRef = Ident(clsName)
val modul = ValDef(name, clsRef, New(clsRef, Nil))
- .withMods(mods | ModuleCreationFlags)
+ .withMods(mods | ModuleCreationFlags | mods.flags & AccessFlags)
.withPos(mdef.pos)
val ValDef(selfName, selfTpt, _) = tmpl.self
val selfMods = tmpl.self.mods
@@ -515,7 +517,7 @@ object desugar {
derivedValDef(named, tpt, matchExpr, mods)
case _ =>
val tmpName = ctx.freshName().toTermName
- val patFlags = PrivateLocal | Synthetic | (mods.flags & Lazy)
+ val patFlags = mods.flags & AccessFlags | Synthetic | (mods.flags & Lazy)
val firstDef = ValDef(tmpName, TypeTree(), matchExpr).withFlags(patFlags)
def selector(n: Int) = Select(Ident(tmpName), nme.selectorName(n))
val restDefs =