summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-05-02 17:42:10 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-05-02 17:42:10 +0000
commit5f75746b6653cd666c007fb59ed3ac847c6fd85f (patch)
tree932f0697965a74bbce0043f3a52d714af1ce3db6 /src
parenta46601aa3e998f86ba015c338ac4a278267e13b0 (diff)
downloadscala-5f75746b6653cd666c007fb59ed3ac847c6fd85f.tar.gz
scala-5f75746b6653cd666c007fb59ed3ac847c6fd85f.tar.bz2
scala-5f75746b6653cd666c007fb59ed3ac847c6fd85f.zip
Fixed private member access, closes #3380.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
index e867c46900..96cc2738b4 100644
--- a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
+++ b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
@@ -1205,7 +1205,8 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
// replace value and type parameters of the old method with the new ones
val symSubstituter = new ImplementationAdapter(
parameters(source).flatten ::: origtparams,
- vparamss1.flatten.map(_.symbol) ::: newtparams)
+ vparamss1.flatten.map(_.symbol) ::: newtparams,
+ symbol.enclClass)
val tmp = symSubstituter(body(source).duplicate)
tpt.tpe = tpt.tpe.substSym(oldtparams, newtparams)
@@ -1221,7 +1222,7 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
* All private members are made protected in order to be accessible from
* specialized classes.
*/
- class ImplementationAdapter(from: List[Symbol], to: List[Symbol]) extends TreeSymSubstituter(from, to) {
+ class ImplementationAdapter(from: List[Symbol], to: List[Symbol], targetClass: Symbol) extends TreeSymSubstituter(from, to) {
override val symSubst = new SubstSymMap(from, to) {
override def matches(sym1: Symbol, sym2: Symbol) =
if (sym2.isTypeSkolem) sym2.deSkolemize eq sym1
@@ -1234,8 +1235,10 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
override def transform(tree: Tree): Tree = tree match {
case Select(qual, name) =>
val sym = tree.symbol
+ if (sym.hasFlag(PRIVATE))
+ log("seeing private member " + sym + " targetClass: " + targetClass + " owner: " + sym.owner.enclClass)
if (sym.hasFlag(PRIVATE | PROTECTED) && !nme.isLocalName(sym.name)
- && (currentClass != sym.owner.enclClass)) {
+ && (targetClass != sym.owner.enclClass)) {
log("changing private flag of " + sym)
// tree.symbol.resetFlag(PRIVATE).setFlag(PROTECTED)
sym.makeNotPrivate(sym.owner)