Scala Compiler2.12.21 < 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
-  abstract class GenBCode extends SubComponent

  Some notes about the backend's state and its initialization and release.

  Some notes about the backend's state and its initialization and release.

  State that is used in a single run is allocated through `recordPerRunCache`, for example `ByteCodeRepository.compilingClasses` or `CallGraph.callsites`. This state is cleared at the end of each run.

  Some state needs to be re-initialized per run, for example `CoreBTypes` (computed from Symbols / Types) or the `GeneratedClassHandler` (depends on the compiler settings). This state is (re-) initialized in the `GenBCode.initialize` method. There two categories:

  1. State that is stored in a `var` field and (re-) assigned in the `initialize` method, for example the `GeneratedClassHandler` 2. State that uses the `PerRunInit` / `bTypes.perRunLazy` / `LazyVar` infrastructure, for example the types in `CoreBTypes`

  The reason to use the `LazyVar` infrastructure is to prevent eagerly computing all the state even if it's never used in a run. It can also be used to work around initialization ordering issues, just like ordinary lazy vals. For state that is known to be accessed, a `var` field is just fine.

  Typical `LazyVar` use: `lazy val state: LazyVar[T] = perRunLazy(component)(initializer)`

  - The `initializer` expression is executed lazily
  - When the initializer actually runs, it synchronizes on the `PostProcessorFrontendAccess.frontendLock`
  - The `component.initialize` method causes the `LazyVar` to be re-initialized on the next `get`
  - The `state` is itself a `lazy val` to make sure the `component.initialize` method only clears those `LazyVar`s that were ever accessed

  TODO: convert some uses of `LazyVar` to ordinary `var`.

  Definition Classes
    jvm
- BCodePhase
- StdPhase

c

scala.tools.nsc.backend.jvm.GenBCode

# BCodePhase 

###

#### class BCodePhase extends StdPhase

Source
  GenBCode.scala

Linear Supertypes
GenBCode.StdPhase, GlobalPhase, reflect.internal.Phase, math.Ordered[reflect.internal.Phase], Comparable[reflect.internal.Phase], AnyRef, Any
 
Ordering

1. Alphabetic
2. By Inheritance

Inherited

1. BCodePhase
2. StdPhase
3. GlobalPhase
4. Phase
5. Ordered
6. Comparable
7. AnyRef
8. Any

Implicitly

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

1. Hide All
2. Show All

Visibility

1. Public
2. All

### Instance Constructors

1.  new BCodePhase(prev: Phase)

### Type Members

1.  type Id = Int
   Definition Classes
     Phase

### 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 BCodePhase to any2stringadd[BCodePhase] performed by method any2stringadd in scala.Predef.
   Definition Classes
     any2stringadd
4.  def ->[B](y: B): (BCodePhase, B)
   Implicit
     This member is added by an implicit conversion from BCodePhase to ArrowAssoc[BCodePhase] performed by method ArrowAssoc in scala.Predef.
   Definition Classes
     ArrowAssoc
   Annotations
     @inline()
5.  def <(that: reflect.internal.Phase): Boolean
   Definition Classes
     Ordered
6.  def <=(that: reflect.internal.Phase): Boolean
   Definition Classes
     Ordered
7.  final def ==(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
8.  def >(that: reflect.internal.Phase): Boolean
   Definition Classes
     Ordered
9.  def >=(that: reflect.internal.Phase): Boolean
   Definition Classes
     Ordered
10.  def apply(unit: Global.CompilationUnit): Unit
    Definition Classes
      BCodePhase → GlobalPhase
11.  final def applyPhase(unit: Global.CompilationUnit): Unit
    Definition Classes
      GlobalPhase
12.  final def asInstanceOf[T0]: T0
    Definition Classes
      Any
13.  final val assignsFields: Boolean
    Definition Classes
      Phase
14.  def cancelled(unit: Global.CompilationUnit): Boolean

    Is current phase cancelled on this unit?

    Is current phase cancelled on this unit?

    Definition Classes
      GlobalPhase
15.  def checkable: Boolean
    Definition Classes
      Phase
16.  def clone(): AnyRef
    Attributes
      protected[lang]
    Definition Classes
      AnyRef
    Annotations
      @throws( ... ) @native()
17.  def compare(that: reflect.internal.Phase): Id
    Definition Classes
      Phase → Ordered
18.  def compareTo(that: reflect.internal.Phase): Int
    Definition Classes
      Ordered → Comparable
19.  def description: String
    Definition Classes
      BCodePhase → Phase
20.  def ensuring(cond: (BCodePhase) ⇒ Boolean, msg: ⇒ Any): BCodePhase
    Implicit
      This member is added by an implicit conversion from BCodePhase to Ensuring[BCodePhase] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
21.  def ensuring(cond: (BCodePhase) ⇒ Boolean): BCodePhase
    Implicit
      This member is added by an implicit conversion from BCodePhase to Ensuring[BCodePhase] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
22.  def ensuring(cond: Boolean, msg: ⇒ Any): BCodePhase
    Implicit
      This member is added by an implicit conversion from BCodePhase to Ensuring[BCodePhase] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
23.  def ensuring(cond: Boolean): BCodePhase
    Implicit
      This member is added by an implicit conversion from BCodePhase to Ensuring[BCodePhase] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
24.  final def eq(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
25.  def equals(other: Any): Boolean
    Definition Classes
      Phase → AnyRef → Any
26.  final def erasedTypes: Boolean
    Definition Classes
      Phase
27.  def erasedTypes_=(value: Boolean): Unit
    Attributes
      protected
    Definition Classes
      Phase
28.  def finalize(): Unit
    Attributes
      protected[lang]
    Definition Classes
      AnyRef
    Annotations
      @throws( classOf[java.lang.Throwable] )
29.  def flagMask: Long
    Definition Classes
      Phase
30.  final val flatClasses: Boolean
    Definition Classes
      Phase
31.  val fmask: Long
    Definition Classes
      Phase
32.  final def getClass(): Class[_]
    Definition Classes
      AnyRef → Any
    Annotations
      @native()
33.  def hasNext: Boolean
    Definition Classes
      Phase
34.  def hashCode(): Int
    Definition Classes
      Phase → AnyRef → Any
35.  val id: Id
    Definition Classes
      Phase
36.  final def isInstanceOf[T0]: Boolean
    Definition Classes
      Any
37.  def iterator: collection.Iterator[reflect.internal.Phase]
    Definition Classes
      Phase
38.  def keepsTypeParams: Boolean
    Definition Classes
      Phase
39.  def name: String
    Definition Classes
      StdPhase → Phase
40.  final def ne(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
41.  def newFlags: Long
    Definition Classes
      StdPhase → Phase
42.  def next: reflect.internal.Phase
    Definition Classes
      Phase
43.  def nextFlags: Long
    Definition Classes
      StdPhase → Phase
44.  final def notify(): Unit
    Definition Classes
      AnyRef
    Annotations
      @native()
45.  final def notifyAll(): Unit
    Definition Classes
      AnyRef
    Annotations
      @native()
46.  val prev: reflect.internal.Phase
    Definition Classes
      Phase
47.  final val refChecked: Boolean
    Definition Classes
      Phase
48.  def run(): Unit
    Definition Classes
      BCodePhase → GlobalPhase → Phase
49.  def shouldSkipThisPhaseForJava: Boolean
    Attributes
      protected
    Definition Classes
      GlobalPhase
50.  final val specialized: Boolean
    Definition Classes
      Phase
51.  final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
      AnyRef
52.  def toString(): String
    Definition Classes
      Phase → AnyRef → Any
53.  final def wait(): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws( ... )
54.  final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws( ... )
55.  final def wait(arg0: Long): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws( ... ) @native()
56.  final def withCurrentUnitNoLog(unit: Global.CompilationUnit)(task: ⇒ Unit): Unit
    Definition Classes
      GlobalPhase
    Annotations
      @inline()
57.  def writeOtherFiles(): Unit
58.  def →[B](y: B): (BCodePhase, B)
    Implicit
      This member is added by an implicit conversion from BCodePhase to ArrowAssoc[BCodePhase] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
      ArrowAssoc

### Shadowed Implicit Value Members

1.  def <(that: BCodePhase): Boolean
   Implicit
     This member is added by an implicit conversion from BCodePhase to math.Ordered[BCodePhase] performed by method orderingToOrdered in scala.math.Ordered. This conversion will take place only if an implicit value of type math.Ordering[BCodePhase] is in scope.
   Shadowing
     This implicitly inherited member is shadowed by one or more members in this class.
     To access this member you can use a type ascription:

         (bCodePhase: math.Ordered[BCodePhase]).<(that)

   Definition Classes
     Ordered
2.  def <=(that: BCodePhase): Boolean
   Implicit
     This member is added by an implicit conversion from BCodePhase to math.Ordered[BCodePhase] performed by method orderingToOrdered in scala.math.Ordered. This conversion will take place only if an implicit value of type math.Ordering[BCodePhase] is in scope.
   Shadowing
     This implicitly inherited member is shadowed by one or more members in this class.
     To access this member you can use a type ascription:

         (bCodePhase: math.Ordered[BCodePhase]).<=(that)

   Definition Classes
     Ordered
3.  def >(that: BCodePhase): Boolean
   Implicit
     This member is added by an implicit conversion from BCodePhase to math.Ordered[BCodePhase] performed by method orderingToOrdered in scala.math.Ordered. This conversion will take place only if an implicit value of type math.Ordering[BCodePhase] is in scope.
   Shadowing
     This implicitly inherited member is shadowed by one or more members in this class.
     To access this member you can use a type ascription:

         (bCodePhase: math.Ordered[BCodePhase]).>(that)

   Definition Classes
     Ordered
4.  def >=(that: BCodePhase): Boolean
   Implicit
     This member is added by an implicit conversion from BCodePhase to math.Ordered[BCodePhase] performed by method orderingToOrdered in scala.math.Ordered. This conversion will take place only if an implicit value of type math.Ordering[BCodePhase] is in scope.
   Shadowing
     This implicitly inherited member is shadowed by one or more members in this class.
     To access this member you can use a type ascription:

         (bCodePhase: math.Ordered[BCodePhase]).>=(that)

   Definition Classes
     Ordered
5.  def compare(that: BCodePhase): Int
   Implicit
     This member is added by an implicit conversion from BCodePhase to math.Ordered[BCodePhase] performed by method orderingToOrdered in scala.math.Ordered. This conversion will take place only if an implicit value of type math.Ordering[BCodePhase] is in scope.
   Shadowing
     This implicitly inherited member is shadowed by one or more members in this class.
     To access this member you can use a type ascription:

         (bCodePhase: math.Ordered[BCodePhase]).compare(that)

   Definition Classes
     Ordered
6.  def compareTo(that: BCodePhase): Int
   Implicit
     This member is added by an implicit conversion from BCodePhase to math.Ordered[BCodePhase] performed by method orderingToOrdered in scala.math.Ordered. This conversion will take place only if an implicit value of type math.Ordering[BCodePhase] is in scope.
   Shadowing
     This implicitly inherited member is shadowed by one or more members in this class.
     To access this member you can use a type ascription:

         (bCodePhase: math.Ordered[BCodePhase]).compareTo(that)

   Definition Classes
     Ordered → Comparable

### Deprecated Value Members

1.  def formatted(fmtstr: String): String
   Implicit
     This member is added by an implicit conversion from BCodePhase to StringFormat[BCodePhase] performed by method StringFormat in scala.Predef.
   Definition Classes
     StringFormat
   Annotations
     @deprecated @inline()
   Deprecated

     (Since version 2.12.16) Use `formatString.format(value)` instead of `value.formatted(formatString)`, or use the `f""` string interpolator. In Java 15 and later, `formatted` resolves to the new method in String which has reversed parameters.

2.  final def withCurrentUnit(unit: Global.CompilationUnit)(task: ⇒ Unit): Unit
   Definition Classes
     GlobalPhase
   Annotations
     @deprecated
   Deprecated

### Inherited from GenBCode.StdPhase

### Inherited from GlobalPhase

### Inherited from reflect.internal.Phase

### Inherited from math.Ordered[reflect.internal.Phase]

### Inherited from Comparable[reflect.internal.Phase]

### Inherited from AnyRef

### Inherited from Any

### Inherited by implicit conversion orderingToOrdered from BCodePhase to math.Ordered[BCodePhase]

### Inherited by implicit conversion any2stringadd from BCodePhase to any2stringadd[BCodePhase]

### Inherited by implicit conversion StringFormat from BCodePhase to StringFormat[BCodePhase]

### Inherited by implicit conversion Ensuring from BCodePhase to Ensuring[BCodePhase]

### Inherited by implicit conversion ArrowAssoc from BCodePhase to ArrowAssoc[BCodePhase]

### Ungrouped