aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-12-09 12:45:21 +0100
committerMartin Odersky <odersky@gmail.com>2013-12-09 12:45:21 +0100
commitdc028e709fc36791526ff69d47280c91d1dc36d1 (patch)
tree768bd52ea85b9b40e5ac7d0c314abee79529f003 /src
parent190f44d0c9b91df24a227878b0c9a1f3d14c20a1 (diff)
downloaddotty-dc028e709fc36791526ff69d47280c91d1dc36d1.tar.gz
dotty-dc028e709fc36791526ff69d47280c91d1dc36d1.tar.bz2
dotty-dc028e709fc36791526ff69d47280c91d1dc36d1.zip
Added desugaring for & and | types.
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/ast/Desugar.scala4
-rw-r--r--src/dotty/tools/dotc/printing/RefinedPrinter.scala2
-rw-r--r--src/dotty/tools/dotc/typer/Typer.scala2
3 files changed, 6 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala
index da8c892c2..7692d5a95 100644
--- a/src/dotty/tools/dotc/ast/Desugar.scala
+++ b/src/dotty/tools/dotc/ast/Desugar.scala
@@ -627,7 +627,9 @@ object desugar {
Apply(Select(Apply(Ident(nme.StringContext), strs), id), elems)
case InfixOp(l, op, r) =>
if (ctx.mode is Mode.Type)
- AppliedTypeTree(Ident(op), l :: r :: Nil) // op[l, r]
+ if (op == tpnme.raw.AMP) AndTypeTree(l, r) // l & r
+ else if (op == tpnme.raw.BAR) OrTypeTree(l, r) // l | r
+ else AppliedTypeTree(Ident(op), l :: r :: Nil) // op[l, r]
else if (ctx.mode is Mode.Pattern)
Apply(Ident(op), l :: r :: Nil) // op(l, r)
else // l.op(r), or val x = r; l.op(x), plus handle named args specially
diff --git a/src/dotty/tools/dotc/printing/RefinedPrinter.scala b/src/dotty/tools/dotc/printing/RefinedPrinter.scala
index 5328c1d19..050b27587 100644
--- a/src/dotty/tools/dotc/printing/RefinedPrinter.scala
+++ b/src/dotty/tools/dotc/printing/RefinedPrinter.scala
@@ -260,6 +260,8 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
modText(mods, if (mods is Trait) "trait" else "class") ~~ toText(name) ~ toText(impl)
case rhs: TypeBoundsTree =>
typeDefText(toText(rhs))
+ case rhs: TypeTree =>
+ typeDefText(toText(rhs))
case _ =>
typeDefText(optText(rhs)(" = " ~ _))
}
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala
index 24599f7c8..4c44fbafe 100644
--- a/src/dotty/tools/dotc/typer/Typer.scala
+++ b/src/dotty/tools/dotc/typer/Typer.scala
@@ -740,7 +740,7 @@ class Typer extends Namer with Applications with Implicits {
def typedTypeDef(tdef: untpd.TypeDef, sym: Symbol)(implicit ctx: Context): TypeDef = track("typedTypeDef") {
val TypeDef(mods, name, rhs) = tdef
val mods1 = typedModifiers(mods)
- //val rhs1 = typedType(rhs)
+ val _ = typedType(rhs) // unused, typecheck only to remove from typedTree
cpy.TypeDef(tdef, mods1, name, TypeTree(sym.info)).withType(sym.typeRef)
}