summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2016-03-25 18:41:48 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2016-03-26 22:55:19 -0700
commita17d247a8acea2daaddb39263ebf1dcf5673bcba (patch)
treea67078f7cef0cc5ab410711df0f06aa2a1c0523d /src/reflect
parent925b394dbf2fc8f9a0a6f64e374dc6ab5564ab37 (diff)
downloadscala-a17d247a8acea2daaddb39263ebf1dcf5673bcba.tar.gz
scala-a17d247a8acea2daaddb39263ebf1dcf5673bcba.tar.bz2
scala-a17d247a8acea2daaddb39263ebf1dcf5673bcba.zip
SAM conversion can be disabled using `-Xsource:2.11`
For completeness, `-Xsource:2.11 -Xexperimental` does enable it.
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/Definitions.scala4
-rw-r--r--src/reflect/scala/reflect/internal/settings/MutableSettings.scala1
-rw-r--r--src/reflect/scala/reflect/runtime/Settings.scala1
3 files changed, 5 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/Definitions.scala b/src/reflect/scala/reflect/internal/Definitions.scala
index 28f6afee39..72c56def80 100644
--- a/src/reflect/scala/reflect/internal/Definitions.scala
+++ b/src/reflect/scala/reflect/internal/Definitions.scala
@@ -829,13 +829,15 @@ trait Definitions extends api.StandardDefinitions {
(sym eq PartialFunctionClass) || (sym eq AbstractPartialFunctionClass)
}
+ private[this] val doSam = settings.isScala212 || (settings.isScala211 && settings.Xexperimental)
+
/** The single abstract method declared by type `tp` (or `NoSymbol` if it cannot be found).
*
* The method must be monomorphic and have exactly one parameter list.
* The class defining the method is a supertype of `tp` that
* has a public no-arg primary constructor.
*/
- def samOf(tp: Type): Symbol = {
+ def samOf(tp: Type): Symbol = if (!doSam) NoSymbol else {
// look at erased type because we (only) care about what ends up in bytecode
// (e.g., an alias type or intersection type is fine as long as the intersection dominator compiles to an interface)
val tpSym = erasure.javaErasure(tp).typeSymbol
diff --git a/src/reflect/scala/reflect/internal/settings/MutableSettings.scala b/src/reflect/scala/reflect/internal/settings/MutableSettings.scala
index 38893d8db3..e75b3dff3d 100644
--- a/src/reflect/scala/reflect/internal/settings/MutableSettings.scala
+++ b/src/reflect/scala/reflect/internal/settings/MutableSettings.scala
@@ -58,6 +58,7 @@ abstract class MutableSettings extends AbsSettings {
def maxClassfileName: IntSetting
def isScala211: Boolean
+ def isScala212: Boolean
}
object MutableSettings {
diff --git a/src/reflect/scala/reflect/runtime/Settings.scala b/src/reflect/scala/reflect/runtime/Settings.scala
index 27d574b1de..b1d7fde1b4 100644
--- a/src/reflect/scala/reflect/runtime/Settings.scala
+++ b/src/reflect/scala/reflect/runtime/Settings.scala
@@ -51,4 +51,5 @@ private[reflect] class Settings extends MutableSettings {
val Yrecursion = new IntSetting(0)
val maxClassfileName = new IntSetting(255)
def isScala211 = true
+ def isScala212 = true
}