summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Namers.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2015-09-02 11:11:11 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2015-09-02 12:02:57 -0700
commit66a316a4acdb2584ef9d85f15b950f12c94d909c (patch)
treefc3e1776261755c21ac1da479bae2120fe952b06 /src/compiler/scala/tools/nsc/typechecker/Namers.scala
parentfcbb0e262051b36de8608b2fef24bf434adc6e99 (diff)
downloadscala-66a316a4acdb2584ef9d85f15b950f12c94d909c.tar.gz
scala-66a316a4acdb2584ef9d85f15b950f12c94d909c.tar.bz2
scala-66a316a4acdb2584ef9d85f15b950f12c94d909c.zip
Streamline MethodSynthesis & Namers
Give Getter control over whether a setter is needed. For now, only mutable ValDefs entail setters. In the new trait encoding, a trait val will also receive a setter from the start. Similarly, distinguish whether to derive a field from deferredness of the val. (Later, fields will not be emitted for traits, deferred or not.)
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 4ad81b60ae..f54b330284 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -118,7 +118,7 @@ trait Namers extends MethodSynthesis {
// PRIVATE | LOCAL are fields generated for primary constructor arguments
// @PP: ...or fields declared as private[this]. PARAMACCESSOR marks constructor arguments.
// Neither gets accessors so the code is as far as I know still correct.
- def noEnterGetterSetter(vd: ValDef) = !vd.mods.isLazy && (
+ def deriveAccessors(vd: ValDef) = vd.mods.isLazy || !(
!owner.isClass
|| (vd.mods.isPrivateLocal && !vd.mods.isCaseAccessor)
|| (vd.name startsWith nme.OUTER)
@@ -126,7 +126,7 @@ trait Namers extends MethodSynthesis {
|| isEnumConstant(vd)
)
- def noFinishGetterSetter(vd: ValDef) = (
+ def deriveAccessorTrees(vd: ValDef) = !(
(vd.mods.isPrivateLocal && !vd.mods.isLazy) // all lazy vals need accessors, even private[this]
|| vd.symbol.isModuleVar
|| isEnumConstant(vd))
@@ -656,10 +656,8 @@ trait Namers extends MethodSynthesis {
}
def enterValDef(tree: ValDef) {
- if (noEnterGetterSetter(tree))
- assignAndEnterFinishedSymbol(tree)
- else
- enterGetterSetter(tree)
+ if (deriveAccessors(tree)) enterGetterSetter(tree)
+ else assignAndEnterFinishedSymbol(tree)
if (isEnumConstant(tree))
tree.symbol setInfo ConstantType(Constant(tree.symbol))