summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-08-18 17:24:36 +0000
committerMartin Odersky <odersky@gmail.com>2009-08-18 17:24:36 +0000
commitec18f148e8afc4101878cd8b05eadac92d26b64c (patch)
tree7602e12f0a5cab24fea2f73d91a794fbde52bf5b /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parent6b5b635f095e29b37fa30487c5a1cf5804107795 (diff)
downloadscala-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.scala33
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]