dotty.tools.backend.jvm.opt

Members list

Type members

Classlikes

sealed trait ArgInfo

Information about invocation arguments, obtained through data flow analysis of the callsite method.

Information about invocation arguments, obtained through data flow analysis of the callsite method.

Attributes

Supertypes
class Object
trait Matchable
class Any
Known subtypes
class BCodeRepository(frontendAccess: PostProcessorFrontendAccess, backendUtils: BackendUtils, ts: CoreBTypes)(using x$4: Context)

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

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

Attributes

Supertypes
class Object
trait Matchable
class Any
class BTypesFromClassfile(val byteCodeRepository: BCodeRepository, ts: CoreBTypes)

Attributes

Supertypes
class Object
trait Matchable
class Any
final class BoxUnbox(backendUtils: BackendUtils, callGraph: CallGraph, ts: CoreBTypes)

Attributes

Supertypes
class Object
trait Matchable
class Any
class CallGraph(frontendAccess: PostProcessorFrontendAccess, byteCodeRepository: BCodeRepository, bTypesFromClassfile: BTypesFromClassfile, inlineInfoLoader: InlineInfoLoader, ts: CoreBTypes)(using x$6: Context)

Attributes

Supertypes
class Object
trait Matchable
class Any
final case class Callee(callee: MethodNode, calleeDeclarationClass: ClassBType, isStaticallyResolved: Boolean, sourceFilePath: Option[String], annotatedInline: Boolean, annotatedNoInline: Boolean, samParamTypes: IntMap[ClassBType], calleeInfoWarning: Option[CalleeInfoWarning])

A callee in the call graph.

A callee in the call graph.

Value parameters

annotatedInline

True if the callee is annotated @inline

annotatedNoInline

True if the callee is annotated @noinline

callee

The callee, as it appears in the invocation instruction. For virtual calls, an override of the callee might be invoked. Also, the callee can be abstract.

calleeDeclarationClass

The class in which the callee is declared

calleeInfoWarning

An inliner warning if some information was not available while gathering the information about this callee.

isStaticallyResolved

True if the callee cannot be overridden

samParamTypes

A map from parameter positions to SAM parameter types

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
sealed trait CalleeInfoWarning extends OptimizerWarning

Used in the CallGraph for nodes where an issue occurred determining the callee information.

Used in the CallGraph for nodes where an issue occurred determining the callee information.

Attributes

Supertypes
class Object
trait Matchable
class Any
Known subtypes
final case class CalleeNotFinal(calleeDeclarationClass: InternalName, name: String, descriptor: String, annotatedInline: Boolean) extends CannotInlineWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
sealed trait Callsite

Attributes

Supertypes
class Object
trait Matchable
class Any
Known subtypes
sealed trait CannotInlineWarning extends OptimizerWarning

Attributes

Supertypes
class Object
trait Matchable
class Any
Known subtypes

Used in the InlineInfo of a ClassBType, when some issue occurred obtaining the inline information.

Used in the InlineInfo of a ClassBType, when some issue occurred obtaining the inline information.

Attributes

Supertypes
class Object
trait Matchable
class Any
Known subtypes
final case class ClassNotFound(internalName: InternalName) extends MissingBytecodeWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class ClosureInstantiation(lambdaMetaFactoryCall: LambdaMetaFactoryCall, ownerMethod: MethodNode, ownerClass: ClassBType, capturedArgInfos: IntMap[ArgInfo])

Metadata about a closure instantiation, stored in the call graph

Metadata about a closure instantiation, stored in the call graph

Value parameters

capturedArgInfos

information about captured arguments. Used for updating the call graph when re-writing a closure invocation to the body method.

lambdaMetaFactoryCall

the InvokeDynamic instruction

ownerClass

the class containing the above method

ownerMethod

the method where the closure is allocated

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
class ClosureOptimizer(ppa: PostProcessorFrontendAccess, backendUtils: BackendUtils, byteCodeRepository: BCodeRepository, callGraph: CallGraph, ts: CoreBTypes, bTypesFromClassfile: BTypesFromClassfile)

Attributes

Companion
object
Supertypes
class Object
trait Matchable
class Any
class CopyProp(backendUtils: BackendUtils, callGraph: CallGraph, inliner: Inliner, ts: CoreBTypes, optAllowSkipClassLoading: Boolean)

Attributes

Supertypes
class Object
trait Matchable
class Any
final case class FieldNotFound(name: String, descriptor: String, ownerInternalName: InternalName, missingClass: Option[ClassNotFound]) extends MissingBytecodeWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
object FifoCache

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
FifoCache.type
final case class ForwardedParam(index: Int) extends ArgInfo

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
trait ArgInfo
class Object
trait Matchable
class Any
Show all
case object FunctionLiteral extends ArgInfo

Attributes

Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait ArgInfo
class Object
trait Matchable
class Any
Show all
Self type
final case class IllegalAccessCheckFailed(calleeDeclarationClass: InternalName, name: String, descriptor: String, annotatedInline: Boolean, callsiteClass: InternalName, instruction: AbstractInsnNode, cause: OptimizerWarning) extends CannotInlineWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class IllegalAccessInstructions(calleeDeclarationClass: InternalName, name: String, descriptor: String, annotatedInline: Boolean, callsiteClass: InternalName, instructions: List[AbstractInsnNode]) extends CannotInlineWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
object InlineInfo

Attributes

Companion
class
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
Self type
InlineInfo.type
final case class InlineInfo(isEffectivelyFinal: Boolean, sam: Option[String], methodInfos: SortedMap[(String, String), MethodInlineInfo], warning: Option[ClassInlineInfoWarning], isAccessible: Boolean)

Metadata about a ClassBType, used by the inliner.

Metadata about a ClassBType, used by the inliner.

More information may be added in the future to enable more elaborate inline heuristics. Note that this class should contain information that can only be obtained from the ClassSymbol. Information that can be computed from the ClassNode should be added to the call graph instead.

Value parameters

isAccessible

Whether this class's internals can be inlined into callsites, i.e., it is exported from a public module.

isEffectivelyFinal

True if the class cannot have subclasses: final classes, module classes.

methodInfos

The MethodInlineInfos for the methods declared in this class. The map is indexed by the string s"$name$descriptor" (to disambiguate overloads).

sam

If this class is a SAM type, the SAM's "$name$descriptor".

warning

Contains a warning message if an error occurred when building this InlineInfo, for example if some classfile could not be found on the classpath. This warning can be reported later by the inliner.

Attributes

Companion
object
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
case class InlineInfoAttribute(inlineInfo: InlineInfo) extends Attribute

This attribute stores the InlineInfo for a ClassBType as an independent classfile attribute. The compiler does so for every class being compiled.

This attribute stores the InlineInfo for a ClassBType as an independent classfile attribute. The compiler does so for every class being compiled.

The reason is that a precise InlineInfo can only be obtained if the symbol for a class is available. For example, we need to know if a method is final in Scala's terms, or if it has the @inline annotation. Looking up a class symbol for a given class filename is brittle (name-mangling).

The attribute is also helpful for inlining mixin methods. The mixin phase only adds mixin method symbols to classes that are being compiled. For all other class symbols, there are no mixin members. However, the inliner requires an InlineInfo for inlining mixin members. That problem is solved by reading the InlineInfo from this attribute.

In principle, we could encode the InlineInfo into a Java annotation (instead of a classfile attribute). However, an attribute allows us to save many bits. In particular, note that the strings in an InlineInfo are serialized as references to constants in the constant pool, and those strings (method names, method signatures) would exist in there anyway. So the ScalaInlineAttribute remains relatively compact.

Attributes

Companion
object
Supertypes
trait Serializable
trait Product
trait Equals
class Attribute
class Object
trait Matchable
class Any
Show all
Known subtypes

Attributes

Companion
class
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
Self type

In order to instruct the ASM framework to deserialize the ScalaInlineInfo attribute, we need to pass a prototype instance when running the class reader.

In order to instruct the ASM framework to deserialize the ScalaInlineInfo attribute, we need to pass a prototype instance when running the class reader.

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Attribute
class Object
trait Matchable
class Any
Show all
Self type
final class InlineInfoLoader(bCodeRepository: BCodeRepository, primitives: DottyPrimitives, ts: CoreBTypes)(using x$4: Context)

Attributes

Supertypes
class Object
trait Matchable
class Any
final class InlineLog(optLogInline: Option[String])

Attributes

Companion
object
Supertypes
class Object
trait Matchable
class Any
object InlineLog

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
InlineLog.type
final case class InlineRequest(callsite: KnownCallsite, reason: InlineReason, logAnyInline: Boolean, inlineEverything: Boolean)

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class InlinedCallsite(eliminatedCallsite: KnownCallsite, warning: Option[IllegalAccessInstructions])

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
class Inliner(ppa: PostProcessorFrontendAccess, backendUtils: BackendUtils, inlineInfoLoader: InlineInfoLoader, callGraph: CallGraph, coreBTypes: CoreBTypes, bTypesFromClassfile: BTypesFromClassfile, byteCodeRepository: BCodeRepository, heuristics: InlinerHeuristics, closureOptimizer: ClosureOptimizer)

Attributes

Supertypes
class Object
trait Matchable
class Any

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
class InlinerHeuristics(ppa: PostProcessorFrontendAccess, backendUtils: BackendUtils, byteCodeRepository: BCodeRepository, callGraph: CallGraph, ts: CoreBTypes)(using x$6: Context)

Attributes

Companion
object
Supertypes
class Object
trait Matchable
class Any
final case class KnownCallsite(callsiteInstruction: MethodInsnNode, callsiteMethod: MethodNode, callsiteClass: ClassBType, callee: Callee, argInfos: IntMap[ArgInfo], callsiteStackHeight: Int, receiverKnownNotNull: Boolean, callsitePosition: SourcePosition, annotatedInline: Boolean, annotatedNoInline: Boolean) extends Callsite

A callsite in the call graph.

A callsite in the call graph.

Value parameters

argInfos

Information about the invocation receiver and arguments

callee

The callee, as it appears in the invocation instruction. For virtual calls, an override of the callee might be invoked. Also, the callee can be abstract. Contains a warning message if the callee MethodNode cannot be found in the bytecode repository.

callsiteClass

The class containing the callsite

callsiteInstruction

The invocation instruction

callsiteMethod

The method containing the callsite

callsitePosition

The source position of the callsite, used for inliner warnings.

callsiteStackHeight

The stack height at the callsite, required by the inliner

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
trait Callsite
class Object
trait Matchable
class Any
Show all
case class LabelNotLive(label: LabelNode) extends RemovePairDependency

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
object Limits

See the doc comment on package object analysis for a discussion on performance.

See the doc comment on package object analysis for a discussion on performance.

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
Limits.type
class LocalOpt(backendUtils: BackendUtils, ppa: PostProcessorFrontendAccess, callGraph: CallGraph, inliner: Inliner, ts: CoreBTypes, bTypesFromClassfile: BTypesFromClassfile)

Optimizations within a single method. Certain optimizations enable others, for example removing unreachable code can render a try block empty and enable removeEmptyExceptionHandlers. The latter in turn enables more unreachable code to be eliminated (the catch block), so there is a cyclic dependency. Optimizations that depend on each other are therefore executed in a loop until reaching a fixpoint.

Optimizations within a single method. Certain optimizations enable others, for example removing unreachable code can render a try block empty and enable removeEmptyExceptionHandlers. The latter in turn enables more unreachable code to be eliminated (the catch block), so there is a cyclic dependency. Optimizations that depend on each other are therefore executed in a loop until reaching a fixpoint.

The optimizations marked UPSTREAM enable optimizations that were already executed, so they cause another iteration in the fixpoint loop.

nullness optimizations: rewrite null-checking branches to GOTO if nullness is known

  • enables downstream
    • unreachable code (null / non-null branch becomes unreachable)
    • box-unbox elimination (may render an escaping consumer of a box unreachable)
    • stale stores (aload x is replaced by aconst_null if it's known null)
    • simplify jumps (replaces conditional jumps by goto, so may enable goto chains)

unreachable code / DCE (removes instructions of basic blocks to which there is no branch)

  • enables downstream:
    • stale stores (loads may be eliminated, removing consumers of a store)
    • empty handlers (try blocks may become empty)
    • simplify jumps (goto l; [dead code]; l: ...) => remove goto
    • stale local variable descriptors
    • (not box-unbox, which is implemented using prod-cons, so it doesn't consider dead code)

note that eliminating empty handlers and stale local variable descriptors is required for correctness, see the comment in the body of methodOptimizations.

box-unbox elimination (eliminates box-unbox pairs within the same method)

  • enables UPSTREAM:
    • nullness optimizations (a box extraction operation (unknown nullness) may be rewritten to a read of a non-null local. example in doc comment of box-unbox implementation)
    • further box-unbox elimination (e.g. an Integer stored in a Tuple; eliminating the tuple may enable eliminating the Integer)
  • enables downstream:
    • copy propagation (new locals are introduced, may be aliases of existing)
    • stale stores (multi-value boxes where not all values are used)
    • redundant casts (("a", "b")._1: the generic _1 method returns Object, a cast to String is added. The cast is redundant after eliminating the tuple.)
    • empty local variable descriptors (local variables that were holding the box may become unused)
  • push-pop (due to artifacts of eliminating runtime type tests on primitives)

copy propagation (replaces LOAD n to the LOAD m for the smallest m that is an alias of n)

  • enables downstream:
    • stale stores (a stored value may not be loaded anymore)
    • store-load pairs (a load n may now be right after a store n)

stale stores (replace STORE by POP), rewrites ClassTag(x).newArray, inlines array_apply/update

  • enables UPSTREAM:
    • nullness optimizations (newArray rewrite or inlining may turn things non-null)
  • enables downstream:
    • push-pop (the new pop may be the single consumer for an instruction)
    • redundant casts (because rewrites newArray, the array type gets more precise)

redundant casts and rewrite some intrinsics: eliminates casts that are statically known to succeed (uses type propagation), rewrites instanceof checks, rewrites intrinsics.

  • enables UPSTREAM:
    • box-unbox elimination (a removed checkcast may be a box consumer)
    • copy propagation (a removed checkcast may turn an upcasted local variable into an alias)
  • enables downstream:
    • push-pop for closure allocation elimination (every indyLambda is followed by a checkcast, see scala/bug#9540)
    • redundant casts (changing an instanceof to true/false removes branches and can make types of other values more precise)

push-pop (when a POP is the only consumer of a value, remove the POP and its producer)

  • enables UPSTREAM:
    • stale stores (if a LOAD is removed, a corresponding STORE may become stale)
    • box-unbox elimination (push-pop may eliminate a closure allocation, rendering a captured box non-escaping)
    • redundant casts (Int.unbox(x) is replaced by x.asInstanceOf[Integer]; pop)
    • nullness (x.intValue is replaced by if (x == null) throw null)
  • enables downstream:
    • store-load pairs (a variable may become non-live)
    • stale handlers (push-pop removes code)
    • simplify jumps (push-pop removes code)

store-load pairs (remove STORE x; LOAD x if x is otherwise not used in the method)

  • enables downstream:
    • empty handlers (code is removes, a try block may become empty)
    • simplify jumps (code is removed, a goto may become redundant for example)
    • stale local variable descriptors

empty handlers (removes exception handlers whose try block is empty)

  • enables UPSTREAM:
    • unreachable code (catch block becomes unreachable)
    • box-unbox (a box may be escape in an operation in a dead handler)
  • enables downstream:
    • simplify jumps

simplify jumps (various, like GOTO l; l: ..., see doc comments of individual optimizations)

  • enables UPSTREAM
    • unreachable code (GOTO a; a: GOTO b; b: ..., the first jump is changed to GOTO b, the second becomes unreachable)
    • store-load pairs (a GOTO l; l: ... is removed between store and load)
    • push-pop (IFNULL l; l: ... is replaced by POP)

The following cleanup optimizations don't enable any upstream optimizations, so they can be executed once at the end, when the above optimizations reach a fixpoint.

empty local variable descriptors (removes unused variables from the local variable table)

empty line numbers (eliminates line number nodes that describe no executable instructions)

At this point, we used to filter out redundant label nodes (sequences of labels without any executable instructions in between). However, this operation is relatively expensive, and unnecessary: labels don't exist in the classfile, they are lowered to bytecode offsets, so redundant labels disappear by design.

Note on a method's maxLocals / maxStack: the backend only uses those values for running Analyzers. The values can be conservative approximations: if an optimization removes code and the maximal stack size is now smaller, the larger maxStack value will still work fine for running an Analyzer (just that frames allocate more space than required). The correct max values written to the bytecode are re-computed during classfile serialization. To keep things simpler, we don't update the max values in every optimization:

  • we do it in removeUnreachableCodeImpl, because it's quite straightforward
  • maxLocals is updated in compactLocalVariables, which runs at the end of method optimizations

Note on updating the call graph: whenever an optimization eliminates a callsite or a closure instantiation, we eliminate the corresponding entry from the call graph.

Attributes

Supertypes
class Object
trait Matchable
class Any
object LocalOptImpls

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
object LogUtils

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
LogUtils.type
final case class MethodInlineInfo(effectivelyFinal: Boolean = ..., annotatedInline: Boolean = ..., annotatedNoInline: Boolean = ...)

Metadata about a method, used by the inliner.

Metadata about a method, used by the inliner.

Value parameters

annotatedInline

True if the method is annotated @inline

annotatedNoInline

True if the method is annotated @noinline

effectivelyFinal

True if the method cannot be overridden (in Scala)

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class MethodInlineInfoError(declarationClass: InternalName, name: String, descriptor: String, cause: OptimizerWarning) extends CalleeInfoWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class MethodInlineInfoIncomplete(declarationClass: InternalName, name: String, descriptor: String, cause: ClassInlineInfoWarning) extends CalleeInfoWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class MethodInlineInfoMissing(declarationClass: InternalName, name: String, descriptor: String, cause: Option[ClassInlineInfoWarning]) extends CalleeInfoWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final class MethodInlinerState(optLogInline: Option[String])

Attributes

Supertypes
class Object
trait Matchable
class Any
object MethodMax

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
MethodMax.type
final case class MethodNotFound(name: String, descriptor: String, ownerInternalNameOrArrayDescriptor: InternalName, missingClass: Option[ClassNotFound]) extends MissingBytecodeWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class MethodWithHandlerCalledOnNonEmptyStack(calleeDeclarationClass: InternalName, name: String, descriptor: String, annotatedInline: Boolean, callsiteClass: InternalName, callsiteName: String, callsiteDesc: String) extends CannotInlineWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Attributes

Supertypes
class Object
trait Matchable
class Any
Known subtypes
final case class NoBytecode(calleeDeclarationClass: InternalName, name: String, descriptor: String, annotatedInline: Boolean) extends CannotInlineWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class NoClassBTypeInfo(cause: MissingBytecodeWarning) extends OptimizerWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class NoInlineInfoAttribute(internalName: InternalName) extends ClassInlineInfoWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
sealed trait RemovePairDependency

Attributes

Supertypes
class Object
trait Matchable
class Any
Known subtypes
class LabelNotLive
class RemovePair
case class ResultingMethodTooLarge(calleeDeclarationClass: InternalName, name: String, descriptor: String, annotatedInline: Boolean, callsiteClass: InternalName, callsiteName: String, callsiteDesc: String) extends CannotInlineWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Used in rewriteClosureApplyInvocations when a closure apply callsite cannot be rewritten to the closure body method.

Used in rewriteClosureApplyInvocations when a closure apply callsite cannot be rewritten to the closure body method.

Attributes

Supertypes
class Object
trait Matchable
class Any
Known subtypes

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
case object StaticallyKnownArray extends ArgInfo

Attributes

Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait ArgInfo
class Object
trait Matchable
class Any
Show all
Self type
final case class StrictfpMismatch(calleeDeclarationClass: InternalName, name: String, descriptor: String, annotatedInline: Boolean, callsiteClass: InternalName, callsiteName: String, callsiteDesc: String) extends CannotInlineWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class SynchronizedMethod(calleeDeclarationClass: InternalName, name: String, descriptor: String, annotatedInline: Boolean) extends CannotInlineWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
class UndoLog(backendUtils: BackendUtils, callGraph: CallGraph)

Attributes

Supertypes
class Object
trait Matchable
class Any
final case class UnknownCallsite(callsiteInstruction: MethodInsnNode, callsiteMethod: MethodNode, callsiteClass: ClassBType, callsitePosition: SourcePosition, argInfos: IntMap[ArgInfo], warning: OptimizerWarning) extends Callsite

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
trait Callsite
class Object
trait Matchable
class Any
Show all

Attributes

Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
Self type
final case class UnknownScalaInlineInfoVersion(internalName: InternalName, version: Int) extends ClassInlineInfoWarning

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Ordering for inline requests. Required to make the inliner deterministic:

Ordering for inline requests. Required to make the inliner deterministic:

  • Always remove the same request when breaking inlining cycles
  • Perform inlinings in a consistent order

Attributes

Supertypes
trait Serializable
class Object
trait Matchable
class Any
Show all
Self type