summaryrefslogtreecommitdiff
path: root/examples/scala-js/compiler/src/main/scala/scala/scalajs/compiler/GenJSFiles.scala
diff options
context:
space:
mode:
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.scala51
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)
+ }
+}