diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2010-04-27 14:04:02 +0000 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2010-04-27 14:04:02 +0000 |
commit | 15fecdc78e66bb93ff0db9f4cdcf50f9c85fc190 (patch) | |
tree | f56da78b70c319702aab21994213c38e3dedc593 /src/compiler | |
parent | fa715fdd66f444d756ffe91417ac0937f7de6592 (diff) | |
download | scala-15fecdc78e66bb93ff0db9f4cdcf50f9c85fc190.tar.gz scala-15fecdc78e66bb93ff0db9f4cdcf50f9c85fc190.tar.bz2 scala-15fecdc78e66bb93ff0db9f4cdcf50f9c85fc190.zip |
fixed #3349 : method symbol cached too aggressi...
fixed #3349 : method symbol cached too aggressively
cooking raw types changes a symbol's info, but the change was masked by
caching in MethodSymbol
review by odersky
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/Symbols.scala | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala index 3c7fdd4e3e..ebab5d9be7 100644 --- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala +++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala @@ -1747,20 +1747,22 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable => private var mtpePeriod = NoPeriod private var mtpePre: Type = _ private var mtpeResult: Type = _ + private var mtpeInfo: Type = _ override def cloneSymbolImpl(owner: Symbol): Symbol = new MethodSymbol(owner, pos, name).copyAttrsFrom(this) def typeAsMemberOf(pre: Type): Type = { if (mtpePeriod == currentPeriod) { - if (mtpePre eq pre) return mtpeResult + if ((mtpePre eq pre) && (mtpeInfo eq info)) return mtpeResult } else if (isValid(mtpePeriod)) { mtpePeriod = currentPeriod - if (mtpePre eq pre) return mtpeResult + if ((mtpePre eq pre) && (mtpeInfo eq info)) return mtpeResult } val res = pre.computeMemberType(this) mtpePeriod = currentPeriod mtpePre = pre + mtpeInfo = info mtpeResult = res res } |