diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-09-02 11:11:11 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-09-02 12:02:57 -0700 |
commit | 66a316a4acdb2584ef9d85f15b950f12c94d909c (patch) | |
tree | fc3e1776261755c21ac1da479bae2120fe952b06 /src/compiler/scala/tools/nsc/typechecker/Namers.scala | |
parent | fcbb0e262051b36de8608b2fef24bf434adc6e99 (diff) | |
download | scala-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.scala | 10 |
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)) |