diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-11-06 16:36:05 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-11-06 23:17:41 +1000 |
commit | 4a22b918ff938b7c627647e4ed5e74f539e62baa (patch) | |
tree | f3317a21b69d10e9d43562295a985eda73df8495 | |
parent | cd50464cd019bc6a489a72b98293c30b91352bab (diff) | |
download | scala-4a22b918ff938b7c627647e4ed5e74f539e62baa.tar.gz scala-4a22b918ff938b7c627647e4ed5e74f539e62baa.tar.bz2 scala-4a22b918ff938b7c627647e4ed5e74f539e62baa.zip |
SI-7019 Fix crasher with private[this] extension methods
When we move the body of value class methods to the corresponding
extension method, we typecheck a forward method that remains
in the class. In order to allow access, this commit weakens the
access of `private[local]` extension methods to `private`.
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala | 2 | ||||
-rw-r--r-- | test/files/run/t7019.scala | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala b/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala index 228c9da624..116047a2ad 100644 --- a/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala +++ b/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala @@ -208,7 +208,7 @@ abstract class ExtensionMethods extends Transform with TypingTransformers { def makeExtensionMethodSymbol = { val extensionName = extensionNames(origMeth).head.toTermName val extensionMeth = ( - companion.moduleClass.newMethod(extensionName, tree.pos.focus, origMeth.flags & ~OVERRIDE & ~PROTECTED | FINAL) + companion.moduleClass.newMethod(extensionName, tree.pos.focus, origMeth.flags & ~OVERRIDE & ~PROTECTED & ~LOCAL | FINAL) setAnnotations origMeth.annotations ) origMeth.removeAnnotation(TailrecClass) // it's on the extension method, now. diff --git a/test/files/run/t7019.scala b/test/files/run/t7019.scala new file mode 100644 index 0000000000..5dcc09d2b6 --- /dev/null +++ b/test/files/run/t7019.scala @@ -0,0 +1,10 @@ +final class Foo(val i: Int) extends AnyVal { + def foo() = go(i) + private[this] def go(i: Int) = i * 2 +} + +object Test { + def main(args: Array[String]): Unit = { + assert(new Foo(1).foo() == 2) + } +} |