From 9e3b5c094b4e8b96d418d7498deab78dcb8bf150 Mon Sep 17 00:00:00 2001 From: Burak Emir Date: Mon, 25 Dec 2006 18:33:35 +0000 Subject: caseclasses implement Product directly caseclasses do not implement ProductN anymore --- .../scala/tools/nsc/ast/parser/Parsers.scala | 8 +----- .../scala/tools/nsc/ast/parser/TreeBuilder.scala | 12 ++------- .../scala/tools/nsc/backend/icode/Opcodes.scala | 4 +-- src/compiler/scala/tools/nsc/symtab/StdNames.scala | 6 ++--- .../tools/nsc/typechecker/SyntheticMethods.scala | 30 +++++++++++++++++----- 5 files changed, 32 insertions(+), 28 deletions(-) (limited to 'src/compiler') diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index 67cd870036..f40a759dc3 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -1903,13 +1903,7 @@ trait Parsers requires SyntaxAnalyzer { if (name != nme.ScalaObject.toTypeName) parents += scalaScalaObjectConstr if (mods.hasFlag(Flags.CASE)) { - if (!vparamss.isEmpty) { - val argtypes: List[Tree] = vparamss.head map (.tpt.duplicate) //remove type annotation and you will get an interesting error message!!! - checkSize("case class parameters", argtypes.length, definitions.MaxProductArity) - if (argtypes.length <= definitions.MaxProductArity) parents += productConstr(argtypes) - } else { - parents += productConstr(Nil) - } + parents += productConstr } val ps = parents.toList newLineOptWhenFollowedBy(LBRACE) diff --git a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala index 0aec97dcdd..3fe1bd28b8 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala @@ -27,16 +27,8 @@ abstract class TreeBuilder { scalaDot(nme.Unit.toTypeName) def scalaScalaObjectConstr: Tree = scalaDot(nme.ScalaObject.toTypeName) - - def productConstr(typeArgs: List[Tree]) = { - def repeatedToSeq(tpt: Tree) = tpt match { - case AppliedTypeTree(Select(qual, name), args) if (name == nme.REPEATED_PARAM_CLASS_NAME.toTypeName) => - AppliedTypeTree(Select(qual, nme.Seq.toTypeName), args) - case _ => - tpt - } - AppliedTypeTree(scalaDot(newTypeName("Product"+typeArgs.length)), typeArgs map repeatedToSeq) - } + def productConstr: Tree = + scalaDot(nme.Product.toTypeName) /** Convert all occurrences of (lower-case) variables in a pattern as follows: * x becomes x @ _ diff --git a/src/compiler/scala/tools/nsc/backend/icode/Opcodes.scala b/src/compiler/scala/tools/nsc/backend/icode/Opcodes.scala index d92106e52e..f6bed76977 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/Opcodes.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/Opcodes.scala @@ -335,9 +335,9 @@ trait Opcodes requires ICodes { * Stack: ...:size(int) * ->: ...:arrayref */ - case class CREATE_ARRAY(element: TypeKind) extends Instruction { + case class CREATE_ARRAY(elem: TypeKind) extends Instruction { /** Returns a string representation of this instruction */ - override def toString(): String ="CREATE_ARRAY "+element.toString(); + override def toString(): String ="CREATE_ARRAY "+elem.toString(); override def consumed = 1; override def produced = 1; diff --git a/src/compiler/scala/tools/nsc/symtab/StdNames.scala b/src/compiler/scala/tools/nsc/symtab/StdNames.scala index 29dc359287..fee88151f2 100644 --- a/src/compiler/scala/tools/nsc/symtab/StdNames.scala +++ b/src/compiler/scala/tools/nsc/symtab/StdNames.scala @@ -205,6 +205,7 @@ trait StdNames requires SymbolTable { val Object = newTermName("Object") val PartialFunction = newTermName("PartialFunction") val Predef = newTermName("Predef") + val Product = newTermName("Product") val ScalaObject = newTermName("ScalaObject") val ScalaRunTime = newTermName("ScalaRunTime") val Seq = newTermName("Seq") @@ -235,9 +236,8 @@ trait StdNames requires SymbolTable { val booleanValue = newTermName("booleanValue") val box = newTermName("box") val boxArray = newTermName("boxArray") - val caseArity = newTermName("caseArity") - val caseElement = newTermName("caseElement") - val caseName = newTermName("caseName") + val arity = newTermName("arity") + val element = newTermName("element") val checkCastability = newTermName("checkCastability") val classOf = newTermName("classOf") val coerce = newTermName("coerce") diff --git a/src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala b/src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala index 1a714600c0..b9f31edec7 100644 --- a/src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala +++ b/src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala @@ -12,7 +12,7 @@ import scala.collection.mutable.ListBuffer /**