summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-01-16 23:18:02 +0100
committerLukas Rytz <lukas.rytz@gmail.com>2015-01-16 23:18:07 +0100
commit45efefaa9b16532c1f61560bde09a7346dcfe5a1 (patch)
tree29f6f5e43238e0c958be817966a1d8274ba56562
parent91435f68d280071d286c9d0e13b279293843ae7e (diff)
downloadscala-45efefaa9b16532c1f61560bde09a7346dcfe5a1.tar.gz
scala-45efefaa9b16532c1f61560bde09a7346dcfe5a1.tar.bz2
scala-45efefaa9b16532c1f61560bde09a7346dcfe5a1.zip
Type alias for InternalName
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala19
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala3
2 files changed, 17 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala b/src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala
index 879f234918..e1ca13cba9 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala
@@ -10,7 +10,7 @@ import scala.tools.asm
import asm.Opcodes
/**
- * The BTypes component defines The BType class hierarchy. BTypes encapsulates all type information
+ * The BTypes component defines The BType class hierarchy. BTypes encapsulate all type information
* that is required after building the ASM nodes. This includes optimizations, generation of
* InnerClass attributes and generation of stack map frames.
*
@@ -18,6 +18,8 @@ import asm.Opcodes
* be queried by concurrent threads.
*/
abstract class BTypes {
+ import BTypes.InternalName
+
/**
* A map from internal names to ClassBTypes. Every ClassBType is added to this map on its
* construction.
@@ -29,12 +31,12 @@ abstract class BTypes {
* Concurrent because stack map frames are computed when in the class writer, which might run
* on multiple classes concurrently.
*/
- protected val classBTypeFromInternalNameMap: collection.concurrent.Map[String, ClassBType]
+ protected val classBTypeFromInternalNameMap: collection.concurrent.Map[InternalName, ClassBType]
/**
* Obtain a previously constructed ClassBType for a given internal name.
*/
- def classBTypeFromInternalName(internalName: String) = classBTypeFromInternalNameMap(internalName)
+ def classBTypeFromInternalName(internalName: InternalName) = classBTypeFromInternalNameMap(internalName)
// Some core BTypes are required here, in class BType, where no Global instance is available.
// The Global is only available in the subclass BTypesFromSymbols. We cannot depend on the actual
@@ -566,7 +568,7 @@ abstract class BTypes {
* A ClassBType represents a class or interface type. The necessary information to build a
* ClassBType is extracted from compiler symbols and types, see BTypesFromSymbols.
*/
- final case class ClassBType(internalName: String) extends RefBType {
+ final case class ClassBType(internalName: InternalName) extends RefBType {
/**
* Write-once variable allows initializing a cyclic graph of infos. This is required for
* nested classes. Example: for the definition `class A { class B }` we have
@@ -827,3 +829,12 @@ abstract class BTypes {
*/
def isCompilingPrimitive: Boolean
}
+
+object BTypes {
+ /**
+ * A marker for strings that represent class internal names.
+ * Ideally the type would be incompatible with String, for example by making it a value class.
+ * But that would create overhead in a Collection[InternalName].
+ */
+ type InternalName = String
+} \ No newline at end of file
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala b/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala
index d02dd853d0..ef18d29841 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala
@@ -7,6 +7,7 @@ package scala.tools.nsc
package backend.jvm
import scala.tools.asm
+import BTypes.InternalName
/**
* This class mainly contains the method classBTypeFromSymbol, which extracts the necessary
@@ -37,7 +38,7 @@ class BTypesFromSymbols[G <: Global](val global: G) extends BTypes {
}
protected val classBTypeFromInternalNameMap = {
- global.perRunCaches.recordCache(collection.concurrent.TrieMap.empty[String, ClassBType])
+ global.perRunCaches.recordCache(collection.concurrent.TrieMap.empty[InternalName, ClassBType])
}
/**