summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2006-10-26 16:31:23 +0000
committerIulian Dragos <jaguarul@gmail.com>2006-10-26 16:31:23 +0000
commit17aff1c1fbfefe1e261af6cf08ca5fceac32f1c7 (patch)
tree05e09938108c9cc4265b30ce67305c4328fc207b
parentfab8b6d5c116571824fb32ef1c7f01f33e13cd01 (diff)
downloadscala-17aff1c1fbfefe1e261af6cf08ca5fceac32f1c7.tar.gz
scala-17aff1c1fbfefe1e261af6cf08ca5fceac32f1c7.tar.bz2
scala-17aff1c1fbfefe1e261af6cf08ca5fceac32f1c7.zip
Fixed accessors for functions which access prot...
Fixed accessors for functions which access protected members.
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala7
-rw-r--r--test/files/jvm/protectedacc.check1
-rw-r--r--test/files/jvm/protectedacc.scala3
3 files changed, 7 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
index 776425e2b7..36f9cb7657 100644
--- a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
@@ -172,9 +172,8 @@ abstract class SuperAccessors extends transform.Transform with transform.TypingT
log("Decided for host class: " + clazz)
val accName = nme.protName(sym.originalName)
var protAcc = clazz.info.decl(accName)
+ val hasArgs = sym.tpe.paramTypes != Nil
if (protAcc == NoSymbol) {
- val hasArgs = sym.tpe.paramTypes != Nil
-
protAcc = clazz.newMethod(tree.pos, nme.protName(sym.originalName))
.setInfo(MethodType(List(clazz.typeOfThis),
if (hasArgs)
@@ -192,7 +191,7 @@ abstract class SuperAccessors extends transform.Transform with transform.TypingT
var res: Tree = atPos(tree.pos) { Apply(Select(This(clazz), protAcc), List(qual)) }
if (settings.debug.value)
log("Replaced " + tree + " with " + res)
- typer.typedOperator(res)
+ if (hasArgs) typer.typedOperator(res) else typer.typed(res)
}
/** Add an accessor for field, if needed, and return a selection tree for it .
@@ -239,7 +238,7 @@ abstract class SuperAccessors extends transform.Transform with transform.TypingT
private def needsProtectedAccessor(sym: Symbol, pos: PositionType): Boolean = {
val res = /* settings.debug.value && */
((sym hasFlag PROTECTED)
- && (!(currentOwner.enclClass.thisSym isSubClass sym.owner))
+ && (!validCurrentOwner || !(currentOwner.enclClass.thisSym isSubClass sym.owner))
&& (enclPackage(sym.owner) != enclPackage(currentOwner)))
if (res) {
diff --git a/test/files/jvm/protectedacc.check b/test/files/jvm/protectedacc.check
index 632c9dabe7..9fce0faf7c 100644
--- a/test/files/jvm/protectedacc.check
+++ b/test/files/jvm/protectedacc.check
@@ -1,6 +1,7 @@
10
meth1(1) = 2
meth2(1)(1) = 2
+meth3 = class [I
10++ = 11
count before: 3
count after: 4
diff --git a/test/files/jvm/protectedacc.scala b/test/files/jvm/protectedacc.scala
index f54bb33d58..7914da0d72 100644
--- a/test/files/jvm/protectedacc.scala
+++ b/test/files/jvm/protectedacc.scala
@@ -30,6 +30,7 @@ package p {
protected def meth1(x: Int) = x + 1;
protected def meth2(x: Int)(y: Int) = x + y;
+ protected def meth3 = Array(1, 2)
def getA: this.type = this;
}
@@ -46,6 +47,8 @@ package p {
Console.println("meth1(1) = " + meth1(1));
Console.println("meth2(1)(1) = " + meth2(1)(1));
+ Console.println("meth3 = " + meth3.getClass);
+
val inc = &meth2(1);
Console.println("10++ = " + inc(10));