aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-03-10 23:42:06 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-18 11:16:37 +0100
commitcb8667654ede78bd99b695196dd99a0ec6c9bfa6 (patch)
tree3e0618fdf60727828bda18dfe4d670780ad0d79c
parent79e22287def4b5bf04e7ecd02507b9e72a4134f5 (diff)
downloaddotty-cb8667654ede78bd99b695196dd99a0ec6c9bfa6.tar.gz
dotty-cb8667654ede78bd99b695196dd99a0ec6c9bfa6.tar.bz2
dotty-cb8667654ede78bd99b695196dd99a0ec6c9bfa6.zip
Drop environment from pickled closures.
It is always empty anyway. Side benefit: We can get rid of NOTYPE, too.
-rw-r--r--src/dotty/tools/dotc/core/pickling/TreePickler.scala10
-rw-r--r--src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala8
2 files changed, 9 insertions, 9 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/TreePickler.scala b/src/dotty/tools/dotc/core/pickling/TreePickler.scala
index ca0ba4137..c0914421f 100644
--- a/src/dotty/tools/dotc/core/pickling/TreePickler.scala
+++ b/src/dotty/tools/dotc/core/pickling/TreePickler.scala
@@ -248,8 +248,6 @@ class TreePickler(pickler: TastyPickler) {
assert(pickleParamType(tpe), s"orphan method parameter: $tpe")
case tpe: LazyRef =>
pickleType(tpe.ref)
- case NoType =>
- writeByte(NOTYPE)
}} catch {
case ex: AssertionError =>
println(i"error while pickling type $tpe")
@@ -353,8 +351,12 @@ class TreePickler(pickler: TastyPickler) {
writeByte(IF)
withLength{ pickleTree(cond); pickleTree(thenp); pickleTree(elsep) }
case Closure(env, meth, tpt) =>
- writeByte(CLOSURE)
- withLength{ pickleTree(meth); pickleTpt(tpt); env.foreach(pickleTree) }
+ writeByte(LAMBDA)
+ assert(env.isEmpty)
+ withLength{
+ pickleTree(meth)
+ if (tpt.tpe.exists) pickleTpt(tpt)
+ }
case Match(selector, cases) =>
writeByte(MATCH)
withLength { pickleTree(selector); cases.foreach(pickleTree) }
diff --git a/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala b/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
index fb076911b..3bafa8b1f 100644
--- a/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
+++ b/src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala
@@ -267,8 +267,6 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
ThisType.raw(readType().asInstanceOf[TypeRef])
case SKOLEMtype =>
SkolemType(readTypeRef())
- case NOTYPE =>
- NoType
case SHARED =>
val ref = readAddr()
typeAtAddr.getOrElseUpdate(ref, forkAt(ref).readType())
@@ -747,10 +745,10 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
Block(stats, expr)
case IF =>
If(readTerm(), readTerm(), readTerm())
- case CLOSURE =>
+ case LAMBDA =>
val meth = readTerm()
- val tpt = readTpt()
- Closure(until(end)(readTerm()), meth, tpt)
+ val tpt = ifBefore(end)(readTpt(), EmptyTree)
+ Closure(Nil, meth, tpt)
case MATCH =>
Match(readTerm(), readCases(end))
case RETURN =>