All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opalj.br.instructions.SynchronizationInstruction.scala Maven / Gradle / Ivy

The newest version!
/* BSD 2-Clause License - see OPAL/LICENSE for details. */
package org.opalj
package br
package instructions

/**
 * A synchronization related instruction (MonitorEnter|MonitorExit).
 *
 * @author Michael Eichberg
 */
abstract class SynchronizationInstruction
    extends Instruction
    with ConstantLengthInstruction
    with NoLabels {

    final override def length: Int = 1

    final override def isMonitorInstruction: Boolean = true

    final override def mayThrowExceptions: Boolean = true

    final override def numberOfPoppedOperands(ctg: Int => ComputationalTypeCategory): Int = 1

    final override def numberOfPushedOperands(ctg: Int => ComputationalTypeCategory): Int = 0

    final override def isIsomorphic(thisPC: PC, otherPC: PC)(implicit code: Code): Boolean = {
        val other = code.instructions(otherPC)
        (this eq other) || this == other
    }

    final override def readsLocal: Boolean = false

    final override def indexOfReadLocal: Int = throw new UnsupportedOperationException()

    final override def writesLocal: Boolean = false

    final override def indexOfWrittenLocal: Int = throw new UnsupportedOperationException()

    final override def expressionResult: NoExpression.type = NoExpression

    final override def toString(currentPC: Int): String = toString()
}

object SynchronizationInstruction {

    /**
     * Extractor to match SynchronizationInstructions.
     *
     * ==Example==
     * To use this matcher, do not forget the parentheses. E.g.,
     * {{{
     * case SynchronizationInstruction() => ...
     * }}}
     */
    def unapply(si: SynchronizationInstruction): Boolean = si ne null
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy