diff options
Diffstat (limited to 'examples/scala-js/compiler/src/main/scala/scala/scalajs/compiler/GenJSFiles.scala')
-rw-r--r-- | examples/scala-js/compiler/src/main/scala/scala/scalajs/compiler/GenJSFiles.scala | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/examples/scala-js/compiler/src/main/scala/scala/scalajs/compiler/GenJSFiles.scala b/examples/scala-js/compiler/src/main/scala/scala/scalajs/compiler/GenJSFiles.scala new file mode 100644 index 0000000..f754e70 --- /dev/null +++ b/examples/scala-js/compiler/src/main/scala/scala/scalajs/compiler/GenJSFiles.scala @@ -0,0 +1,51 @@ +/* Scala.js compiler + * Copyright 2013 LAMP/EPFL + * @author Sébastien Doeraene + */ + +package scala.scalajs.compiler + +import scala.tools.nsc._ +import scala.tools.nsc.io.AbstractFile +import scala.reflect.internal.pickling.PickleBuffer + +import java.io._ + +import scala.scalajs.ir +import ir.Infos._ + +/** Send JS ASTs to files + * + * @author Sébastien Doeraene + */ +trait GenJSFiles extends SubComponent { self: GenJSCode => + import global._ + import jsAddons._ + + def genIRFile(cunit: CompilationUnit, sym: Symbol, tree: ir.Trees.ClassDef, + classInfo: ClassInfo): Unit = { + val outfile = getFileFor(cunit, sym, ".sjsir") + val output = outfile.bufferedOutput + try { + ir.InfoSerializers.serialize(output, classInfo) + ir.Serializers.serialize(output, tree) + } finally { + output.close() + } + } + + private def getFileFor(cunit: CompilationUnit, sym: Symbol, + suffix: String) = { + val baseDir: AbstractFile = + settings.outputDirs.outputDirFor(cunit.source.file) + + val pathParts = sym.fullName.split("[./]") + val dir = (baseDir /: pathParts.init)(_.subdirectoryNamed(_)) + + var filename = pathParts.last + if (sym.isModuleClass && !sym.isImplClass) + filename = filename + nme.MODULE_SUFFIX_STRING + + dir fileNamed (filename + suffix) + } +} |