Scala Compiler2.12.3-1 < Back
 

# Packages

-  package root

  The Scala compiler and reflection APIs.

  The Scala compiler and reflection APIs.

  Definition Classes
    root
-  package scala
  Definition Classes
    root
-  package tools
  Definition Classes
    scala
-  package nsc
  Definition Classes
    tools
-  package backend
  Definition Classes
    nsc
-  package jvm
  Definition Classes
    backend
-  package opt
  Definition Classes
    jvm
- BoxUnbox
- ByteCodeRepository
- BytecodeUtils
- CallGraph
- ClosureOptimizer
- CopyProp
- InlineInfoAttribute
- InlineInfoAttributePrototype
- Inliner
- InlinerHeuristics
- LabelNotLive
- LocalOpt
- LocalOptImpls
- RemovePair
- RemovePairDependency

c

scala.tools.nsc.backend.jvm.opt

# ByteCodeRepository 

###

#### class ByteCodeRepository[BT <: BTypes] extends AnyRef

The ByteCodeRepository provides utilities to read the bytecode of classfiles from the compilation classpath. Parsed classes are cached in the `classes` map.

Source
  ByteCodeRepository.scala

Linear Supertypes
AnyRef, Any
Type Hierarchy
 
Ordering

1. Alphabetic
2. By Inheritance

Inherited

1. ByteCodeRepository
2. AnyRef
3. Any

Implicitly

1. by any2stringadd
2. by StringFormat
3. by Ensuring
4. by ArrowAssoc

1. Hide All
2. Show All

Visibility

1. Public
2. All

### Instance Constructors

1.  new ByteCodeRepository(classPath: ClassPath, btypes: BT)

   classPath

     The compiler classpath where classfiles are searched and read from.

### Value Members

1.  final def !=(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
2.  final def ##(): Int
   Definition Classes
     AnyRef → Any
3.  def +(other: String): String
   Implicit
     This member is added by an implicit conversion from ByteCodeRepository[BT] to any2stringadd[ByteCodeRepository[BT]] performed by method any2stringadd in scala.Predef.
   Definition Classes
     any2stringadd
4.  def ->[B](y: B): (ByteCodeRepository[BT], B)
   Implicit
     This member is added by an implicit conversion from ByteCodeRepository[BT] to ArrowAssoc[ByteCodeRepository[BT]] performed by method ArrowAssoc in scala.Predef.
   Definition Classes
     ArrowAssoc
   Annotations
     @inline()
5.  final def ==(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
6.  def add(classNode: ClassNode, sourceFilePath: Option[String]): Unit
7.  final def asInstanceOf[T0]: T0
   Definition Classes
     Any
8.  val btypes: BT
9.  def classNode(internalName: InternalName): Either[ClassNotFound, ClassNode]

   The class node for an internal name.

   The class node for an internal name. If the class node is not yet available, it is parsed from the classfile on the compile classpath.

10.  def classNodeAndSourceFilePath(internalName: InternalName): Either[ClassNotFound, (ClassNode, Option[String])]

    The class node and source file path (if the class is being compiled) for an internal name.

    The class node and source file path (if the class is being compiled) for an internal name. If the class node is not yet available, it is parsed from the classfile on the compile classpath.

11.  val classPath: ClassPath
12.  def clone(): AnyRef
    Attributes
      protected[java.lang]
    Definition Classes
      AnyRef
    Annotations
      @throws( ... )
13.  val compilingClasses: Map[InternalName, (ClassNode, String)]

    Contains ClassNodes and the canonical path of the source file path of classes being compiled in the current compilation run.

14.  def ensuring(cond: (ByteCodeRepository[BT]) ⇒ Boolean, msg: ⇒ Any): ByteCodeRepository[BT]
    Implicit
      This member is added by an implicit conversion from ByteCodeRepository[BT] to Ensuring[ByteCodeRepository[BT]] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
15.  def ensuring(cond: (ByteCodeRepository[BT]) ⇒ Boolean): ByteCodeRepository[BT]
    Implicit
      This member is added by an implicit conversion from ByteCodeRepository[BT] to Ensuring[ByteCodeRepository[BT]] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
16.  def ensuring(cond: Boolean, msg: ⇒ Any): ByteCodeRepository[BT]
    Implicit
      This member is added by an implicit conversion from ByteCodeRepository[BT] to Ensuring[ByteCodeRepository[BT]] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
17.  def ensuring(cond: Boolean): ByteCodeRepository[BT]
    Implicit
      This member is added by an implicit conversion from ByteCodeRepository[BT] to Ensuring[ByteCodeRepository[BT]] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
18.  final def eq(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
19.  def equals(arg0: Any): Boolean
    Definition Classes
      AnyRef → Any
20.  def fieldNode(classInternalName: InternalName, name: String, descriptor: String): Either[FieldNotFound, (FieldNode, InternalName)]

    The field node for a field matching `name` and `descriptor`, accessed in class `classInternalName`.

    The field node for a field matching `name` and `descriptor`, accessed in class `classInternalName`. The declaration of the field may be in one of the superclasses.

    returns

      The FieldNode of the requested field and the InternalName of its declaring class, or an error message if the field could not be found

21.  def finalize(): Unit
    Attributes
      protected[java.lang]
    Definition Classes
      AnyRef
    Annotations
      @throws( classOf[java.lang.Throwable] )
22.  def formatted(fmtstr: String): String
    Implicit
      This member is added by an implicit conversion from ByteCodeRepository[BT] to StringFormat[ByteCodeRepository[BT]] performed by method StringFormat in scala.Predef.
    Definition Classes
      StringFormat
    Annotations
      @inline()
23.  final def getClass(): Class[_]
    Definition Classes
      AnyRef → Any
24.  def hashCode(): Int
    Definition Classes
      AnyRef → Any
25.  final def isInstanceOf[T0]: Boolean
    Definition Classes
      Any
26.  def methodNode(ownerInternalNameOrArrayDescriptor: String, name: String, descriptor: String): Either[MethodNotFound, (MethodNode, InternalName)]

    The method node for a method matching `name` and `descriptor`, accessed in class `ownerInternalNameOrArrayDescriptor`.

    The method node for a method matching `name` and `descriptor`, accessed in class `ownerInternalNameOrArrayDescriptor`. The declaration of the method may be in one of the parents.

    Note that the JVM spec performs method lookup in two steps: resolution and selection.

    Method resolution, defined in jvms-5.4.3.3 and jvms-5.4.3.4, is the first step and is identical for all invocation styles (virtual, interface, special, static). If C is the receiver class in the invocation instruction: 1 find a matching method (name and descriptor) in C 2 then in C's superclasses 3 then find the maximally-specific matching superinterface methods, succeed if there's a single non-abstract one. static and private methods in superinterfaces are not considered. 4 then pick a random non-static, non-private superinterface method. 5 then fail.

    Note that for an `invokestatic` instruction, a method reference `B.m` may resolve to `A.m`, if class `B` doesn't specify a matching method `m`, but the parent `A` does.

    Selection depends on the invocation style and is defined in jvms-6.5.

    - invokestatic: invokes the resolved method
    - invokevirtual / invokeinterface: searches for an override of the resolved method starting at the dynamic receiver type. the search procedure is basically the same as in resolution, but it fails at 4 instead of picking a superinterface method at random.
    - invokespecial: if C is the receiver in the invocation instruction, searches for an override of the resolved method starting at
      - the superclass of the current class, if C is a superclass of the current class
      - C otherwise again, the search procedure is the same.

    In the method here we implement method *resolution*. Whether or not the returned method is actually invoked at runtime depends on the invocation instruction and the class hierarchy, so the users (e.g. the inliner) have to be aware of method selection.

    Note that the returned method may be abstract (ACC_ABSTRACT), native (ACC_NATIVE) or signature polymorphic (methods `invoke` and `invokeExact` in class `MethodHandles`).

    returns

      The MethodNode of the requested method and the InternalName of its declaring class, or an error message if the method could not be found. An error message is also returned if method resolution results in multiple default methods.

27.  final def ne(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
28.  final def notify(): Unit
    Definition Classes
      AnyRef
29.  final def notifyAll(): Unit
    Definition Classes
      AnyRef
30.  val parsedClasses: Map[InternalName, Either[ClassNotFound, (ClassNode, Long)]]

    Cache for parsed ClassNodes.

    Cache for parsed ClassNodes. The `Long` field encodes the age of the node in the map, which allows removing old entries when the map grows too large (see limitCacheSize). For Java classes in mixed compilation, the map contains an error message: no ClassNode is generated by the backend and also no classfile that could be parsed.

31.  final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
      AnyRef
32.  def toString(): String
    Definition Classes
      AnyRef → Any
33.  final def wait(): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws( ... )
34.  final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws( ... )
35.  final def wait(arg0: Long): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws( ... )
36.  def →[B](y: B): (ByteCodeRepository[BT], B)
    Implicit
      This member is added by an implicit conversion from ByteCodeRepository[BT] to ArrowAssoc[ByteCodeRepository[BT]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
      ArrowAssoc

### Inherited from AnyRef

### Inherited from Any

### Inherited by implicit conversion any2stringadd from ByteCodeRepository[BT] to any2stringadd[ByteCodeRepository[BT]]

### Inherited by implicit conversion StringFormat from ByteCodeRepository[BT] to StringFormat[ByteCodeRepository[BT]]

### Inherited by implicit conversion Ensuring from ByteCodeRepository[BT] to Ensuring[ByteCodeRepository[BT]]

### Inherited by implicit conversion ArrowAssoc from ByteCodeRepository[BT] to ArrowAssoc[ByteCodeRepository[BT]]

### Ungrouped