diff options
author | Martin Odersky <odersky@gmail.com> | 2013-08-10 11:43:01 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-08-10 12:10:10 +0200 |
commit | d318cafbb92518a39c84539c0387c2c93815bb7a (patch) | |
tree | 0d822de681719bc4d01c91bda4e3064ea4c33e85 /src/dotty/tools/dotc/ast/Desugar.scala | |
parent | 2fffa023502cbaffe0e282495e18aefe2bff0d22 (diff) | |
download | dotty-d318cafbb92518a39c84539c0387c2c93815bb7a.tar.gz dotty-d318cafbb92518a39c84539c0387c2c93815bb7a.tar.bz2 dotty-d318cafbb92518a39c84539c0387c2c93815bb7a.zip |
Added typing of all forms of type trees.
Diffstat (limited to 'src/dotty/tools/dotc/ast/Desugar.scala')
-rw-r--r-- | src/dotty/tools/dotc/ast/Desugar.scala | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index 5c87517d2..cc26033f8 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -19,16 +19,22 @@ 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 { - val lname = name.toLocalName - val field = cpy.ValDef(vdef, mods, lname, tpt, rhs) - val getter = cpy.DefDef(vdef, mods, name, Nil, Nil, tpt, Ident(lname)) - if (!(mods is Mutable)) Thicket(field, getter) + 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(field)) + val setterParam = makeSyntheticParameter(tpt = TypeTree(getter)) val setter = cpy.DefDef(vdef, - mods, name.getterToSetter, Nil, (setterParam :: Nil) :: Nil, EmptyTree, refOfDef(setterParam)) - Thicket(field, getter, setter) + mods | Accessor, name.getterToSetter, Nil, (setterParam :: Nil) :: Nil, + EmptyTree, refOfDef(setterParam)) + field :: getter :: setter :: Nil } } } @@ -545,6 +551,11 @@ object desugar { } }.withPos(tree.pos) + def refinedTypeToClass(tree: RefinedTypeTree)(implicit ctx: Context): TypeDef = { + val impl = Template(emptyConstructor, tree.tpt :: Nil, EmptyValDef, tree.refinements) + TypeDef(Modifiers(), tpnme.REFINE_CLASS, impl) + } + /** If tree is a variable pattern, return its name and type, otherwise return None. */ private object VarPattern { |