diff options
author | Martin Odersky <odersky@gmail.com> | 2012-02-20 13:48:08 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2012-02-20 13:48:15 +0100 |
commit | 213ca741b0dc43712def6c84603d62b88eac7be7 (patch) | |
tree | 274c38e4f51d2b776be747af58d919a8410de6b4 /src | |
parent | 64aaef72504b46b9d40359eb0476ad8416f36023 (diff) | |
download | scala-213ca741b0dc43712def6c84603d62b88eac7be7.tar.gz scala-213ca741b0dc43712def6c84603d62b88eac7be7.tar.bz2 scala-213ca741b0dc43712def6c84603d62b88eac7be7.zip |
Removed one more stone the parser threw at me for daring to have new value classes in the Scala library.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/reflect/internal/Definitions.scala | 6 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | 4 |
2 files changed, 6 insertions, 4 deletions
diff --git a/src/compiler/scala/reflect/internal/Definitions.scala b/src/compiler/scala/reflect/internal/Definitions.scala index 79ad50e139..1b3ef2ed66 100644 --- a/src/compiler/scala/reflect/internal/Definitions.scala +++ b/src/compiler/scala/reflect/internal/Definitions.scala @@ -625,7 +625,7 @@ trait Definitions extends reflect.api.StandardDefinitions { def ClassType(arg: Type) = if (phase.erasedTypes || forMSIL) ClassClass.tpe else appliedType(ClassClass.typeConstructor, List(arg)) - + def vmClassType(arg: Type): Type = ClassType(arg) def vmSignature(sym: Symbol, info: Type): String = signature(info) // !!! @@ -721,7 +721,7 @@ trait Definitions extends reflect.api.StandardDefinitions { /** Remove all but one reference to class Object from a list of parents. */ def removeRedundantObjects(tps: List[Type]): List[Type] = tps match { case Nil => Nil - case x :: xs => + case x :: xs => if (x.typeSymbol == ObjectClass) x :: xs.filterNot(_.typeSymbol == ObjectClass) else @@ -954,7 +954,7 @@ trait Definitions extends reflect.api.StandardDefinitions { /** Is the symbol that of a parent which is added during parsing? */ lazy val isPossibleSyntheticParent = ProductClass.toSet[Symbol] + ProductRootClass + SerializableClass - private lazy val scalaValueClassesSet = ScalaValueClasses.toSet + lazy val scalaValueClassesSet = ScalaValueClasses.toSet private lazy val boxedValueClassesSet = boxedClass.values.toSet + BoxedUnitClass /** Is symbol a value class? */ diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index 383eaa283d..85be440c5a 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -249,6 +249,8 @@ self => final val InBlock = 1 final val InTemplate = 2 + lazy val ScalaValueClassNames: Set[Name] = definitions.scalaValueClassesSet map (_.name) + import nme.raw abstract class Parser extends ParserCommon { @@ -2750,7 +2752,7 @@ self => atPos(tstart0) { // [Martin to Paul: This needs to be refined. We should only include the 9 primitive classes, // not any other value classes that happen to be defined in the Scala package. - if (inScalaPackage && (name == tpnme.AnyVal || (parents0 exists isReferenceToAnyVal))) + if (inScalaRootPackage && (name == tpnme.AnyVal || (ScalaValueClassNames contains name))) Template(parents0, self, anyvalConstructor :: body) else Template(anyrefParents, self, constrMods, vparamss, argss, body, o2p(tstart)) |