summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-09-19 10:48:26 +0000
committerMartin Odersky <odersky@gmail.com>2006-09-19 10:48:26 +0000
commitf72b4dfe467a967f046e4844b2ab57d4fc074f2c (patch)
treebc18bbca368b166802e60e22d9a3416e5ed104dd /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parent13a369ce8d13cba304e9920d1dc445d6f74cca76 (diff)
downloadscala-f72b4dfe467a967f046e4844b2ab57d4fc074f2c.tar.gz
scala-f72b4dfe467a967f046e4844b2ab57d4fc074f2c.tar.bz2
scala-f72b4dfe467a967f046e4844b2ab57d4fc074f2c.zip
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 1bfba3fc3c..01ddfae607 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -674,17 +674,8 @@ trait Typers requires Analyzer {
result
}
def setterDef: DefDef = {
- var setter = value.owner.info.decl(nme.getterToSetter(getter.name)).filter(
- .tpe.=:=(MethodType(List(value.tpe.resultType), UnitClass.tpe)));
- // note can't use .suchThat(.isSetter) above,
- // because generated setters of abstract variables are not setters in this sense.
- if (setter hasFlag OVERLOADED) setter = setter.alternatives.head;
- // we will get a double definition error later anyway!
-
- assert(setter != NoSymbol, getter);//debug
-
val result = atPos(vdef.pos)(
- DefDef(setter, vparamss =>
+ DefDef(getter.setter(value.owner), vparamss =>
if (mods hasFlag DEFERRED) EmptyTree
else typed(Assign(Select(This(value.owner), value),
Ident(vparamss.head.head)))))
@@ -777,7 +768,8 @@ trait Typers requires Analyzer {
alias = NoSymbol
if (alias != NoSymbol) {
var ownAcc = clazz.info.decl(name).suchThat(.hasFlag(PARAMACCESSOR))
- if (ownAcc hasFlag ACCESSOR) ownAcc = ownAcc.accessed
+ if ((ownAcc hasFlag ACCESSOR) && !(ownAcc hasFlag DEFERRED))
+ ownAcc = ownAcc.accessed
if (settings.debug.value)
log("" + ownAcc + " has alias "+alias + alias.locationString);//debug
ownAcc.asInstanceOf[TermSymbol].setAlias(alias)
@@ -1555,14 +1547,14 @@ trait Typers requires Analyzer {
newTyper(context.makeNewScope(tree, tree.symbol)).typedFunction(fun, mode, pt)
case Assign(lhs, rhs) =>
- def isGetter(sym: Symbol) = sym.info match {
+ def mayBeVarGetter(sym: Symbol) = sym.info match {
case PolyType(List(), _) => sym.owner.isClass && !sym.isStable
case _: ImplicitMethodType => sym.owner.isClass && !sym.isStable
case _ => false
}
val lhs1 = typed(lhs, EXPRmode | LHSmode, WildcardType)
val varsym = lhs1.symbol
- if (varsym != null && isGetter(varsym)) {
+ if (varsym != null && mayBeVarGetter(varsym)) {
lhs1 match {
case Select(qual, name) =>
typed(