abstract class GenBCode extends SubComponent
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:
- State that is stored in a
varfield and (re-) assigned in theinitializemethod, for example theGeneratedClassHandler2. State that uses thePerRunInit/bTypes.perRunLazy/LazyVarinfrastructure, for example the types inCoreBTypes
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
initializerexpression is executed lazily - When the initializer actually runs, it synchronizes on the
PostProcessorFrontendAccess.frontendLock - The
component.initializemethod causes theLazyVarto be re-initialized on the nextget - The
stateis itself alazy valto make sure thecomponent.initializemethod only clears thoseLazyVars that were ever accessed
TODO: convert some uses of LazyVar to ordinary var.
- Self Type
- GenBCode
- Source
- GenBCode.scala
- Alphabetic
- By Inheritance
- GenBCode
- SubComponent
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Instance Constructors
- new GenBCode()
Type Members
-
abstract
class
StdPhase extends GlobalPhase
A standard phase template
A standard phase template
- Definition Classes
- SubComponent
- class BCodePhase extends StdPhase
Abstract Value Members
-
abstract
val
global: Global
The global environment; overridden by instantiation in Global.
The global environment; overridden by instantiation in Global.
- Definition Classes
- SubComponent
-
abstract
val
runsAfter: List[String]
Names of phases that must run before this phase.
Names of phases that must run before this phase.
- Definition Classes
- SubComponent
-
abstract
val
runsRightAfter: Option[String]
Name of the phase that this phase must follow immediately.
Name of the phase that this phase must follow immediately.
- Definition Classes
- SubComponent
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
- def +(other: String): String
- def ->[B](y: B): (GenBCode, B)
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
afterOwnPhase[T](op: ⇒ T): T
- Definition Classes
- SubComponent
- Annotations
- @inline()
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
- val bTypes: BTypesFromSymbols[global.type]
-
final
def
beforeOwnPhase[T](op: ⇒ T): T
- Definition Classes
- SubComponent
- Annotations
- @inline()
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
- val codeGen: CodeGen[global.type]
-
def
enabled: Boolean
Is this component enabled? Default is true.
Is this component enabled? Default is true.
- Definition Classes
- SubComponent
- def ensuring(cond: (GenBCode) ⇒ Boolean, msg: ⇒ Any): GenBCode
- def ensuring(cond: (GenBCode) ⇒ Boolean): GenBCode
- def ensuring(cond: Boolean, msg: ⇒ Any): GenBCode
- def ensuring(cond: Boolean): GenBCode
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
- var generatedClassHandler: GeneratedClassHandler
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
SubComponent are added to a HashSet and two phases are the same if they have the same name
SubComponent are added to a HashSet and two phases are the same if they have the same name
- Definition Classes
- SubComponent → AnyRef → Any
-
val
initial: Boolean
True if this phase runs before all other phases.
True if this phase runs before all other phases. Usually,
parser.- Definition Classes
- SubComponent
-
val
internal: Boolean
True if this phase is not provided by a plug-in.
True if this phase is not provided by a plug-in.
- Definition Classes
- SubComponent
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
newPhase(prev: Phase): BCodePhase
The phase factory
The phase factory
- Definition Classes
- GenBCode → SubComponent
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
def
ownPhase: Phase
The phase corresponding to this subcomponent in the current compiler run
The phase corresponding to this subcomponent in the current compiler run
- Definition Classes
- SubComponent
-
val
phaseName: String
The name of the phase
The name of the phase
- Definition Classes
- GenBCode → SubComponent
-
def
phaseNewFlags: Long
New flags defined by the phase which are not valid before
New flags defined by the phase which are not valid before
- Definition Classes
- SubComponent
-
def
phaseNextFlags: Long
New flags defined by the phase which are not valid until immediately after it
New flags defined by the phase which are not valid until immediately after it
- Definition Classes
- SubComponent
- val postProcessor: PostProcessor { val bTypes: GenBCode.this.bTypes.type }
- val postProcessorFrontendAccess: PostProcessorFrontendAccess
-
val
requires: List[String]
Names of phases required by this component.
Names of phases required by this component. Default is
Nil.- Definition Classes
- SubComponent
-
val
runsBefore: List[String]
Names of phases that must run after this phase.
Names of phases that must run after this phase. Default is
Nil.- Definition Classes
- SubComponent
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
val
terminal: Boolean
True if this phase runs after all other phases.
True if this phase runs after all other phases. Usually,
terminal.- Definition Classes
- SubComponent
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
- def →[B](y: B): (GenBCode, B)
Deprecated Value Members
-
def
formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from GenBCode to StringFormat[GenBCode] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @deprecated @inline()
- Deprecated
(Since version 2.12.16) Use
formatString.format(value)instead ofvalue.formatted(formatString), or use thef""string interpolator. In Java 15 and later,formattedresolves to the new method in String which has reversed parameters.
The Scala compiler and reflection APIs.