aboutsummaryrefslogtreecommitdiff
path: root/src/dotty
diff options
context:
space:
mode:
authorDmitry Petrashko <dark@d-d.me>2016-02-20 17:38:01 +0100
committerDmitry Petrashko <dark@d-d.me>2016-02-20 17:38:01 +0100
commit6e535f7dc855d1587142f81bd9a53ea9ba3c7300 (patch)
treed40ac06c10a3d587ac9bac1fea7d6acde2339e75 /src/dotty
parent3a8fa8b4fc5ef486ffc2e9e85d454598bf15aa02 (diff)
parent1ebbba352eb61f5cc575455f61d496a54fcb7f95 (diff)
downloaddotty-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/dotty')
-rw-r--r--src/dotty/tools/dotc/transform/Getters.scala5
-rw-r--r--src/dotty/tools/dotc/typer/RefChecks.scala2
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)
}