diff options
author | Martin Odersky <odersky@gmail.com> | 2006-04-05 13:48:28 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-04-05 13:48:28 +0000 |
commit | 87185f98441fc73835c100cf4170e9d9bb31c328 (patch) | |
tree | 350dd0e290757e9c8503a38c43f06a60f17d7733 | |
parent | c05862755062fd2827c825f055ae3e7f7990aadd (diff) | |
download | scala-87185f98441fc73835c100cf4170e9d9bb31c328.tar.gz scala-87185f98441fc73835c100cf4170e9d9bb31c328.tar.bz2 scala-87185f98441fc73835c100cf4170e9d9bb31c328.zip |
fixed bug562 and bug563
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 8 | ||||
-rw-r--r-- | test/files/neg/bug562.check | 6 | ||||
-rw-r--r-- | test/files/neg/bug562.scala | 11 | ||||
-rw-r--r-- | test/files/neg/bug563.check | 9 | ||||
-rw-r--r-- | test/files/neg/bug563.scala | 7 |
5 files changed, 39 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index 41cfdf30bf..e88545992c 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -176,8 +176,12 @@ abstract class RefChecks extends InfoTransform { overrideError("needs `override' modifier"); } else if ((other hasFlag ABSOVERRIDE) && other.isIncompleteIn(clazz) && !(member hasFlag ABSOVERRIDE)) { overrideError("needs `abstract override' modifiers"); - } else if (other.isStable && !member.isStable) { // (1.4) - overrideError("needs to be an immutable value"); + } else if (other.isStable) { + if (!member.isStable) // (1.4) + overrideError("needs to be an immutable value") + else if (!(other hasFlag DEFERRED) && other.owner.isTrait && (member hasFlag OVERRIDE)) + overrideError("cannot override a value or variable definition in a trait " + + "\n (this is an implementation restriction)") } else { if (other.isAliasType) { if (!member.typeParams.isEmpty) // (1.5) diff --git a/test/files/neg/bug562.check b/test/files/neg/bug562.check new file mode 100644 index 0000000000..6654ee5ef9 --- /dev/null +++ b/test/files/neg/bug562.check @@ -0,0 +1,6 @@ +bug562.scala:10 error: error overriding value y in trait YYY of type => scala.Int; + value y cannot override a value or variable definition in a trait + (this is an implementation restriction) + override val y = super.y; + ^ +one error found diff --git a/test/files/neg/bug562.scala b/test/files/neg/bug562.scala new file mode 100644 index 0000000000..c4a6e61742 --- /dev/null +++ b/test/files/neg/bug562.scala @@ -0,0 +1,11 @@ +package test; + +abstract class XXX; + +trait YYY extends XXX { + val y = 10; +} + +class Foo extends XXX with YYY { + override val y = super.y; +} diff --git a/test/files/neg/bug563.check b/test/files/neg/bug563.check new file mode 100644 index 0000000000..0f2eac240e --- /dev/null +++ b/test/files/neg/bug563.check @@ -0,0 +1,9 @@ +bug563.scala:6 error: missing parameter type + map(n,ptr => new Cell(ptr.elem)); + ^ +bug563.scala:6 error: no type parameters for method map: (scala.List[A],(A) => R)scala.List[R] exist so that it can be applied to arguments (scala.List[scala.Cell[scala.Int]],(<error>) => <error>) + --- because --- +result type scala.List[R] is incompatible with expected type scala.Unit + map(n,ptr => new Cell(ptr.elem)); + ^ +two errors found diff --git a/test/files/neg/bug563.scala b/test/files/neg/bug563.scala new file mode 100644 index 0000000000..d559226bdb --- /dev/null +++ b/test/files/neg/bug563.scala @@ -0,0 +1,7 @@ +object Test { + def map[A,R](a : List[A], f : A => R) : List[R] = a.map(f); + + def split(sn : Iterable[List[Cell[int]]]) : unit = + for (val n <- sn) + map(n,ptr => new Cell(ptr.elem)); +} |