blob: dc63b335ccc73aa108c8785fcf783dca8dd47ab5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/* NSC -- new Scala compiler
* Copyright 2005-2013 LAMP/EPFL
* @author Paul Phillips
*/
package scala.tools.nsc
package backend
import io.AbstractFile
import scala.tools.nsc.classpath.AggregateClassPath
import scala.tools.util.PathResolver
import scala.tools.nsc.util.ClassPath
trait JavaPlatform extends Platform {
val global: Global
override val symbolTable: global.type = global
import global._
import definitions._
private[nsc] var currentClassPath: Option[ClassPath] = None
private[nsc] def classPath: ClassPath = {
if (currentClassPath.isEmpty) currentClassPath = Some(new PathResolver(settings).result)
currentClassPath.get
}
/** Update classpath with a substituted subentry */
def updateClassPath(subst: Map[ClassPath, ClassPath]): Unit = global.classPath match {
case AggregateClassPath(entries) =>
currentClassPath = Some(AggregateClassPath(entries map (e => subst.getOrElse(e, e))))
case cp: ClassPath =>
currentClassPath = Some(subst.getOrElse(cp, cp))
}
def platformPhases = List(
flatten, // get rid of inner classes
genBCode // generate .class files
)
lazy val externalEquals = getDecl(BoxesRunTimeClass, nme.equals_)
lazy val externalEqualsNumNum = getDecl(BoxesRunTimeClass, nme.equalsNumNum)
lazy val externalEqualsNumChar = getDecl(BoxesRunTimeClass, nme.equalsNumChar)
lazy val externalEqualsNumObject = getDecl(BoxesRunTimeClass, nme.equalsNumObject)
/** We could get away with excluding BoxedBooleanClass for the
* purpose of equality testing since it need not compare equal
* to anything but other booleans, but it should be present in
* case this is put to other uses.
*/
def isMaybeBoxed(sym: Symbol) = {
(sym == ObjectClass) ||
(sym == JavaSerializableClass) ||
(sym == ComparableClass) ||
(sym isNonBottomSubClass BoxedNumberClass) ||
(sym isNonBottomSubClass BoxedCharacterClass) ||
(sym isNonBottomSubClass BoxedBooleanClass)
}
def needCompile(bin: AbstractFile, src: AbstractFile) =
src.lastModified >= bin.lastModified
}
|