diff options
author | Martin Odersky <odersky@gmail.com> | 2009-08-18 17:24:36 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-08-18 17:24:36 +0000 |
commit | ec18f148e8afc4101878cd8b05eadac92d26b64c (patch) | |
tree | 7602e12f0a5cab24fea2f73d91a794fbde52bf5b /src/compiler/scala/tools/nsc/typechecker/Typers.scala | |
parent | 6b5b635f095e29b37fa30487c5a1cf5804107795 (diff) | |
download | scala-ec18f148e8afc4101878cd8b05eadac92d26b64c.tar.gz scala-ec18f148e8afc4101878cd8b05eadac92d26b64c.tar.bz2 scala-ec18f148e8afc4101878cd8b05eadac92d26b64c.zip |
Fixed memory leaks for streams.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 94d3aae091..745d1c8241 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -301,7 +301,7 @@ trait Typers { self: Analyzer => case t => t } "\n Note that "+tree.symbol+" is not stable because its type, "+tree.tpe+", is volatile." - } else "")) + } else "")) /** Would tree be a stable (i.e. a pure expression) if the type * of its symbol was not volatile? @@ -1265,7 +1265,11 @@ trait Typers { self: Analyzer => r } else { val rhs = gen.mkCheckInit(Select(This(value.owner), value)) - val r = DefDef(getter, typed(rhs, EXPRmode, value.tpe)) + val r = typed { + atPos(getter.pos.focus) { + DefDef(getter, rhs) + } + }.asInstanceOf[DefDef] r.tpt.setPos(tpt.pos.focus) r } @@ -1273,15 +1277,22 @@ trait Typers { self: Analyzer => checkNoEscaping.privates(getter, getterDef.tpt) def setterDef(setter: Symbol): DefDef = { setter.setAnnotations(value.annotations) - val result = atPos(vdef.pos.focus)( - DefDef(setter, - if ((mods hasFlag DEFERRED) || (setter hasFlag OVERLOADED)) - EmptyTree - else - typed(Assign(Select(This(value.owner), value), - Ident(setter.paramss.head.head))))) - treeCopy.DefDef(result, result.mods, result.name, result.tparams, - result.vparamss, result.tpt, result.rhs) + val result = typed { + atPos(vdef.pos.focus) { + DefDef( + setter, + if ((mods hasFlag DEFERRED) || (setter hasFlag OVERLOADED)) + EmptyTree + else + Assign(Select(This(value.owner), value), + Ident(setter.paramss.head.head))) + } + } + result.asInstanceOf[DefDef] + // Martin: was + // treeCopy.DefDef(result, result.mods, result.name, result.tparams, + // result.vparamss, result.tpt, result.rhs) + // but that's redundant, no? } val gs = new ListBuffer[DefDef] |