aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/transform/ExpandSAMs.scala3
-rw-r--r--tests/run/non-jvm-sam-non-apply.check1
-rw-r--r--tests/run/non-jvm-sam-non-apply.scala11
3 files changed, 14 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/transform/ExpandSAMs.scala b/src/dotty/tools/dotc/transform/ExpandSAMs.scala
index 5de778fab..fd556b572 100644
--- a/src/dotty/tools/dotc/transform/ExpandSAMs.scala
+++ b/src/dotty/tools/dotc/transform/ExpandSAMs.scala
@@ -42,8 +42,9 @@ class ExpandSAMs extends MiniPhaseTransform { thisTransformer =>
case tpe @ SAMType(_) if isJvmSam(tpe.classSymbol.asClass) =>
tree
case tpe =>
+ val Seq(samDenot) = tpe.abstractTermMembers.filter(!_.symbol.is(SuperAccessor))
cpy.Block(tree)(stats,
- AnonClass(tpe :: Nil, fn.symbol.asTerm :: Nil, nme.apply :: Nil))
+ AnonClass(tpe :: Nil, fn.symbol.asTerm :: Nil, samDenot.symbol.asTerm.name :: Nil))
}
case _ =>
tree
diff --git a/tests/run/non-jvm-sam-non-apply.check b/tests/run/non-jvm-sam-non-apply.check
new file mode 100644
index 000000000..b8626c4cf
--- /dev/null
+++ b/tests/run/non-jvm-sam-non-apply.check
@@ -0,0 +1 @@
+4
diff --git a/tests/run/non-jvm-sam-non-apply.scala b/tests/run/non-jvm-sam-non-apply.scala
new file mode 100644
index 000000000..e3bfac928
--- /dev/null
+++ b/tests/run/non-jvm-sam-non-apply.scala
@@ -0,0 +1,11 @@
+// shouldn't result in an abstract method error when run
+abstract class NonJVMSam {
+ def foo(x: Int): Int
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val f: NonJVMSam = x => x + 1
+ println(f.foo(3))
+ }
+}