From 2d908c792fcf4287b4cb493f0e51dfbdb106cf69 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sun, 25 Sep 2016 12:31:13 +0200 Subject: [PATCH 1/5] Drop Pair Drop tree node class 'Pair'. It was used only in imports, where it can easily be replaced by Thicket. The envisaged use for generic pairs is almost sure better modelled by a "Pair" class in Dotty's standard library. --- src/dotty/tools/dotc/ast/Desugar.scala | 35 +++++-------------- src/dotty/tools/dotc/ast/Trees.scala | 20 +---------- src/dotty/tools/dotc/ast/tpd.scala | 11 ------ src/dotty/tools/dotc/ast/untpd.scala | 1 - .../tools/dotc/core/tasty/TastyFormat.scala | 5 ++- .../tools/dotc/core/tasty/TreePickler.scala | 5 +-- .../tools/dotc/core/tasty/TreeUnpickler.scala | 4 +-- .../core/unpickleScala2/Scala2Unpickler.scala | 2 +- src/dotty/tools/dotc/parsing/Parsers.scala | 2 +- .../tools/dotc/printing/RefinedPrinter.scala | 4 +-- .../tools/dotc/sbt/ExtractDependencies.scala | 2 +- .../tools/dotc/transform/TreeChecker.scala | 3 -- .../tools/dotc/transform/TreeTransform.scala | 29 --------------- src/dotty/tools/dotc/typer/ImportInfo.scala | 6 ++-- src/dotty/tools/dotc/typer/TypeAssigner.scala | 3 -- src/dotty/tools/dotc/typer/Typer.scala | 33 +++++++---------- 16 files changed, 34 insertions(+), 131 deletions(-) diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index 1bfbcdbeb5c8..edd6da5c90b8 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -11,10 +11,6 @@ import collection.mutable.ListBuffer import util.Attachment object desugar { - - /** Are we using the new unboxed pair scheme? */ - private final val unboxedPairs = false - import untpd._ /** Tags a .withFilter call generated by desugaring a for expression. @@ -923,25 +919,15 @@ object desugar { case Parens(t) => t case Tuple(ts) => - if (unboxedPairs) { - def PairTypeTree(l: Tree, r: Tree) = - AppliedTypeTree(ref(defn.PairType), l :: r :: Nil) - if (ctx.mode is Mode.Type) ts.reduceRight(PairTypeTree) - else if (ts.isEmpty) unitLiteral - else ts.reduceRight(Pair(_, _)) - } - else { - val arity = ts.length - def tupleTypeRef = defn.TupleType(arity) - if (arity > Definitions.MaxTupleArity) { - ctx.error(s"tuple too long (max allowed: ${Definitions.MaxTupleArity})", tree.pos) - unitLiteral - } - else if (arity == 1) ts.head - else if (ctx.mode is Mode.Type) AppliedTypeTree(ref(tupleTypeRef), ts) - else if (arity == 0) unitLiteral - else Apply(ref(tupleTypeRef.classSymbol.companionModule.valRef), ts) - } + val arity = ts.length + def tupleTypeRef = defn.TupleType(arity) + if (arity > Definitions.MaxTupleArity) { + ctx.error(s"tuple too long (max allowed: ${Definitions.MaxTupleArity})", tree.pos) + unitLiteral + } else if (arity == 1) ts.head + else if (ctx.mode is Mode.Type) AppliedTypeTree(ref(tupleTypeRef), ts) + else if (arity == 0) unitLiteral + else Apply(ref(tupleTypeRef.classSymbol.companionModule.valRef), ts) case WhileDo(cond, body) => // {