summaryrefslogtreecommitdiff
path: root/bincompat-forward.whitelist.conf
diff options
context:
space:
mode:
authorJames Iry <jamesiry@gmail.com>2013-03-08 06:33:12 -0800
committerJames Iry <jamesiry@gmail.com>2013-03-14 14:26:41 -0700
commite78896f0ab7240e9bdcd98c51cbf6bc0ea277950 (patch)
tree4a269b3fd2b99745790e87d853ba972511eb7ca6 /bincompat-forward.whitelist.conf
parentb7b4f877326acd6a8a24ff60fa1638cc18143c45 (diff)
downloadscala-e78896f0ab7240e9bdcd98c51cbf6bc0ea277950.tar.gz
scala-e78896f0ab7240e9bdcd98c51cbf6bc0ea277950.tar.bz2
scala-e78896f0ab7240e9bdcd98c51cbf6bc0ea277950.zip
Read version 51 (JDK 7) class files.
This commit makes the ClassFileReader/ICodeReader parse class files from JDK 7 (class file version 51). It does that by skipping over the method handle related entries in the constant pool and by doing some dummy processing on invoke dynamic instructions. The inliner is updated to not try to inline a method with an invoke dynamic instruction. A place holder INVOKE_DYNAMIC instruction is added to ICode but it is designed to create an error if there's ever any attempt to analyze it. Because the inliner is the only phase that ever tries to analyze ICode instructions not generated from Scala source and because Scala source will never emit an INVOKE_DYNAMIC, the place holder INVOKE_DYNAMIC should never cause any errors. A test is included that generates a class file with INVOKE_DYNAMIC and then compiles Scala code that depends on it.
Diffstat (limited to 'bincompat-forward.whitelist.conf')
-rw-r--r--bincompat-forward.whitelist.conf16
1 files changed, 16 insertions, 0 deletions
diff --git a/bincompat-forward.whitelist.conf b/bincompat-forward.whitelist.conf
index 529fab1e14..76e189653b 100644
--- a/bincompat-forward.whitelist.conf
+++ b/bincompat-forward.whitelist.conf
@@ -354,6 +354,22 @@ filter {
{
matchName="scala.reflect.internal.StdNames#TermNames.SelectFromTypeTree"
problemName=MissingMethodProblem
+ },
+ {
+ matchName="scala.reflect.internal.ClassfileConstants.CONSTANT_INVOKEDYNAMIC"
+ problemName=MissingMethodProblem
+ },
+ {
+ matchName="scala.reflect.internal.ClassfileConstants.invokedynamic"
+ problemName=MissingMethodProblem
+ },
+ {
+ matchName="scala.reflect.internal.ClassfileConstants.CONSTANT_METHODHANDLE"
+ problemName=MissingMethodProblem
+ },
+ {
+ matchName="scala.reflect.internal.ClassfileConstants.CONSTANT_METHODTYPE"
+ problemName=MissingMethodProblem
}
]
}