aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/Desugar.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-08-10 11:43:01 +0200
committerMartin Odersky <odersky@gmail.com>2013-08-10 12:10:10 +0200
commitd318cafbb92518a39c84539c0387c2c93815bb7a (patch)
tree0d822de681719bc4d01c91bda4e3064ea4c33e85 /src/dotty/tools/dotc/ast/Desugar.scala
parent2fffa023502cbaffe0e282495e18aefe2bff0d22 (diff)
downloaddotty-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.scala27
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 {