diff options
author | Paul Phillips <paulp@improving.org> | 2012-05-03 17:11:30 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-05-03 17:15:31 -0700 |
commit | 8bc8b83f0bd7daef62b41b4a0c87b4e9b7344284 (patch) | |
tree | 4f445792891bd6945ce8132b97a0231a8cf54392 /test/files/run/t4415.scala | |
parent | 58f6a1346093db2f407879246884d480ff8d7904 (diff) | |
download | scala-8bc8b83f0bd7daef62b41b4a0c87b4e9b7344284.tar.gz scala-8bc8b83f0bd7daef62b41b4a0c87b4e9b7344284.tar.bz2 scala-8bc8b83f0bd7daef62b41b4a0c87b4e9b7344284.zip |
Moved passing tests from pending to files.
Most are pattern matcher bugs fixed by virtpatmat. A few are reifier,
package object, or miscellaneous. I threw in an original test for
SI-2337, to go with those for SI-1697, SI-3705, SI-4415, and SI-1357,
all of which (in the interests of making sure this basket has all the
eggs) I am closing.
Diffstat (limited to 'test/files/run/t4415.scala')
-rw-r--r-- | test/files/run/t4415.scala | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/test/files/run/t4415.scala b/test/files/run/t4415.scala new file mode 100644 index 0000000000..f96031d650 --- /dev/null +++ b/test/files/run/t4415.scala @@ -0,0 +1,86 @@ +/** + * Demonstration of issue with Extractors. If lines 15/16 are not present, get at runtime: + * + * Exception in thread "main" java.lang.VerifyError: (class: ExtractorIssue$$, method: convert signature: (LTopProperty;)LMyProp;) Accessing value from uninitialized register 5 + * at ExtractorIssue.main(ExtractorIssue.scala) + * at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)] + * + * If lines 15/16 are present, the compiler crashes: + * + * fatal error (server aborted): not enough arguments for method body%3: (val p: MyProp[java.lang.String])MyProp[_33]. + * Unspecified value parameter p. + */ +object Test { + + def main(args: Array[String]) { + convert(new SubclassProperty) + } + + def convert(prop: TopProperty): MyProp[_] = { + prop match { + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //case SubclassSecondMatch(p) => p // if these lines are present, the compiler crashes. If commented, unsafe byte + //case SecondMatch(p) => p // byte code is generated, which causes a java.lang.VerifyError at runtime + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + case SubclassMatch(p) => p + case StandardMatch(p) => p + } + } +} + +class TopProperty + +class StandardProperty extends TopProperty +class SubclassProperty extends StandardProperty + +class SecondProperty extends TopProperty +class SubclassSecondProperty extends StandardProperty + +trait MyProp[T] +case class MyPropImpl[T] extends MyProp[T] + +object SubclassMatch { + + def unapply(prop: SubclassProperty) : Option[MyProp[String]] = { + Some(new MyPropImpl) + } + + def apply(prop: MyProp[String]) : SubclassProperty = { + new SubclassProperty() + } +} + +object StandardMatch { + + def unapply(prop: StandardProperty) : Option[MyProp[String]] = { + Some(new MyPropImpl) + } + + def apply(prop: MyProp[String]) : StandardProperty = { + new StandardProperty() + } +} + +object SubclassSecondMatch { + + def unapply(prop: SubclassSecondProperty) : Option[MyProp[BigInt]] = { + Some(new MyPropImpl) + } + + def apply(prop: MyProp[String]) : SubclassSecondProperty = { + new SubclassSecondProperty() + } +} + +object SecondMatch { + + def unapply(prop: SecondProperty) : Option[MyProp[BigInt]] = { + Some(new MyPropImpl) + } + + def apply(prop: MyProp[String]) : SecondProperty = { + new SecondProperty() + } +}
\ No newline at end of file |