summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-02-20 13:48:08 +0100
committerMartin Odersky <odersky@gmail.com>2012-02-20 13:48:15 +0100
commit213ca741b0dc43712def6c84603d62b88eac7be7 (patch)
tree274c38e4f51d2b776be747af58d919a8410de6b4 /src
parent64aaef72504b46b9d40359eb0476ad8416f36023 (diff)
downloadscala-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.scala6
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala4
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))