diff options
author | Martin Odersky <odersky@gmail.com> | 2013-08-16 20:06:00 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-08-16 20:06:00 +0200 |
commit | 28464328fbbc2a7575d819dcb98be0c9f11f7cee (patch) | |
tree | d8a24ac1f89e02be501c8695638f1b89b1b9c7c5 /src/dotty/tools/dotc/ast/Desugar.scala | |
parent | a871c91aac6c46124b0ce9d118f6ba50496d9694 (diff) | |
download | dotty-28464328fbbc2a7575d819dcb98be0c9f11f7cee.tar.gz dotty-28464328fbbc2a7575d819dcb98be0c9f11f7cee.tar.bz2 dotty-28464328fbbc2a7575d819dcb98be0c9f11f7cee.zip |
Eliminating getter generation in namer/typer.
The idea is that getters shoul dbe generated later (probably during UnCurry). This is much better for handling modules,
and also obviates the need to have LocalNames. Getters can be generated as soon in the compilation pipeline as methoda always get a parameter list. That way, we can distinguihs getters from fields without playing any tricks with names.
Diffstat (limited to 'src/dotty/tools/dotc/ast/Desugar.scala')
-rw-r--r-- | src/dotty/tools/dotc/ast/Desugar.scala | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index 0e1de4b1b..68219bd7d 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -19,24 +19,13 @@ object desugar { def valDef(vdef: ValDef)(implicit ctx: Context): Tree = { val ValDef(mods, name, tpt, rhs) = vdef - if (!ctx.owner.isClass || (mods is Private)) vdef - else flatTree { - val (field, getterRhs) = - if (rhs.isEmpty) - (EmptyTree, EmptyTree) - else { - val lname = name.toLocalName - (cpy.ValDef(vdef, mods, lname, tpt, rhs), Ident(lname)) - } - val getter = cpy.DefDef(vdef, mods | Accessor, name, Nil, Nil, tpt, getterRhs) - if (!(mods is Mutable)) field :: getter :: Nil - else { - val setterParam = makeSyntheticParameter(tpt = TypeTree(getter)) - val setter = cpy.DefDef(vdef, - mods | Accessor, name.getterToSetter, Nil, (setterParam :: Nil) :: Nil, - EmptyTree, refOfDef(setterParam)) - field :: getter :: setter :: Nil - } + if (!ctx.owner.isClass || (mods is Private) || !(mods is Mutable)) vdef + else { + val setterParam = makeSyntheticParameter(tpt = TypeTree(vdef)) + val setter = cpy.DefDef(vdef, + mods | Accessor, name.setterName, Nil, (setterParam :: Nil) :: Nil, + EmptyTree, refOfDef(setterParam)) + Thicket(vdef, setter) } } @@ -233,7 +222,7 @@ object desugar { val clsSelf = cpy.ValDef(self, self.mods, self.name, SingletonTypeTree(Ident(name)), self.rhs) val clsTmpl = cpy.Template(tmpl, constr, parents, clsSelf, body) val cls = TypeDef(mods.toTypeFlags & AccessFlags | ModuleClassCreationFlags, clsName, clsTmpl) - Thicket(valDef(modul), cls) + Thicket(modul, cls) } def memberDef(tree: Tree)(implicit ctx: Context): Tree = tree match { |