summaryrefslogtreecommitdiff
path: root/test/files/run
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2015-06-29 13:59:46 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2015-06-29 13:59:46 -0700
commit12f92b7f0566a9557dbb8d73bba21b72764eed68 (patch)
tree7a7a5325db9ea4a3386b1e76520714568e19d2e8 /test/files/run
parent21387d61ec8935e684ca934afa5fc9ba89199da0 (diff)
parentb17a291c2edf28aca1713aa4a30d8bba3886bc8d (diff)
downloadscala-12f92b7f0566a9557dbb8d73bba21b72764eed68.tar.gz
scala-12f92b7f0566a9557dbb8d73bba21b72764eed68.tar.bz2
scala-12f92b7f0566a9557dbb8d73bba21b72764eed68.zip
Merge pull request #4588 from retronym/topic/icodish
GenBCode: fix incrementatal compilation by mimicing GenASM
Diffstat (limited to 'test/files/run')
-rw-r--r--test/files/run/sbt-icode-interface.scala42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/files/run/sbt-icode-interface.scala b/test/files/run/sbt-icode-interface.scala
new file mode 100644
index 0000000000..84d38cc65a
--- /dev/null
+++ b/test/files/run/sbt-icode-interface.scala
@@ -0,0 +1,42 @@
+import scala.tools.partest._
+import scala.tools.nsc._
+
+object Test extends DirectTest {
+
+ def code = """
+ class C { class D }
+ object O
+ """.trim
+
+ def show() {
+ for (b <- List("GenASM", "GenBCode")) {
+ val global = newCompiler("-usejavacp", s"-Ybackend:$b")
+ import global._
+ val r = new Run
+ r.compileSources(newSourceFile(code) :: Nil)
+
+ val results = collection.mutable.Buffer[(Boolean, String)]()
+
+ // Nailing down defacto compiler API from SBT's usage
+ // https://github.com/sbt/sbt/blob/adb41611cf73260938274915d8462d924df200c8/compile/interface/src/main/scala/xsbt/Analyzer.scala#L29-L41
+ def isTopLevelModule(sym: Symbol) = sym.isTopLevel && sym.isModule
+ for (unit <- currentRun.units if !unit.isJava) {
+ val sourceFile = unit.source.file.file
+ for (iclass <- unit.icode) {
+ val sym = iclass.symbol
+ def addGenerated(separatorRequired: Boolean) {
+ results += (separatorRequired -> sym.fullName)
+ }
+ if (sym.isModuleClass && !sym.isImplClass) {
+ if (isTopLevelModule(sym) && sym.companionClass == NoSymbol)
+ addGenerated(false)
+ addGenerated(true)
+ } else
+ addGenerated(false)
+ }
+ }
+ val expected = List((false, "C"), (true, "O"), (false, "C$D"))
+ assert(results.toList == expected, b + ": " + results.toList)
+ }
+ }
+}