diff options
author | Dmitry Petrashko <dark@d-d.me> | 2016-02-20 17:38:01 +0100 |
---|---|---|
committer | Dmitry Petrashko <dark@d-d.me> | 2016-02-20 17:38:01 +0100 |
commit | 6e535f7dc855d1587142f81bd9a53ea9ba3c7300 (patch) | |
tree | d40ac06c10a3d587ac9bac1fea7d6acde2339e75 /src | |
parent | 3a8fa8b4fc5ef486ffc2e9e85d454598bf15aa02 (diff) | |
parent | 1ebbba352eb61f5cc575455f61d496a54fcb7f95 (diff) | |
download | dotty-6e535f7dc855d1587142f81bd9a53ea9ba3c7300.tar.gz dotty-6e535f7dc855d1587142f81bd9a53ea9ba3c7300.tar.bz2 dotty-6e535f7dc855d1587142f81bd9a53ea9ba3c7300.zip |
Merge pull request #1112 from dotty-staging/value-classes-private-this-param
Value classes: add support for private[this] parameter
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/transform/Getters.scala | 5 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/RefChecks.scala | 2 |
2 files changed, 3 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/transform/Getters.scala b/src/dotty/tools/dotc/transform/Getters.scala index 765791822..882e42d2f 100644 --- a/src/dotty/tools/dotc/transform/Getters.scala +++ b/src/dotty/tools/dotc/transform/Getters.scala @@ -12,6 +12,7 @@ import Constants._ import TreeTransforms._ import Flags._ import Decorators._ +import ValueClasses._ /** Performs the following rewritings for fields of a class: * @@ -34,7 +35,7 @@ import Decorators._ * * Omitted from the rewritings are * - * - private[this] fields in non-trait classes + * - private[this] fields in classes (excluding traits, value classes) * - fields generated for static modules (TODO: needed?) * - parameters, static fields, and fields coming from Java * @@ -53,7 +54,7 @@ class Getters extends MiniPhaseTransform with SymTransformer { thisTransform => override def transformSym(d: SymDenotation)(implicit ctx: Context): SymDenotation = { def noGetterNeeded = d.is(NoGetterNeeded) || - d.initial.asInstanceOf[SymDenotation].is(PrivateLocal) && !d.owner.is(Trait) && !d.is(Flags.Lazy) || + d.initial.asInstanceOf[SymDenotation].is(PrivateLocal) && !d.owner.is(Trait) && !isDerivedValueClass(d.owner) && !d.is(Flags.Lazy) || d.is(Module) && d.isStatic || d.isSelfSym if (d.isTerm && (d.is(Lazy) || d.owner.isClass) && d.info.isValueType && !noGetterNeeded) { diff --git a/src/dotty/tools/dotc/typer/RefChecks.scala b/src/dotty/tools/dotc/typer/RefChecks.scala index bb411c6b5..afbb43faf 100644 --- a/src/dotty/tools/dotc/typer/RefChecks.scala +++ b/src/dotty/tools/dotc/typer/RefChecks.scala @@ -715,8 +715,6 @@ object RefChecks { case List(param) => if (param.is(Mutable)) ctx.error("value class parameter must not be a var", param.pos) - if (param.is(PrivateLocal)) - ctx.error("value class parameter must not be private[this]", param.pos) case _ => ctx.error("value class needs to have exactly one val parameter", clazz.pos) } |