Scala Compiler 2.13.16 - scala.tools.nsc.backend.jvm.opt.LocalOptImpls
Keywords: Scala Compiler 2.13.16 scala.tools.nsc.backend.jvm.opt.LocalOptImpls

Scala Compiler2.13.16 < 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
- FifoCache
- InlineInfoAttribute
- InlineInfoAttributePrototype
- Inliner
- InlinerHeuristics
- LabelNotLive
- LocalOpt
- LocalOptImpls
- RemovePair
- RemovePairDependency

o

scala.tools.nsc.backend.jvm.opt

# LocalOptImpls

###

#### object LocalOptImpls

Source
  LocalOpt.scala

Linear Supertypes
AnyRef, Any

Ordering

1. Alphabetic
2. By Inheritance

Inherited

1. LocalOptImpls
2. AnyRef
3. Any

1. Hide All
2. Show All

Visibility

1. Public
2. Protected

### Type Members

1.  sealed abstract class RemoveHandlersResult extends AnyRef

### Value Members

1.  final def !=(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
2.  final def ##: Int
   Definition Classes
     AnyRef → Any
3.  final def ==(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
4.  final def asInstanceOf[T0]: T0
   Definition Classes
     Any
5.  def clone(): AnyRef
   Attributes
     protected[lang]
   Definition Classes
     AnyRef
   Annotations
     @throws(classOf[java.lang.CloneNotSupportedException]) @native()
6.  def compactLocalVariables(method: MethodNode): Boolean

   Compact the local variable slots used in the method's implementation.

   Compact the local variable slots used in the method's implementation. This prevents having unused slots for example after eliminating unreachable code.

   This transformation reduces the size of the frame for invoking the method. For example, if the method has an ISTORE instruction to the local variable 3, the maxLocals of the method is at least 4, even if some local variable slots below 3 are not used by any instruction.

   This could be improved by doing proper register allocation.

7.  final def eq(arg0: AnyRef): Boolean
   Definition Classes
     AnyRef
8.  def equals(arg0: AnyRef): Boolean
   Definition Classes
     AnyRef → Any
9.  def finalize(): Unit
   Attributes
     protected[lang]
   Definition Classes
     AnyRef
   Annotations
     @throws(classOf[java.lang.Throwable])
10.  final def getClass(): Class[_ <: AnyRef]
    Definition Classes
      AnyRef → Any
    Annotations
      @native()
11.  def hashCode(): Int
    Definition Classes
      AnyRef → Any
    Annotations
      @native()
12.  final def isInstanceOf[T0]: Boolean
    Definition Classes
      Any
13.  final def ne(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
14.  final def notify(): Unit
    Definition Classes
      AnyRef
    Annotations
      @native()
15.  final def notifyAll(): Unit
    Definition Classes
      AnyRef
    Annotations
      @native()
16.  def removeEmptyExceptionHandlers(method: MethodNode): RemoveHandlersResult

    Remove exception handlers that cover empty code blocks.

    Remove exception handlers that cover empty code blocks. A block is considered empty if it consist only of labels, frames, line numbers, nops and gotos.

    There are no executable instructions that we can assume don't throw (eg ILOAD). The JVM spec basically says that a VirtualMachineError may be thrown at any time: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.3

    Note that no instructions are eliminated.

    Returns a pair of booleans (handlerRemoved, liveHandlerRemoved)

    The `liveHandlerRemoved` result depends on `removeUnreachableCode` being executed before, so that `BackendUtils.isLabelReachable` gives a correct answer.

17.  def removeEmptyLineNumbers(method: MethodNode): Boolean

    Removes LineNumberNodes that don't describe any executable instructions.

    Removes LineNumberNodes that don't describe any executable instructions.

    As a side-effect, this traversal removes the `LABEL_REACHABLE_STATUS` flag from all label's `status` fields.

    This method expects (and asserts) that the `start` label of each LineNumberNode is the lexically preceding label declaration.

18.  def removeUnusedLocalVariableNodes(method: MethodNode)(firstLocalIndex: Int = parametersSize(method), renumber: (Int) => Int = identity): Boolean

    Remove all non-parameter entries from the local variable table which denote variables that are not actually read or written.

    Remove all non-parameter entries from the local variable table which denote variables that are not actually read or written.

    Note that each entry in the local variable table has a start, end and index. Two entries with the same index, but distinct start / end ranges are different variables, they may have not the same type or name.

19.  def simplifyJumps(method: MethodNode): Boolean

    Apply various simplifications to branching instructions.

20.  final def synchronized[T0](arg0: => T0): T0
    Definition Classes
      AnyRef
21.  def toString(): String
    Definition Classes
      AnyRef → Any
22.  final def wait(): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.InterruptedException])
23.  final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.InterruptedException])
24.  final def wait(arg0: Long): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.InterruptedException]) @native()
25.  object RemoveHandlersResult

### Inherited from AnyRef

### Inherited from Any

### Ungrouped