summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJosh Suereth <Joshua.Suereth@gmail.com>2012-09-17 04:54:19 -0700
committerJosh Suereth <Joshua.Suereth@gmail.com>2012-09-17 04:54:19 -0700
commit9bcb335b8a08edb5cd88408e3f5be3fee6a7ca88 (patch)
tree8d126e08b443916f61614f78c477365c080d2ee8 /src
parent9fb6875e2163f1b62863e28e94415463aef754f7 (diff)
parent344215b92d22d2101067d6abd8172ac791a30f09 (diff)
downloadscala-9bcb335b8a08edb5cd88408e3f5be3fee6a7ca88.tar.gz
scala-9bcb335b8a08edb5cd88408e3f5be3fee6a7ca88.tar.bz2
scala-9bcb335b8a08edb5cd88408e3f5be3fee6a7ca88.zip
Merge pull request #1318 from odersky/ticket/6336
SI-6336 Disallows value types in structuralal refinements
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 2926678281..ce1c6089fb 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -1984,18 +1984,21 @@ trait Typers extends Modes with Adaptations with Tags {
case PolyType(_, restpe) => restpe
case _ => NoType
}
-
+ def failStruct(what: String) =
+ fail(s"Parameter type in structural refinement may not refer to $what")
for (paramType <- tp.paramTypes) {
val sym = paramType.typeSymbol
if (sym.isAbstractType) {
if (!sym.hasTransOwner(meth.owner))
- fail("Parameter type in structural refinement may not refer to an abstract type defined outside that refinement")
+ failStruct("an abstract type defined outside that refinement")
else if (!sym.hasTransOwner(meth))
- fail("Parameter type in structural refinement may not refer to a type member of that refinement")
+ failStruct("a type member of that refinement")
}
+ if (sym.isDerivedValueClass)
+ failStruct("a user-defined value class")
if (paramType.isInstanceOf[ThisType] && sym == meth.owner)
- fail("Parameter type in structural refinement may not refer to the type of that refinement (self type)")
+ failStruct("the type of that refinement (self type)")
}
}
def typedUseCase(useCase: UseCase) {