diff options
author | Martin Odersky <odersky@gmail.com> | 2012-08-16 20:03:14 +0200 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2012-08-20 08:11:06 +0100 |
commit | 1ee7ffb6fd2de6e7194a4eb89601d98503b50048 (patch) | |
tree | a7395953072397beb1435c4907cf4e23cbb4e469 /src/reflect/scala/tools/nsc | |
parent | 0cde930b192acc73d1e0b5951b3300c286ae4dd2 (diff) | |
download | scala-1ee7ffb6fd2de6e7194a4eb89601d98503b50048.tar.gz scala-1ee7ffb6fd2de6e7194a4eb89601d98503b50048.tar.bz2 scala-1ee7ffb6fd2de6e7194a4eb89601d98503b50048.zip |
Optimizations to cut down on #closures created
Driven by profile data.
Diffstat (limited to 'src/reflect/scala/tools/nsc')
-rw-r--r-- | src/reflect/scala/tools/nsc/io/ZipArchive.scala | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/reflect/scala/tools/nsc/io/ZipArchive.scala b/src/reflect/scala/tools/nsc/io/ZipArchive.scala index 852dba9ec8..d1a91294a5 100644 --- a/src/reflect/scala/tools/nsc/io/ZipArchive.scala +++ b/src/reflect/scala/tools/nsc/io/ZipArchive.scala @@ -96,14 +96,25 @@ abstract class ZipArchive(override val file: JFile) extends AbstractFile with Eq } } - private def ensureDir(dirs: mutable.Map[String, DirEntry], path: String, zipEntry: ZipEntry): DirEntry = { - dirs.getOrElseUpdate(path, { - val parent = ensureDir(dirs, dirName(path), null) - val dir = new DirEntry(path) - parent.entries(baseName(path)) = dir - dir - }) - } + private def ensureDir(dirs: mutable.Map[String, DirEntry], path: String, zipEntry: ZipEntry): DirEntry = + //OPT inlined from getOrElseUpdate; saves ~50K closures on test run. + // was: + // dirs.getOrElseUpdate(path, { + // val parent = ensureDir(dirs, dirName(path), null) + // val dir = new DirEntry(path) + // parent.entries(baseName(path)) = dir + // dir + // }) + dirs get path match { + case Some(v) => v + case None => + val parent = ensureDir(dirs, dirName(path), null) + val dir = new DirEntry(path) + parent.entries(baseName(path)) = dir + dirs(path) = dir + dir + } + protected def getDir(dirs: mutable.Map[String, DirEntry], entry: ZipEntry): DirEntry = { if (entry.isDirectory) ensureDir(dirs, entry.getName, entry) else ensureDir(dirs, dirName(entry.getName), null) |